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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,, p, D; p+ A- [' X4 i
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。. ]; \# W1 `  \6 e0 ^7 }% a" p
* R% p3 p% V" N3 G6 i& I1 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
8 c( D' ~# M0 |7 E  I7 K& N- G' [. T- v: ^! J* I) p
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。3 u+ z" q; F/ O0 T$ F
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
6 I2 {, s: M" j( D1 N8 @ “清理”过的例程的源码如下:) t5 [3 B4 `" P- K5 g! [0 ~
  z& }9 `! w; R$ f1 i
├── dsp
& f1 G" Q7 f& D" ~  w│   ├── Dsp.cfg' I/ u; x& }- `6 \. o; M
│   ├── main_dsp.c: A$ c( ^- o7 a3 X5 Z
│   ├── Server.c
% t1 L$ w  B( u  a8 e5 a# n│   └── Server.h
2 |! t. ~7 Z$ \6 [- K├── host5 H+ j  c7 C3 ^; O1 V9 E( p
│   ├── App.c
1 S/ X6 {# c4 F# D. V* q9 Y: S0 C. x│   ├── App.h
- g( H( Q* {2 y$ P! c1 \│   └── main_host.c9 [- [( G3 l5 q* _$ w% a1 b
└── shared
7 ]! ^1 ^# P! B! Q) K   ├── config.bld
# H# a) R5 e3 b9 @- K2 s& k   └── SystemCfg.h+ \' d, U; B% M* s4 k0 O- a
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。3 o9 g+ [: d/ z* y

$ e* e  ^) V' k/ T# J./makefile
  s. v1 D/ l: k9 k' {5 p9 }) O! O% m; M" w6 z" f
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
+ T$ B# F5 _; W5 m- V8 c- { 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
! F  ]' Y3 [  J/ m 3 . R) H3 [4 l' E" Z/ R% Y
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi0 ^# r6 `) Z3 b& p3 _1 ~
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
- X* S% j4 Z! v  v, @ 6 - f% M. c% c. n  y/ l& h: l1 @
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
" N9 }6 k# `3 h1 k8 a6 T3 w8 P 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
: ~0 K2 K3 U9 Y+ E 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
# B& G$ u1 m4 @10 , k& z# u. b, F) W2 t- z
11 export SYSLINK_INSTALL_DIR      \3 |) m3 W. t+ a: j
12        IPC_INSTALL_DIR          \
! }9 k$ r( W1 H13        BIOS_INSTALL_DIR         \
2 u+ \( |/ s5 z* m* v7 \! G14        XDC_INSTALL_DIR          \# I8 I/ X% c/ o9 r
15        CGT_C674_ELF_INSTALL_DIR \* ~% ?4 n, r# D2 B  P
16        CGT_ARM_PREFIX* x/ i5 M2 ?. \8 \& Y4 Y
17 0 g  K1 c; I+ @% i9 r
18 all:4 V, G$ r8 B: o2 J
19     make -C host all
* X# d1 N6 i& @8 d3 C( A0 ~7 q20     make -C dsp all8 I0 P# X/ u9 q
21 " ]/ H% _. T( d4 f! v7 t, V0 C
22 clean::; _  @. X# Z* T9 e! y
23     make -C host clean4 A" F$ a2 D( X, n+ m6 }, }+ ^' a
24     make -C dsp clean& `( U" ]- H  k4 K$ G  W
./dsp/makefile. `( |2 ~; W; E) |  B

' f) v: ?  P0 A2 N8 F# c! x 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件0 A/ a; ]1 d& h- `! j; f  l0 }5 A
2 objs = $(patsubst %.c,%.oe674,$(srcs))
- y2 ~( d& U; V) A' i3 l5 q 3 libs = configuro/linker.cmd2 K: r. E2 f; I! Q, Y+ U" I# f$ H" v
4 + P3 S, }( m7 N5 o5 |# Q
5 all: configuro/linker.cmd, h9 i. x7 X! \6 ?  ^
6     make server_dsp.xe674
$ ]5 M- e0 I" P7 H( e 7
! ~( l) T" a  p/ l! }2 ~+ Z 8 server_dsp.xe674: $(objs) $(libs)
( L- z* K' a2 k9 B 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
4 ], J% }$ z4 R8 q# r- v* Q10 3 v3 @" S4 F1 H* r- K1 v) d
11 %.oe674: %.h
: @3 u; N6 J0 S. I# X$ K& I; _12 %.oe674: %.c; j- |/ j8 ^6 {" q% H0 t
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<; n0 f/ w4 W/ Q# I3 ~1 p& C+ q3 ]# I
14
0 [+ z/ [" P; x5 p, g: y/ T15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld, ^8 R0 n! K+ L& t# B# f0 t
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
4 ~7 B/ p4 W* |6 O9 J17             xdc.tools.configuro -o configuro                        \- V# L& ]9 ?/ l. {- G; l
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
' h" s1 U/ h; W& _' E% i19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \9 r( f7 H, d& T& y+ k" u
20             -r release Dsp.cfg
- }" x$ y( j! ~3 o1 O21 6 D5 v+ P1 s3 Z9 f" ^. @' Y4 |
22 clean::
2 K3 N+ R8 U# \6 d, w' ]8 T# k' R: d23     rm -rf configuro *.oe674  *.map server_dsp.xe674
0 p3 D' H. w: b5 e2 }. u. y  B2 ]* d24
  {8 U7 q+ `- K+ ?; Z9 d25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages: J9 v4 `- `+ @; ~0 [( R/ y
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
7 _$ ]' ^- s' Z, S27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages( l4 X+ J4 Y$ ?+ ^
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages0 {4 Z" T0 f5 n' s# \0 ~' ~
29 2 p( _& T! ?# v# z3 A$ s
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
4 [9 a# `9 V6 Q! g31
: H2 o& `% u) Z& Z; ^32 CC = $(CGTOOLS)/bin/cl6x -c                         , l3 O. [3 r  d
33 AR = $(CGTOOLS)/bin/ar6x rq: @. h8 @  I. F/ i+ |/ R3 j
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi7 R$ j6 n# s* m! ?4 ]; J
35 ST = $(CGTOOLS)/bin/strip6x
8 {$ Z9 \; Z" B2 m. z8 n36 ( ?* l7 Y6 n- P- g
37 CPPFLAGS =* p$ s- h! X) |- [  e
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
/ x  W" X' I/ T' @' {' t39 , H. s+ R" K% ^) P5 \. V; y
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)* O- X% }" w/ w5 r+ n1 z/ l, J
41 & n6 P2 W/ Z0 Z0 e+ P& W3 [
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
; C! K0 h7 a" x! N43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序, ^+ }9 \+ i& Y) N- @: U
./host/makefile5 |: R4 m, b* O' d8 ]

, z/ h' f* `0 W# a1 Q  S4 P! ` 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件8 C: R# A* p! z
2 objs = $(patsubst %.c,%.ov5T,$(srcs))* \4 S* Y; \4 x; p/ l
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
6 z! l( \& Y: t5 v6 P/ q% v 4
8 J, J* `3 z$ D& ^8 E1 o* U. p 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
+ |# K$ i4 p, S5 I 6
# |) H5 M& Q4 _3 S! } 7 all:
4 d3 u0 `  j6 G 8     $(MAKE) app_host: L# i& `: ~0 j
9
6 \7 V, j& A  H) @. m9 }6 ~10 clean::3 G2 x& G+ \4 |& B1 B; J: ^5 G
11     rm *.ov5T* *.map app_host
7 i) z; M: a( w" W6 J; Q12 * r" ?, B# V" q5 q
13 app_host(objs) $(libs)
7 C% \6 G; j9 k# U& K14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
# A& t3 i( J0 I- a/ w' U/ w; u15
: G4 l! G8 Q3 C9 N+ @+ D2 Y. X16 %.ov5T: %.c, j9 g% v. H$ w- }/ \7 P, j
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
$ @" N4 b9 P: a18
4 E, r- f; s7 I- K( U4 Y19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t" Z: q- Z/ F) b% s4 O
20 AR = $(CGT_ARM_PREFIX)ar cr6 q" r. l3 \% v
21 LD = $(CGT_ARM_PREFIX)gcc- Q3 E0 [' d' p  {2 n- a) C
22 0 P2 z$ u' I- b( H3 W
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \6 r9 [1 G8 L  o! o+ f6 p
24            -Dxdc_target_types__=gnu/targets/arm/std.h  F6 h. J4 ?4 X
25
! U' x+ V1 D! P$ W! c5 i26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
% @$ d0 p5 R0 K3 w- r4 ?27          -I $(SYSLINK_INSTALL_DIR)/packages                        \2 A2 Y  Y0 ^. |5 `6 a" Q
28          -I $(BIOS_INSTALL_DIR)/packages                           \# P% z6 X: O" {4 J; J1 P+ f# ?* e
29          -I $(IPC_INSTALL_DIR)/packages
6 ~% ~* B' I7 U& ]* l30
$ K+ d4 @& P/ c* z31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
$ ^8 q: P3 @2 k; K! F. G32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
, I7 f1 e( l% P7 G编译工程; w0 r/ O& J6 N8 O, \
! A6 G* U% G9 a5 R0 R; w: V8 i* X
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
* b) `% `, x* S# {/ }9 f2 x
5 k& R! f6 y$ B运行工程+ J5 F2 g! s3 q+ W
' X3 c2 d0 F& U6 ~* v6 n
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
/ g/ D2 d% v0 a! E5 q+ R1 h6 Q) D6 H- ]  n" L
1. insmod syslink.ko                    # 加载 syslink 内核模块
2 y# V2 E" _2 h4 }" ?' S5 b  `: S2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序4 I5 }/ G4 l) s0 f0 I- `
3. arm_app                              # 运行 ARM 端程序
. {6 l0 v- ^6 ]  f2 t/ }4. slaveloader shutdown DSP             # 停止 DSP 端程序' @- t. F2 L" F1 C/ p
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
+ W* M7 t3 Y& i 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。6 m: d# z2 e) U. i1 m. N8 F
- m0 \+ N5 X4 ^& S- O
1 #!/bin/sh9 _. P2 u& M3 V6 l; c1 ^
2 * z% i& v+ i  O$ f5 e
3 set -x/ p$ r1 d% {' Z4 ]( ]! Z
4 * O2 Y, p& g' X/ l9 m/ }
5 insmod syslink.ko
$ T: T+ V% {: e" |% w 6 + m8 X6 U7 i* I" ]9 p- y
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674/ z, m3 p! m* [
8
, R$ N3 p  X+ ?0 }+ u; D 9 ../host/app_host DSP% R& `' K; ~/ T( Q  L
10   Q* U, @8 p- U" Y0 O# E
11 ./slaveloader shutdown DSP9 U3 Q6 ~  q5 G" N
$ e3 J$ v1 W7 D1 f8 D
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
6 q' x5 ^1 J/ ]$ r$ y建立工程
. Q  m( r0 N6 g+ t
. Q3 b$ A6 ~6 c 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

3 Y( k6 g+ D" c. H* `7 f6 [4 |4 rslaveloader 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) H- J7 O  H! x8 s! H9 Z
建立工程
0 z; N% H/ U# W" W! c
8 z' l% ~0 H' [1 v  t0 w7 w& a 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
& y- L# O# ^' F! Q  P
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2139

积分

创龙

Rank: 8Rank: 8

积分
2139
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40" a8 A2 x' o, s8 x. s$ g8 [/ g
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

2 P- _2 b$ G# R% Udsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 04:06 , Processed in 0.046358 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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