怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,' r# C6 S0 K; i) o5 E4 L
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
+ B( Y9 o* \& d1 g
& ]5 y: u. v5 h/ s' k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?5 s! J& `& E- V# u
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程& T& O6 R/ N7 c. q7 g

. L+ r0 p* {2 v# { 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。9 E" r1 v8 ~. }# ^$ O
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
; W" F2 m, \6 i. q% F “清理”过的例程的源码如下:
: R9 ~- G2 E9 q2 T5 u2 Y
" L  @' c$ @9 p% d├── dsp" R# I, R% G- o$ o# _5 P& i
│   ├── Dsp.cfg6 P/ n3 r. X1 a/ ~; ^
│   ├── main_dsp.c1 W2 v7 O2 V1 j# F0 `- y
│   ├── Server.c
) V3 M% d- |( y│   └── Server.h8 j. f* H" u" n% e1 k
├── host7 Q4 h$ v: M3 Y2 p. g# f
│   ├── App.c
- p2 N0 `* s  D+ a4 [│   ├── App.h1 @4 Y- ^( E! S7 C# s- S1 B
│   └── main_host.c
# ?  u4 C5 p, G└── shared
* W( p8 l+ m! e8 b9 G9 F   ├── config.bld
1 [& u$ N6 M1 \( y% }/ J   └── SystemCfg.h
0 M, I+ f- t0 S# e' }7 ^" }6 x- Z 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。3 n* C- n2 q- b. Y
; n1 \5 C  g( b
./makefile
7 \9 p& j1 i/ c& k! E8 V% D  \. J' h& y0 D7 u9 A& P) V# j
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
' {6 ?+ H2 H* e) X; l. Q 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_154 J/ k) G; Y0 o: k# u* y' T3 d$ \
3 ( b1 C& g7 U0 _- ~
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi5 \: |2 T( p" C  E
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
7 L! T8 a% l9 F) X+ N 6 / g+ q2 ]5 D# d
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50! H& `3 `( m# E! z: `. n
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72- J4 A1 c- D/ }3 F+ M
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4- {, _6 ~8 D7 g( Z1 v
10
. @# g3 ?& H: m11 export SYSLINK_INSTALL_DIR      \3 t! _0 H* [" S9 ]. u9 b) O
12        IPC_INSTALL_DIR          \$ Z& r& d( c1 Q. w4 x* S( o
13        BIOS_INSTALL_DIR         \  o* K% d" ^+ h* G/ ]
14        XDC_INSTALL_DIR          \' }% U2 o% n; l* E% i8 g* U
15        CGT_C674_ELF_INSTALL_DIR \) y6 K! n+ T* d  Z+ o1 P% |
16        CGT_ARM_PREFIX
. P/ m% F5 t! x  H17 4 m7 N: Q. Q$ k' k% _0 {
18 all:
1 ^. F( {* v% u! K, J0 Y4 F19     make -C host all
# w; K2 s( a1 ^4 A9 b20     make -C dsp all
2 l% g% d( q3 i9 w21 / Z) x9 h7 h9 z+ l+ |& h
22 clean::8 H" \1 @" S, u8 A9 U
23     make -C host clean( `; Z0 I1 m% R7 T- @& {) L6 i
24     make -C dsp clean
+ u8 R9 V  P% q) [+ g' s$ O./dsp/makefile' E7 y$ E, q+ r. Z+ R) L
8 i- T* u7 j% K6 I% T8 C/ O9 ?: k
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件# Q5 F$ c, V6 w! B7 F4 X
2 objs = $(patsubst %.c,%.oe674,$(srcs))
! O+ J" O0 L3 d+ C+ n 3 libs = configuro/linker.cmd
: t* p& V* q% x0 Q+ l 4 1 ~2 H; G% g3 E! G
5 all: configuro/linker.cmd
# a- y: a1 t. Z! g 6     make server_dsp.xe674; R- q1 i7 m6 t
7
# U4 g. k5 k3 v: b* a, g8 {" S- h0 Q; f 8 server_dsp.xe674: $(objs) $(libs)- P6 j+ }& D0 u, f
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)$ E6 p, d& w; R2 F: y9 s7 N9 ~
10
4 Q( F: d# a2 ~) j11 %.oe674: %.h
  \1 T0 }$ `* d12 %.oe674: %.c: P3 M; r7 h2 D
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
" h# D- H- r" n5 e  Z1 U5 z9 U14
3 c, z# N: k( Y9 ?  z  Z; I. W15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
, X# U' n* U/ I5 |# x. }16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
. M* U7 b- w$ [+ |  }5 y17             xdc.tools.configuro -o configuro                        \
6 a1 n3 d& j: D18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \. ]; K4 _# u3 X/ j& ?$ w9 Z9 z- {
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
1 m8 x, u3 {" `) ~20             -r release Dsp.cfg
0 E' R' S( o6 i21
  t" z- U  V. |+ d, e1 z2 e! R22 clean::
- q* E# m9 B) I& {  u5 f: |23     rm -rf configuro *.oe674  *.map server_dsp.xe674- b% m. m0 s: i+ @! V# Z
24
! }% k) {& J- U& B+ T3 D; _25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
$ U! t5 a" D4 o$ L* {26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
% D( C: O: b; \0 U) B1 _27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
# [( ~; j- O  Y: R2 D28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
8 u1 E& f7 l) T% W8 Y9 T. `29
" g. ^  v8 a2 _) S- o" @- ]4 w) S( u30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
: o# \# f( {3 B0 M6 c4 j  z31
- |* G) e/ k5 F8 q32 CC = $(CGTOOLS)/bin/cl6x -c                        
5 {) H2 \5 [% }; y; x% a& f  C3 c$ l33 AR = $(CGTOOLS)/bin/ar6x rq
5 B  |% |' D6 C# ?: X34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi" g& v% m& Q( q8 W9 e5 t" ^
35 ST = $(CGTOOLS)/bin/strip6x
1 @! r/ W8 N& a: ~% b36 % r0 ~! I4 S8 w# e' I
37 CPPFLAGS =
; r& P) n. x+ ?& v38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
- D5 \5 ?- B- C8 t0 R, O* [39 & ~' w6 w2 S  Q0 ?  c: }- w
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)7 L* _/ B/ `# k+ j, J: E; k
41 # z! B$ t" X  r5 q% g% |& l
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
: z4 L* D5 m- B" o8 l8 r+ J43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序2 T1 H/ l6 F/ a1 x8 p$ j2 \. B6 O
./host/makefile
1 g1 @, P* k9 H( J5 \. q' a# e3 i
8 X# E0 _' B4 \) l+ U/ M6 ^. T 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件0 b) ]& Y; |( x- ?
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
) D1 u, z5 e) [& X, o- h, K- | 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug1 j" P$ v, t7 Z3 C" p
4
0 J, a* D5 X& G$ `& r 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
+ w6 H2 g, g. ]+ c2 A0 p! t3 J6 x; e* R 6
: a3 q8 L8 W$ H1 F" Z 7 all:
* j5 s5 I( @2 ^1 z8 X. m# a 8     $(MAKE) app_host
# z8 \& f: t8 ^- n& a 9
) w) ~" J# U' T, [) R) V/ ~" p! C; N10 clean::
8 U  _. Q$ ]! C( i: O2 p5 Q% w11     rm *.ov5T* *.map app_host
2 `) _* P& k( G  R12 & x+ Y3 S& t* E7 W0 r3 O) ^
13 app_host(objs) $(libs)
* a9 A, b( v4 s: Q( T1 {; s# D14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
( t/ Q3 H. e1 T15
' e0 W* T- U( K16 %.ov5T: %.c
  w; N$ w% Y; e/ ]& \17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<! t0 R; B; `, b/ w+ x' y6 B* d9 ?7 C
18 3 F7 p6 |( A' p$ e! A% \
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t0 @( o+ x1 h. a3 m  l
20 AR = $(CGT_ARM_PREFIX)ar cr+ e. P0 a, i; \
21 LD = $(CGT_ARM_PREFIX)gcc
% o3 Y2 j% Y, Y# _  D22 2 h3 a% W  v. D4 p$ h) k% A
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
' |2 v) C0 o% S% G& e0 \24            -Dxdc_target_types__=gnu/targets/arm/std.h: {8 ^$ W3 R* d( X- p$ X. q- ~9 t# ~
25
0 e  w  k; Q% p26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径" J2 `0 e& o2 d. a" k
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
5 p. N3 h( [7 n1 g28          -I $(BIOS_INSTALL_DIR)/packages                           \* U4 h5 G+ W7 J: \- r5 N* B& X3 |
29          -I $(IPC_INSTALL_DIR)/packages. m% ?$ _' _, R: ^4 \
30 4 I8 a. \; r% ?+ f9 Z
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
+ N, m' r0 d. Y, |32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
9 k. z/ a) U% R0 _( Q) M  i编译工程1 h3 w3 j; Q, @9 X
) M$ w% Z# K; ~+ Y# _: o% T3 i+ {
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。1 ^9 n* L; j5 Y  r) e. m
+ j: Y2 h5 o. t
运行工程
, P% @8 B% ^' V' ]5 h& F7 |0 W' x1 Q: |0 r
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
2 b5 s- j3 J" a3 d! e- k( z
4 e7 U5 f8 a. F: @1 k% m- q( r7 d1. insmod syslink.ko                    # 加载 syslink 内核模块
: n5 d/ y8 T/ O) p2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
+ Y  U; x" O* H3 g+ b3. arm_app                              # 运行 ARM 端程序* M% |% b9 M4 S
4. slaveloader shutdown DSP             # 停止 DSP 端程序
& J2 Z# w3 M2 K, T2 R: d5 L sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
4 ~4 S1 b/ r% v: Y$ W! h9 a! ~: r 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。4 ?. D0 Q* l! Y: r& p2 }0 j

. A( V  N3 p2 I4 M% A2 A 1 #!/bin/sh- E# D, e! f3 i) ~( N6 H
2
4 t+ U6 w; }8 e) t. e; W8 C 3 set -x
, M" j# q, E. j& Q 4 " l8 }" D$ Y9 H- @
5 insmod syslink.ko
, f) T2 F& |6 ^5 r 6
0 r+ T) ?" n# j8 G 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
1 `8 E: N! ~' X9 ^( w# C 8   C. v( X& V3 l) n4 }
9 ../host/app_host DSP
; n% d' w9 w$ |  T$ n1 d4 ]$ I, k10
8 v6 y: J( h- i# G# p11 ./slaveloader shutdown DSP
7 G. K, P# e# U' u
, c3 U4 T3 N- t7 p
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
* m7 ?" d! Y$ s4 m( y" |建立工程
3 t5 a2 C; Y/ p) u+ }5 K& b5 r! X# i
1 C& A; r7 y9 Q7 s  Q3 x9 h 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

7 L9 w/ T* \+ A, _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
2 b# W& o6 I, h. b建立工程/ R6 |9 }5 k# C2 B5 O6 F  ?
7 E- B2 N. k# Q3 D- d
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
2 g: _+ E7 q; u) m
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2123

积分

创龙

Rank: 8Rank: 8

积分
2123
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
) @- v  _( T7 R8 r0 Fslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

) d- ?- j3 ~) o: D+ ~2 Adsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-22 03:24 , Processed in 0.043341 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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