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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
- c" P- @. o! \dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
. I0 k8 g5 N* L" E- U: C6 `2 ~  y/ ~+ U) t9 {  T3 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?5 ~" @+ l! W' C! C3 b' J0 b
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程: k* }1 E5 x. w

# y/ h( K) R$ S; m: M+ A% e/ y3 _- T 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
2 s. F4 v, [: e+ Y3 c5 v, F 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
) S! o" F; t( ]3 ^ “清理”过的例程的源码如下:
+ m, A4 N3 j4 t' N0 s, C8 g. \0 ~8 ^. b# }6 |8 _
├── dsp
1 J" K* Y) `; y" x5 ^│   ├── Dsp.cfg
5 ]5 K8 w, t/ B- L" ]5 H3 ^│   ├── main_dsp.c
' e% c! q7 x0 @3 M2 W│   ├── Server.c& v% `1 h. z$ u2 p
│   └── Server.h4 s9 E% X7 L6 F  K0 I) o& D
├── host
0 U8 P4 p( h- d9 n  u4 g│   ├── App.c/ G9 {" p) m; v3 J
│   ├── App.h! X* l, v; }5 t
│   └── main_host.c
0 g) ?/ X/ Q0 g9 @: J└── shared
; h8 V, f1 K/ H) D% \! i/ v   ├── config.bld
' S- Y4 L& @3 s% W/ a, A  |& K   └── SystemCfg.h
) G5 b9 J$ d8 |9 t 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。- b  ?  R( ~. m! Z  Q& X1 }

- T1 M* H5 c( J./makefile  a) h) ?6 v: ^# b# A
  [/ e- t( P' M  q
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05# l, u! U3 i4 R# c+ ]
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
! `. n7 k0 @4 B 3
' J1 N& J) U2 w 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
* N  L; f/ S. C8 q 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
- }/ _9 o7 |" O3 N- Q# q 6
  Z4 y, [0 K. D- }1 x 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50* F& r5 x# ^  o8 M, d" h9 X
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72' s" H2 F# T, S. Z  {
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
; ^. U/ B  |; d10
; l' a8 ]2 {; o1 f1 y% q11 export SYSLINK_INSTALL_DIR      \
& O  h1 Q% W/ L; [12        IPC_INSTALL_DIR          \$ I: D8 s" X, h, [$ C
13        BIOS_INSTALL_DIR         \
$ {8 M! {5 I' S4 X0 ^0 J14        XDC_INSTALL_DIR          \) y; `: ?) T/ E6 P! G
15        CGT_C674_ELF_INSTALL_DIR \+ d, s- ~" i& ~  O: I
16        CGT_ARM_PREFIX, s' T+ h: |* e! q+ X/ x
17 . M. X6 X( N/ @- r& C' B$ L% r" B( @
18 all:
8 |0 E6 P) S) Z19     make -C host all7 m' I2 x& w+ s$ ?, q
20     make -C dsp all* p! |  m& A: [; _3 j7 [
21
  R5 z% @7 q9 V" ~# u. D8 ~22 clean::
$ k) t0 r% p7 [& v! H- K) u5 W23     make -C host clean  U3 O- M9 T, M) ?
24     make -C dsp clean
( e, k1 L' e0 b% d7 F, s./dsp/makefile* Q! Z  j" \4 d2 S

0 H4 a  y4 Z- O& p 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件0 R0 z2 |) r9 q7 @$ U, w! R6 \
2 objs = $(patsubst %.c,%.oe674,$(srcs))
5 l( m2 [- u0 x 3 libs = configuro/linker.cmd
1 C0 L+ l4 w. A 4 3 w: b6 N& `/ p+ q6 d4 R3 h7 |+ X
5 all: configuro/linker.cmd
, N6 z! X9 ?* ?* ?  Q% {1 n+ ~  L 6     make server_dsp.xe674
/ o- J0 E5 l4 e/ F. g  K 7
6 b  h  C9 n* T8 J/ y) L! B- ~ 8 server_dsp.xe674: $(objs) $(libs)
. K) o* E. m6 i7 C, u2 J/ g 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
. x& H) B& y% d10
3 x, S1 }! w; \0 W  @11 %.oe674: %.h) T1 B8 Z7 U: `9 Z/ ?
12 %.oe674: %.c- ?6 v: [9 u* j2 O/ p9 b
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
+ |; f' l. O- U14 4 u4 g. P/ @% u- G% B
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld$ R9 I2 F4 T# Y6 S& R% d6 i, v
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \7 O/ A! J7 h- c, X+ G- r
17             xdc.tools.configuro -o configuro                        \! N9 }. R) e7 f2 C; k1 w
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \2 U" |1 x' O0 g! M* z; Y6 C
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
* }; F7 P/ P7 G20             -r release Dsp.cfg
* u! r- `9 ~1 q% q21
, A) j& o- _) X$ S22 clean::
1 z0 t- K" z% m3 c# ^, W23     rm -rf configuro *.oe674  *.map server_dsp.xe674
/ R4 x1 m: O7 e, K! Z, H- h24
% p8 P# h) R$ y9 ^: B, a# J. R25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages8 s. `& g5 C. T- [% {" v4 n1 d
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
/ m0 L9 M+ C4 V1 E0 |- |27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages3 t5 x5 p  Z+ q9 e
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages( u8 L% L" q, b7 Z+ K( {2 [
29 . [; _3 N8 a4 v8 {, d
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)6 P9 K0 c' [* j5 D# ]0 Y* O$ u
31
) c8 T: J3 v! a! Z+ @, x' X) [32 CC = $(CGTOOLS)/bin/cl6x -c                        
  W% F& U5 V- U% ~* ]0 n33 AR = $(CGTOOLS)/bin/ar6x rq3 V0 a- G8 `4 b& w- j8 b
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
6 f- [5 L2 ^# M3 q& a9 ~35 ST = $(CGTOOLS)/bin/strip6x: W* J- j% {; k* R; y- x
36
9 K( M- C9 B" E: R; b$ h37 CPPFLAGS =9 |0 W) I8 {; c7 q1 f3 |
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
7 a0 _5 [. {! F% {" Y! W/ E39 , l. a, Y5 Q1 `/ Q
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)" ^% }; Z& ]" |4 O' Z" n$ i
41
: M* L& ^; H' ^  x3 Z% P9 r42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
7 n' C/ m/ k5 i43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序. Y9 S! O% H2 ]- m, i
./host/makefile
  t  O7 Y! i% H- ^( K7 B9 h+ t9 ^9 j7 X7 u! T
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件9 b1 E4 f# M' m1 T' F
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
- Y: I- I/ X/ D 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
! H% d  a9 D, q  ?, Z+ m; s 4 9 z$ K" d. ?" u7 v
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
! B6 h$ I$ {* w1 E 6
1 c4 b" u; }# v5 ^+ k) p) Z6 A 7 all:
1 u& e( F* Z: O3 @; A. l. L 8     $(MAKE) app_host# Q/ D( k3 P' P, T4 f+ t2 b/ V
9 ' A3 m$ }0 x$ a$ M( y- M5 p0 L- u
10 clean::
& I6 r! t3 c; i11     rm *.ov5T* *.map app_host' O, W) b3 f6 |9 S; ]0 w# W
12 8 q+ c# \' {* n8 K8 E+ P
13 app_host(objs) $(libs)' r* o9 V' J& E7 I
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)! j+ w$ z+ w) s4 x8 C1 Q
15
! F% B1 K4 q3 v6 {0 F16 %.ov5T: %.c
) ]  v- J1 L- b% Z17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<3 B9 [, P0 a) r# U1 O' |2 t
18
& i( ~7 E, K9 a# l) c* l8 r19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
+ d* V& E5 M# a& P, {% ]20 AR = $(CGT_ARM_PREFIX)ar cr( B) F: L; f: S  d+ W# _6 M" z
21 LD = $(CGT_ARM_PREFIX)gcc
( ~; _. B$ W: u. `: ]5 E! _/ |7 e22 4 d' {; |) ?' m5 U' t9 B# q( U
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
( ?7 S+ @! n* k" x* @1 o' l24            -Dxdc_target_types__=gnu/targets/arm/std.h
9 d' y; p$ W2 l' Z25 ! i! l* F* m3 L4 F9 c; ]- O
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径0 o3 N; }# p8 [
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \% I& U5 A. l7 c7 @- y
28          -I $(BIOS_INSTALL_DIR)/packages                           \- I$ _; |9 V* H/ @/ }$ I
29          -I $(IPC_INSTALL_DIR)/packages- b/ Q0 ]; I! S+ `9 }) y
30 + ^0 M4 r3 `+ ]! K9 F$ _3 o2 Q% O
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map3 {# j1 y' s: Q; [8 R( p+ |+ D% n
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
6 u5 z) k  o1 y( z编译工程" o: x' }/ c/ H8 r) i7 y
  e0 C6 a  V% u% R
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。! A3 ~) h# q3 M; e
, X4 J5 s6 C4 a
运行工程4 r, U5 X9 C- P* `

$ g5 ?- W' I4 h: ?' s 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
+ E6 G, P$ _. Q+ x7 M% j+ ~
$ ~; n7 z( o$ W+ ?7 i1. insmod syslink.ko                    # 加载 syslink 内核模块0 D, w. j4 P7 L8 A+ y7 G  U& c
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
/ V! N3 `6 a: z" w- Y/ A5 K' s3. arm_app                              # 运行 ARM 端程序
7 ?" r! a: A. Z! y1 @4. slaveloader shutdown DSP             # 停止 DSP 端程序
, U' a1 y$ j$ b. b  D' l* D' Q' H sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
3 ^$ F% ]# k+ k4 Y3 G' h0 M% W 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
) D3 V6 W5 D" B$ ~8 W7 J* x9 a, ]- t: D' G3 [6 B% J2 e% S
1 #!/bin/sh7 z  Q0 X9 F- {4 F
2
. B, r3 s" \4 @  f) ` 3 set -x
, H2 X1 ^$ b$ T7 Y1 \; j. ` 4 : w/ ~$ Y: `4 S# Q$ z3 G; }* x7 V
5 insmod syslink.ko5 m  n2 g, i' r$ ^! u8 e. y; i' M
6 & {+ R# K$ Z2 G* H" m  b
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
) ?% m% o2 R: r2 B6 e4 O 8
% a5 h* R. b( }, r( `6 W 9 ../host/app_host DSP8 W  n% m' S3 z4 x0 \2 y
10
( Q* E4 B6 `9 Y! e11 ./slaveloader shutdown DSP$ r1 }5 t! w: |1 _# z' v& w& T0 r

. v# u2 {; u% e/ @+ z
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
! {+ J9 s' P' g: t! @: w建立工程
  m$ m, Y* E( `2 x' A. {
! b2 C* I& W, `: _ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

/ B- E7 f3 B: l# d. u7 S. oslaveloader 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
5 R- u1 o( e: l建立工程
# b4 W4 B; c4 x; C% |% {: N# i# Y
4 u( w2 ?7 [6 C9 n) s, t( t 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
4 R1 d7 T8 i$ s$ u% {! ^
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2027

积分

创龙

Rank: 8Rank: 8

积分
2027
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40, E' M# z. Q/ |, Z: m  _
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
; w7 O0 P$ X  ^6 X. L+ c& y5 |$ a
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 09:56 , Processed in 0.048061 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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