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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,0 T+ G4 x; U) }2 {$ a9 S6 L
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。, C/ k$ O0 F' u& g2 ~  N

. E" s( A5 K7 M6 M* e1 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?: z. f5 ^; t0 d* z
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
& E/ s) R6 i6 T5 o2 ]7 t0 ~2 b
$ k$ i$ L# F1 E4 i) J2 a, ?8 o 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
& ^( {0 f& s4 [, M1 A7 Q& x 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。; M- ?+ j% A$ i( I$ C0 Q
 “清理”过的例程的源码如下:
7 m3 t, ^5 m( x, }, {3 Y) \
1 N% T+ ?! V- m" f) `├── dsp- t9 K' n3 o' }0 c  h
│   ├── Dsp.cfg
5 q( c# o. x% i: F' s5 m│   ├── main_dsp.c
3 H  g. ^/ e' o0 G, z: r│   ├── Server.c: j: n! }% t' Z6 v! x
│   └── Server.h
- k! G# J, c+ W% c├── host( K& R5 [( c! V7 R: t7 ]) |
│   ├── App.c4 r* h7 b2 ?! H2 m
│   ├── App.h& B! U& j  a# \: s
│   └── main_host.c( s! R7 e  }2 o8 _6 y7 @
└── shared% D3 v8 q( Q6 O& }4 S9 Y: P$ P
   ├── config.bld+ D7 X6 |7 V9 a* `' E  c- }8 H& T4 ^
   └── SystemCfg.h
/ r/ U3 f6 \& Q 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。3 a$ S+ ?! T/ f! I" a

0 u0 a( H: q1 ^! Z4 I# A./makefile/ O) e/ e* R5 R6 t5 J- z( b3 B
$ D5 e3 N7 K1 ]% D' U- c
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
1 }6 t) M' L) E' z) e5 d& B: H 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
7 _% b. ]/ w# f& b 3
: R6 ~2 \3 s% j& J- V 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
5 M) d0 N; R- q, |% K5 Y4 V2 M 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
: \, F& G+ P$ \; n 6 0 j) [! {" h' W' X
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50& a5 ?: z$ ]7 ]: H7 `8 d* I$ m
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
" v! E  }, k, O8 N( k 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.41 y4 `" g  x& n( _/ P
10 1 m+ r. x7 T6 N) l/ W- o( X! v! e
11 export SYSLINK_INSTALL_DIR      \
1 H" b+ s! }  s6 k12        IPC_INSTALL_DIR          \/ U  a. `. M( s, n5 }' n/ A  d) k5 o
13        BIOS_INSTALL_DIR         \
5 K/ {# v% i0 m# R: D3 L( J14        XDC_INSTALL_DIR          \. c1 C  i7 h' x+ F' n5 O) W
15        CGT_C674_ELF_INSTALL_DIR \
" p6 I( [! n( r; q16        CGT_ARM_PREFIX
/ j4 O. I; p* A  a+ o$ y17
7 M, }& j/ X. Z- v( q  k1 i18 all:7 T/ s( q( D3 o2 g" ^
19     make -C host all
" W6 a2 Y# H5 F! M+ e4 W/ a# W3 N20     make -C dsp all
& D5 U- c5 [6 V) T4 U! Q2 M8 t3 L21
0 E* m! @3 t- \. \' E! ]& o22 clean::
  r. P# ?# k4 S5 ^! N1 }0 z" q23     make -C host clean" V4 f' |/ e5 w) o' G
24     make -C dsp clean
& y) D2 b- i0 J) q2 Q# G./dsp/makefile2 \4 P4 n3 N% z$ T* x" w

  q% _- }7 i, A% h( _ 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件; I5 j8 j. z- M1 c& g% f
2 objs = $(patsubst %.c,%.oe674,$(srcs))
6 Q% ~& b" Q. f% p 3 libs = configuro/linker.cmd- b4 }) g) N2 ?2 `( J( }- C
4
7 }  p3 b0 K& { 5 all: configuro/linker.cmd1 n' z; N' ~  u! E5 O. T- c# {
6     make server_dsp.xe674
* [5 ]2 h8 H, ^- E( r 7
: q5 l4 t5 P# g0 ^# G8 ?. ?5 B 8 server_dsp.xe674: $(objs) $(libs)$ i* t5 l; b0 n
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
( z2 V' T0 v/ G* j& r  W$ p* K) o; ?0 ?10 / P% E1 S4 j! p: K: L
11 %.oe674: %.h% w$ O( Y. ?- z3 A& z9 D
12 %.oe674: %.c) s; t% T% f2 v- f* b- I2 T
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<% T( G& }- N' G2 A3 ]& j8 i5 A1 A
14 / j: r( B# d; M+ [; Q
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld% f! Q' T, [0 s3 `, J; |, h
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
4 ~3 W2 `% |- ^0 e) L: k, ^17             xdc.tools.configuro -o configuro                        \
; H- S) S" p7 C2 v/ [6 \- r  I) f5 L18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
% O  ?9 d- W" X, C19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \) g& {9 U. t8 Y' D8 E- W% [
20             -r release Dsp.cfg+ ^* S7 F/ Z% V# y  K1 M. ?2 B
21 1 N# B8 g% e. @* l- @0 S* l3 v' P
22 clean::: H/ j" `" G6 T8 n; \
23     rm -rf configuro *.oe674  *.map server_dsp.xe674) h3 G$ Q  `4 {0 b* P. \
24 + Z7 e. Y4 I! k( v# b
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages6 s( U7 c5 D2 q) N$ C. F
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages5 t' p8 N2 C* @9 y2 u  i2 |
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
! T  g& F! u! t; r28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
1 A9 h. U3 A: L9 x; y29 " W0 m2 F/ p8 b, Y3 m8 h) g' g
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)3 ~; H2 U% A. v
31
2 q5 K0 k/ E, c! l) ?32 CC = $(CGTOOLS)/bin/cl6x -c                        
( d7 B# Y9 T# V& x. W33 AR = $(CGTOOLS)/bin/ar6x rq, Q! _4 |3 e, [
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
0 b. d1 a& y- ^! j5 ]  M35 ST = $(CGTOOLS)/bin/strip6x
& w" ^, A+ b3 \4 K5 ?# ?36 8 H# f4 e9 |7 m" h+ |4 m
37 CPPFLAGS =* A  q6 y& L$ y, g* w5 T3 C
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)) ^7 i, Q  n" ]& U
39 $ l' l$ {# G1 g  r/ X
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)8 s  \6 ?& W0 ^
41
3 l$ P% O' t3 M, |42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
; e# L$ M2 ^6 T9 c43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序" D7 s, ?2 N; I9 Y, S
./host/makefile
' f! G# u6 J; q- U$ w, l8 {7 J! _1 A( _
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
" W+ _9 J& T0 E6 J 2 objs = $(patsubst %.c,%.ov5T,$(srcs))+ c5 i: ^5 c0 b) g
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug- n  Q6 g! Q# _
4
! a' e" u  N/ H- k  r. m 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
6 E# K% i$ R) y/ \ 6
8 B* ]' l- @$ w0 H/ }* \ 7 all:
  g  a1 o" t0 E' }2 o 8     $(MAKE) app_host7 y# R4 e4 a2 e  \5 x$ R
9
. K7 S, Q5 h: O" Y. ^: V: P& M10 clean::, C! n5 |/ B$ {, n1 ^4 D( t
11     rm *.ov5T* *.map app_host
& e) k3 K9 J' ~! T12
* j3 I; E/ U1 a! s# H, ~13 app_host(objs) $(libs)- E2 `- s0 U4 p9 w
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
& Y* q# _1 B7 R+ t+ O) z15
2 {3 M# r  i; b  E+ a' {& [16 %.ov5T: %.c
0 H$ H  W( {+ e0 p2 B  ^  Z17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
9 r7 a$ Q2 G7 O! p* ]( k; }2 |18 0 ]* {+ S. y" n) V- z
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
8 e/ U# X' \+ m* u20 AR = $(CGT_ARM_PREFIX)ar cr$ B1 [: z/ c' x- U( a% h- b
21 LD = $(CGT_ARM_PREFIX)gcc% R; N; s: o7 V8 c; ^" }
22
# {6 @# Z+ q0 Q8 x. G# S23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
+ K) N0 _4 B8 R  _& W" m6 [; b24            -Dxdc_target_types__=gnu/targets/arm/std.h
" M8 f2 V8 h0 ~! P9 Z; E" c25 ) S" r6 W- Q1 Q- d
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径( n9 ]0 c3 {$ r. H" _
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
) F! [4 F$ ~. Z- N3 U3 M+ l, A28          -I $(BIOS_INSTALL_DIR)/packages                           \
* k* E- K0 }8 ?0 ~7 G29          -I $(IPC_INSTALL_DIR)/packages
) a5 ]$ e7 w! I5 F+ |30
* `$ z7 E& `$ [9 c31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
9 g+ H: o" I) T32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  h( e2 c3 o% R! Y$ B, [
编译工程! X& T7 |, a# A, X$ i2 F2 i

8 v. B! v  A9 A# F6 |; I makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。, a5 ?/ ^/ z( _: B, w/ L" ?

6 i) n3 u& _7 G5 `+ A( D$ O& @运行工程
8 c1 ~6 C; G* |3 [* U% [1 @( o# u9 c* J$ ~8 o, b( V
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。; [4 I6 y/ ~8 |! e) ]; h

( |9 o: T! a( v9 g: ~! o1. insmod syslink.ko                    # 加载 syslink 内核模块5 `* u" z# I* o" w, R
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
) ]3 x1 i7 ?' }; p- @# @3 O3. arm_app                              # 运行 ARM 端程序
/ E1 [- m! ?; h) [  L4. slaveloader shutdown DSP             # 停止 DSP 端程序0 R3 u' s- K% D8 E6 r& K
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 & J8 O, ?! ^2 }
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
5 C2 x8 f( R' [1 n9 j
2 E- S/ F, s! {: n+ Y8 e 1 #!/bin/sh
* k7 S+ G8 M" R- D: Q* H 2 8 x" ]5 u; W7 {  c/ V- c6 D
3 set -x5 o9 Z4 t; M9 q) U2 m0 ~
4 " o8 F! R( _! g; h& D
5 insmod syslink.ko
1 S7 o4 E: P1 ~! T. w 6 3 `4 Z- |/ s/ d6 p7 U& A
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674! v+ O& ^8 V2 S0 E% r# C
8
# ^+ F/ r& c7 @ 9 ../host/app_host DSP
9 x1 f0 a8 h0 k$ J10 $ r" ]' ?' m) V
11 ./slaveloader shutdown DSP
. R- O0 g+ M- E. U9 V- [% @. X6 @
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:056 i* h8 M' d, o4 c) W& I
建立工程8 ^6 f, m' H* g  ^3 G5 F9 V
# U4 f% x3 B, R  o3 L
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
6 `: g! D/ M# u# Y' h
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:050 n1 T6 f, g% U4 X8 z
建立工程/ o9 P+ _1 M: b* P& Y2 i# v
/ d" v1 ~+ W2 W, ?4 p- o# d- h
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
8 z! d: w% u7 v! z) c/ z
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:409 Z3 j; w8 B# s1 c# s) s
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

) [4 t" t+ y2 V3 {* Qdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 18:52 , Processed in 0.044842 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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