怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8570|回复: 6
打印 上一主题 下一主题

怎样创建一个双核(arm,dsp)的工程

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,& E7 R7 P9 ?2 O. _/ @
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。; ~1 r" \7 z6 |) x$ s. V4 }6 f

- J8 S2 g' Y- o. v; f4 E3 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
" j# D' [% @* X, v1 r1 R
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程8 {) i, Y" q7 C5 Y
) q/ p$ A7 s8 N# G- ~
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。) r2 C6 _# |' I6 }2 L0 p
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。& t4 j; S% X# ?
 “清理”过的例程的源码如下:
4 l1 A3 F& I- x6 t8 I! @) n3 a3 `& T+ `( Y- t. I
├── dsp
" ^/ s! A& z) P4 s7 {3 _& @: S5 _+ D│   ├── Dsp.cfg
! g, g* }/ h* y) G8 l# e2 f│   ├── main_dsp.c
3 X8 s7 G& _2 H+ L+ x" |  a% V│   ├── Server.c
# P2 p( a( e& d5 [│   └── Server.h
& K! c8 K# o3 h├── host
( y; W) I* p. ?" C$ @" p│   ├── App.c5 u' R* u' I0 O0 Z# f! V
│   ├── App.h3 q4 k0 O1 x7 [( B, b
│   └── main_host.c
* G, f" k' }: `, U6 ~└── shared, Q5 e8 m2 Y: |! L
   ├── config.bld
. ]# ]3 c* T$ \+ N+ O   └── SystemCfg.h9 ~# d( {; Z0 }
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
1 }" o6 x  U% }- C2 T1 |: r& Y) ?3 u/ F5 @
./makefile
9 I3 e1 B$ V& u1 w4 S( o" z) F! Z/ \7 I; r- Z
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
+ G% I+ z) d- r3 |# P 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15' I+ z9 M% l/ n+ D
3 2 `) J! d  e0 P1 e3 X
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi% }0 D! M: o5 Y% S
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
& F7 Z- _7 \) a) M  Y 6 7 L8 `" M2 l, L7 ~' e5 H6 x
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_502 o1 d. U. e& `3 u( e4 E' v
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72' r( H. P1 q; H' D2 N$ D4 L& v
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
! N0 l8 Q! S  p5 g10 ( E; m% h$ e  D1 }* C, i
11 export SYSLINK_INSTALL_DIR      \
: c  I8 [& y3 J) [/ F12        IPC_INSTALL_DIR          \
* [: e$ O2 x, B& b13        BIOS_INSTALL_DIR         \9 Z. @9 ?& L4 T- W# t% t1 d# s2 X
14        XDC_INSTALL_DIR          \
+ t. T" H6 v" d% A! C3 P15        CGT_C674_ELF_INSTALL_DIR \8 F/ B( `" F( t/ U* P: ?& C; }
16        CGT_ARM_PREFIX
* C6 e7 X3 f+ G6 k6 ~3 j17 , ?+ y. ]5 A0 d
18 all:& f; v  w. q' _" m5 u3 R, v! g
19     make -C host all
. Q) r& g% I3 H2 E2 L. U2 x- W20     make -C dsp all7 N( P! d4 R, ^+ P
21 ! `. h6 M( x5 N( o
22 clean::6 I) G/ o: z6 ?' p, H
23     make -C host clean! M# V+ b' }4 x* ~4 a
24     make -C dsp clean" d& J1 {8 T; @& c0 A
./dsp/makefile0 x; M5 {9 V- ^# n0 [4 D2 c
+ g- b( ]6 L0 Q
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
" r3 c3 f6 q" ~7 d8 Q 2 objs = $(patsubst %.c,%.oe674,$(srcs))' g+ W1 t. @) a' W3 m
3 libs = configuro/linker.cmd+ a; z# E/ K4 N$ w" Y
4 0 A9 g+ C8 X/ s6 w# S+ Q2 ~% D$ y
5 all: configuro/linker.cmd
* M; d- [$ C  I2 q. @ 6     make server_dsp.xe674
: R# f& K4 @2 H% ~# e  r/ M9 P 7 ' ]0 @7 }  d9 r7 z' @
8 server_dsp.xe674: $(objs) $(libs)
( v; ?7 T: N' }; r/ U# q: s0 o* k 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 v6 [3 K5 B4 E# i) T' x
10 ( A. p( }# W+ ?. m
11 %.oe674: %.h' b7 W* H4 i" {) @  x" K2 {
12 %.oe674: %.c
( u" Y8 s; x6 Z& r" k7 i: c+ g13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<8 Q3 G9 g, z& b; L% X- q5 m0 M
14 ; U+ [  p% e2 m$ u8 e+ d! ~4 a. X" w
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
1 `9 ~9 F& g8 J* Y5 V/ ?  v5 o' G16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
0 k; x6 q0 z, Q# w17             xdc.tools.configuro -o configuro                        \6 j5 \  a2 ]) A( S6 q
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
7 k7 M. M' L5 S* E" \5 w19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \) c) E; u; @0 k* |3 L
20             -r release Dsp.cfg
8 v7 @7 Y+ M6 [# D8 m8 t21
$ d2 `) t+ r$ h22 clean::
0 O# J4 `( v# {* n23     rm -rf configuro *.oe674  *.map server_dsp.xe674
& _# r0 S( x' ~, a0 Q9 R24
. A2 f* }( W0 w' e4 k+ `( _25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
* I* S9 e. z4 X/ J( U26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
- }4 T0 A1 V/ e/ n27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
' ?* X) j! G, _5 _' \( @% }- L28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages! C3 ~$ q  X( ~( A" \1 c
29 5 m$ l6 u! S; A/ h
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
$ F* K& m: o1 s# Z, k31
  n" p" t' v* q0 q32 CC = $(CGTOOLS)/bin/cl6x -c                         + d1 m! ~5 U6 ?/ I6 p
33 AR = $(CGTOOLS)/bin/ar6x rq
) V) w6 I+ W$ r, Z/ I" d* q34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi7 x8 Y$ K5 }* I. M; m1 ~5 K- {
35 ST = $(CGTOOLS)/bin/strip6x
% N8 H0 i6 D" I6 `6 u9 Z, a: Q: m36 ) h% v" K4 `/ i0 q: [/ C
37 CPPFLAGS =# I; ?  N4 w9 T6 w- B. k' R
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)8 W+ ]; j% ]4 n: k9 D! d
39
! k8 z1 h1 P1 K" S8 g40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)4 {3 h2 _2 p+ s6 J# ]( o% g0 ^) g- _
41 5 x5 y( Q- Z+ r6 P; b+ h5 p6 R# ^
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     " S$ j/ n* |' r7 Z2 `  G, J
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
2 t& k( P' s3 I6 m1 t) ^3 x, U' R./host/makefile- c) o% p. D9 d+ u* h  h

0 o) s% k0 a# {; q8 q 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
# {1 c* S- D% O* T( |4 b 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
1 w; d$ P6 ~! ^  ^6 x 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
8 i$ N, B  Y7 {% ~, Q: v 4
- d, B9 b4 \, @( E* }; H 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
2 |6 N( v( l( o( |! ?/ [ 6
( d3 _8 d$ f0 [* ?! S+ J 7 all:2 Z9 F0 p( m) f! N
8     $(MAKE) app_host
$ f1 e6 K0 \3 t6 o3 \' ] 9 : Z. |8 j& Z* m2 G( }
10 clean::6 u; n9 @# u# j7 g) F/ p
11     rm *.ov5T* *.map app_host
) m  X; K; j8 R1 K; C+ j8 p12 9 {& J% f0 @7 D2 h
13 app_host(objs) $(libs)
- A5 S4 G) a2 W+ `2 H14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
( D* B4 c8 m; Y. Q/ O2 }# J15
% F1 b" m" ?! U$ i$ C16 %.ov5T: %.c
( C3 z1 O' x# M& @# D17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
8 X& x/ A( P* f* K% E% m18
! N  k" L/ [5 a, ~' Q' I" s19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
5 q* D' E) |$ B20 AR = $(CGT_ARM_PREFIX)ar cr8 |4 r8 I) R7 k7 R4 d7 Z8 G( G
21 LD = $(CGT_ARM_PREFIX)gcc
* _9 n/ j1 w. Q1 p  C& c4 @22   o' V9 H2 ^, ^* _
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \. T9 q+ _6 W+ H+ _! {
24            -Dxdc_target_types__=gnu/targets/arm/std.h
; h5 Z& m; x3 a4 Y  B3 a7 @25 * S. u, N; L: \& k( z) ^8 `
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
/ k" a( N8 ?# _/ O7 @$ ?/ G27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
$ T, P5 R2 y0 q/ x' e, v28          -I $(BIOS_INSTALL_DIR)/packages                           \# ?' s, q* k+ n& Z1 |
29          -I $(IPC_INSTALL_DIR)/packages
7 f3 V. p$ L( N4 x2 t8 |30 3 Z& F6 ?* C' t: l1 B
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. x' X, }9 _' H
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  P8 q+ u: N: H# T1 {0 Z
编译工程
3 n7 h" `. {* Q: S( Q: L( y2 S, |1 L3 W' \0 V( r! `0 v) s% ]' G& J
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。  l& I  p  X5 [8 |! d3 |
1 P- h  w) h) k
运行工程
" Z# ^7 K) G8 G/ Q9 a4 K7 D) r% R8 w5 Y7 x$ n
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。4 Y9 ?: U; c$ X  Q2 l

4 u% h  m7 j. Z' {7 E6 U% A1. insmod syslink.ko                    # 加载 syslink 内核模块
( C3 I. G4 ?! G; ~$ R: n2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序" \0 p7 p" P# {& L4 A+ M3 ~
3. arm_app                              # 运行 ARM 端程序
0 l3 j& N, T. p; [2 Z; j4. slaveloader shutdown DSP             # 停止 DSP 端程序  T. T) p% A' ~! q
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。   R" F2 V6 K4 h; q0 \* d8 o, `
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
8 ?0 f- C* M2 D# B$ h# F1 g
- a$ D8 ^9 Y' [! B 1 #!/bin/sh6 {2 q4 R3 L9 K! ?8 A0 R% _
2 9 s( `1 F* V7 E; n9 w
3 set -x: ~* ~+ S9 P" K- ]9 q: O$ \
4
0 |! H& M& O1 U) h6 o 5 insmod syslink.ko$ w. q  Z8 Z- }/ N  a6 n
6
1 }: J9 G/ a0 Y3 K 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
( D: I; c, x  p  s: e6 X 8   u! y# d; c- G* V
9 ../host/app_host DSP
( m- t, ]& ^* q10 ; @; F: A: h9 P/ M
11 ./slaveloader shutdown DSP
! i6 j4 N, Q% }5 F
" t7 _: L( M  s+ Y
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
. i2 F5 F  m8 _8 d& O0 G建立工程
3 H6 o; J3 s, U7 i& C/ m% F, j: H
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% P; _2 L! O, u; O# ]- `& U+ [
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:05: M3 b2 Z$ U6 K, M* q. I
建立工程4 a6 v% ?; k8 V" `( e2 G( g2 u

7 R& D7 h! ^3 C9 w 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

7 D  P: E+ Y8 _+ V- Aslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
6#
发表于 2016-6-16 08:49:17 | 只看该作者
执行 make 编译
回复 支持 反对

使用道具 举报

0

主题

113

帖子

2162

积分

创龙

Rank: 8Rank: 8

积分
2162
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:408 K1 }* b8 \0 |1 b
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
+ l- y4 s1 u- E' v7 a
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-30 02:32 , Processed in 0.045223 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表