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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,8 R: @- @) L3 y
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
1 J9 c0 R8 O; q3 [( j; h: b1 @" I0 h) e$ s  s% h) R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
+ K! _: n( U: X- P; w- p- J) b+ U( ~) y0 j% O% t
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。8 _- h  }) M& l
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
8 A; b/ o/ d/ _2 H- @8 d- P “清理”过的例程的源码如下:
. A& {" W4 \! E1 V* |9 Y1 s
9 [5 z  p4 s1 |- j├── dsp
+ d2 y$ \$ R6 M6 d) i! ?! [4 N$ x: T1 P│   ├── Dsp.cfg
2 _. h2 w* E1 ~  L$ ?# O# J3 k│   ├── main_dsp.c
5 q9 D* s8 e" @  I│   ├── Server.c7 W% E4 A- s1 C9 [8 B! }
│   └── Server.h
: [+ Q3 N$ c  B) }$ A9 V├── host
2 t! O. D: q& }( @- k0 Q' I. Q4 j│   ├── App.c# O) \* `) s6 z) Z! R
│   ├── App.h3 e; O4 J: k9 [  ]
│   └── main_host.c
0 k$ P; _2 i# h+ Z$ C9 F└── shared: a' `! S! q5 }( O7 ?& Q$ J4 a
   ├── config.bld
, V+ R8 K# {4 j4 c8 _5 y& v- S   └── SystemCfg.h5 p0 c3 I2 {" w$ G0 F
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
7 v8 `: j7 P1 Y4 T- w2 B8 a* N9 J, n- e! ?* m' k
./makefile
" C: Z" v, ?1 }! y. r6 A5 n: y3 @$ t+ ]; _  f! N* i( R
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_058 X. {( ~8 I; h8 ?3 V, {
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15, h. \% l& l, Z5 ^0 }; f
3 . x: `$ l- \* G7 ~2 [1 C
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi7 ?% K! d; c: m! I% v
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-6 u( c) D0 i" s1 [' N# j. Z
6
9 B. G" I; Y. H 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50% K6 W. a& G; q1 c) [) k6 _
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
. N3 f6 z- q% z1 J* ?; t1 r) Y; b 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
7 m" b0 _7 s4 W9 J$ u10 2 ~4 [' }6 D2 s) O$ R5 b
11 export SYSLINK_INSTALL_DIR      \
- f& e8 a) s$ O  p# j2 g0 z12        IPC_INSTALL_DIR          \
' v( n5 d2 n6 N13        BIOS_INSTALL_DIR         \
  S" F# w' B9 y3 ]9 J5 n' G5 M14        XDC_INSTALL_DIR          \
) L- N, c1 N9 S  @& k15        CGT_C674_ELF_INSTALL_DIR \
3 b( ]. W* S4 W$ H, j$ o8 G3 H7 ]16        CGT_ARM_PREFIX
: }( o# y( @) ?, B, u17 ' ?( |2 o8 x) |6 x8 |, I
18 all:! a. R0 z$ p- U- Z
19     make -C host all) M) P  {8 q6 i4 B3 t- j  q- h1 r2 r
20     make -C dsp all
: h! L8 s8 p8 G1 _" ~1 T21
/ @! r3 _% J# h22 clean::1 l2 M7 c% Y& g3 l
23     make -C host clean
8 x5 _9 {$ D# k# a8 W4 v3 M24     make -C dsp clean' k9 e  N1 Q0 i6 ?6 b2 I) A
./dsp/makefile
6 {$ H) @! N  q* t! L9 F- X
. ]8 H3 X: c. i: ^  | 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
2 z4 n5 A% `2 g6 z 2 objs = $(patsubst %.c,%.oe674,$(srcs))9 w) y: q' z5 J
3 libs = configuro/linker.cmd. B% V! u4 V  S3 V+ V
4
1 a/ ?, K' h+ O9 k. M 5 all: configuro/linker.cmd
) X) g1 K" D9 w$ U, T 6     make server_dsp.xe674
; q- O# Q: W/ N4 ^ 7
* W: y5 g: y9 K; [, y0 C2 B, ], J! a 8 server_dsp.xe674: $(objs) $(libs), p+ G( Q( o9 D& s
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
5 E5 f, o5 K! P10
2 \( N% f/ [, {5 q5 m& W% _. t11 %.oe674: %.h
/ F8 s4 f. U! T. d7 a' t) Z; \12 %.oe674: %.c
% P# U8 S* B9 J' J13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
0 U4 J' S/ ]) s' u  ^14
# P$ F/ E7 e4 A+ M3 f. p% r6 z15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
1 C) J- {9 p1 _; w7 \2 Q16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \/ \4 N" v0 C6 z1 Q! v
17             xdc.tools.configuro -o configuro                        \
' h4 U' {$ x1 O18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \3 E& q0 z' R. `. q+ y. |# A% v% a" i# C
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
3 Z+ _& W( `8 |+ B$ B% x20             -r release Dsp.cfg/ ?3 Y, r! H0 r. B: V- U7 G
21 & ?: k0 T0 l% F/ z1 y
22 clean::: o3 N; X* U' T* M3 b. C3 R
23     rm -rf configuro *.oe674  *.map server_dsp.xe674& f6 I, ?2 x" I8 }
24
( t4 F' _4 |7 y+ r" U- j. u( `25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
. I' [2 E& I, g, Q# i! Z+ o, T( O, B26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages* z1 I$ E, r' `' `' N
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages. Z' t3 A2 y4 h3 ~  i$ D) T$ t
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages4 q4 D3 Y4 z% `! O9 [0 D9 j6 V+ A
29 : M( u3 U: v7 ^. J
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, [. Q8 H; _  w- r7 h31
4 n; v+ A) P: V3 y% }32 CC = $(CGTOOLS)/bin/cl6x -c                        
$ B  r" E1 w* G2 |/ o: ~9 {, u3 y33 AR = $(CGTOOLS)/bin/ar6x rq
/ U, m  ~, ?) ?0 Z/ T34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi6 _3 {, c# m9 j: g8 _9 L
35 ST = $(CGTOOLS)/bin/strip6x4 B' i/ y: U1 [5 R7 s' ?& [
36 5 q; X; L% ^- X: W
37 CPPFLAGS =6 v9 L' j7 e+ h) w
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
' c' n6 h+ Z- G2 C3 ~5 e39
# C' x# ~; h9 V' Q. b1 q0 o4 C40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
" g& p$ _" G( d8 L9 s; Y6 H41
7 T+ M. S+ P' [, c; Q42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     9 n5 }+ g0 b, i8 O0 @
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
% o$ H5 ^* }7 {6 S5 i, _! K./host/makefile  _* U" X6 G1 H
4 C9 n  G7 e% i! {+ r- v2 t3 L
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
( T1 o! H0 N2 H- I* b2 C% B" j 2 objs = $(patsubst %.c,%.ov5T,$(srcs)), S. v, z( k+ C( p7 n. f
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
; g$ {, l# G9 y8 o9 w) H1 r/ L 4
! u, C' @# k% n 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))" ~( H! k9 a  P9 m2 i4 n/ B# O
6 $ W% L9 }. \  w* w* `% [
7 all:  R& @1 W) r+ W6 y0 r4 Z1 K: O
8     $(MAKE) app_host
$ L) J- c; [) N* Y% s% w 9
, f- S! O* W& W' \- p8 ^10 clean::& r5 q; W7 I6 B* ~3 L* A" P+ W3 H2 ~: a
11     rm *.ov5T* *.map app_host2 o2 ]7 k3 p/ L9 |5 }7 v
12 " M- l* H( i1 m! a
13 app_host(objs) $(libs)7 H) W) v, U& U: z# [0 t
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
. I$ M, E8 J; h( l4 V15 $ y/ v' n8 X( J. W2 D
16 %.ov5T: %.c. M9 G( U7 n/ A  V3 Y
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
( @1 i; ~! S0 |- e# B18 8 O: X2 A8 _5 |- n* o
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t7 e' H( p* m$ U: n. w1 J( R" z
20 AR = $(CGT_ARM_PREFIX)ar cr1 Y' p. _$ ~; Q+ a, R
21 LD = $(CGT_ARM_PREFIX)gcc
1 \+ J; e: [6 @) J22 0 `/ L1 w/ a9 g4 b; n
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \6 o5 @8 `6 A% d- Q) v) d1 M
24            -Dxdc_target_types__=gnu/targets/arm/std.h
1 \+ h0 s) a- \$ W8 B0 P3 q25 7 X, p/ Q. z$ [2 M2 `" A
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径  J/ N% O  ], C$ O
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \9 R6 y) A, B3 p( a5 K, M
28          -I $(BIOS_INSTALL_DIR)/packages                           \. k/ Z; @* c$ z7 L7 \0 C$ n8 c
29          -I $(IPC_INSTALL_DIR)/packages6 |% T0 u1 H+ A; ?
30
: d" N( q& T7 c1 \! I: |# Z/ o% ]31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map& c% [- j+ e7 N; J5 k- p
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
  ^9 x7 y4 Y3 y1 n. m  t+ U编译工程
; t' s) O( w' Y6 ], E( b& @7 M! {  i1 D1 I3 o; L6 f
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。' n& D* B  {9 ~( X

- J* G8 m7 k% I1 _运行工程
; [- Z& N/ F) U. k1 A& H- O& K- P# L! D
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
& n6 a  l- D& {9 X8 d3 s) S
, _# ~6 a- I+ B5 v! l1 ^1. insmod syslink.ko                    # 加载 syslink 内核模块
: V" p. q5 w* U3 j8 f0 I# M" x2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序4 f& E) X9 [& n
3. arm_app                              # 运行 ARM 端程序
- c: H0 ?" o: ~8 X4. slaveloader shutdown DSP             # 停止 DSP 端程序9 e+ b# j3 q, a+ a
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
; E- R3 Y4 m: q6 [" A- k2 g4 y 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。5 v6 E. o/ p! x& c2 i
! L0 A; h; [. i: F1 ~) U
1 #!/bin/sh
: \- [( j. a# V* z5 f4 g( x 2
  K3 @& L: A: W5 {/ {; o 3 set -x
" P. R2 H/ L4 B& U5 S 4 8 i# l- h! d  o9 c4 I2 p9 O3 B
5 insmod syslink.ko* L, e$ s* s- Q! h- h6 H* q
6   V" a: m: v6 S
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
- @7 H1 Y7 T4 N9 ^$ f) U* C 8 ) ^  v# z, T3 u* n: j
9 ../host/app_host DSP  T. [7 q9 L: l3 Z6 z2 p
10
* S/ u, R7 V+ l+ M; @# b11 ./slaveloader shutdown DSP
3 |' S5 ], ^0 N7 Q7 q" b/ b/ P
+ _) ?( o" e7 e6 V# R
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:056 a, o# _! B: ^: ~" _
建立工程+ d/ F7 ?9 p' G' y/ v) [/ [! g
+ y2 S# r0 }$ c
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
7 D4 [. i8 l6 c( ?! V
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
% y1 [; j# e/ r- H. o, E9 v建立工程( c, n7 s3 e& _. R; u
+ P: i! F, ~( y* L
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
8 e- y5 Z, k' T5 W  n7 ^1 X
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
/ q$ ?: F( H7 T6 x( a9 islaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

: ~: P5 y, M' q4 Udsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-30 15:38 , Processed in 0.047639 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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