怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh," R9 Q6 [; q' j) c- m" O
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。8 a9 D) Y5 ]1 S1 \/ K  j" n# e
* [% g( X' S5 z' I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程& I( W0 t8 b# R% z

' x# |& Z$ e. L* _) Q 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。8 T: F& Z9 z0 p9 R0 S& v
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
5 g1 [/ Y8 P3 H1 M “清理”过的例程的源码如下:2 t6 q# T* s: U9 X. K) E& q
" N1 j2 J4 O8 Y% q
├── dsp# q6 s! G: j0 E( n" [! p
│   ├── Dsp.cfg
% j# P; w1 W/ c# I& M" S  M) R│   ├── main_dsp.c
: ]: O# s- \4 m4 a! [9 p│   ├── Server.c/ W4 A0 k  V# m( @+ U
│   └── Server.h
  S% K: E/ \1 H7 A& g* i├── host. N  v: ^& q! y4 |) Y' T
│   ├── App.c
" Q9 K( s- Y: ]  ~│   ├── App.h
/ _- o2 {  L, ^# w) G( {│   └── main_host.c2 v3 Q- Q* t( X& [; q* V8 M% G  P! P- j
└── shared
" [9 p8 T' k5 m   ├── config.bld7 g& O" `" V3 h1 I) y- t% a& B
   └── SystemCfg.h
7 Z- y6 M% W8 L& m0 w9 S6 i% C7 @ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。/ B) `/ `5 a* {, m/ v

1 c" \/ K: {- d./makefile
1 ?& T3 f0 r& b+ q: Z; w0 h7 K- ?2 ]" p- ]  D
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
2 D4 ]' t3 k( m4 W* R/ K) D1 e 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
7 D4 Q( v# P. o+ V 3
. O, h8 M! _4 D7 X% Y( @1 V' m 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi* z, ^' h- I  T* u9 p" D! L7 o* N
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
; I. G- \* `* G7 ?* x0 }1 \ 6
! _5 z9 ^" r- m# a1 Z 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_508 D" X, M8 l# k1 J3 ?( @6 w
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72- u9 F2 y" Q1 D- A: a! p- ~( d
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.45 ^# k- _! g  _8 v! x; q6 C
10
& R( q7 l3 ?  h11 export SYSLINK_INSTALL_DIR      \
! r/ k/ A' j, L2 S7 r6 H12        IPC_INSTALL_DIR          \, ~( P$ w9 k) J6 c: O$ H0 Y
13        BIOS_INSTALL_DIR         \
2 I  u0 }4 W( M14        XDC_INSTALL_DIR          \0 i0 S5 D" Q$ F; H" s" m
15        CGT_C674_ELF_INSTALL_DIR \
) _* ?- Z5 \/ C5 J16        CGT_ARM_PREFIX
2 {6 q6 X8 w4 Q8 ]17
+ I# |9 S& k4 ~! ~4 l6 Y: m18 all:2 K4 m+ F  a, ?( ~% N  t' p
19     make -C host all
% k* x0 l2 `; {  C! J2 r# q7 ?20     make -C dsp all
/ R: W0 h+ A9 ^3 P4 d' d21
3 \8 G: K  d0 _7 T; r' n22 clean::
. C6 p+ c/ d% G6 S23     make -C host clean( u2 b+ d  V; |
24     make -C dsp clean! w8 ~4 p, ~4 w! Q) C0 }
./dsp/makefile2 H& n) K6 V. H/ j/ K0 q& ^* a

0 }" F" C2 t+ j 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件$ r6 Y8 [9 e& I- D
2 objs = $(patsubst %.c,%.oe674,$(srcs))3 k- Y: {( Q+ _
3 libs = configuro/linker.cmd, b. F& }9 e7 p( F8 c
4
  c" Q' ?, r% z0 ?9 N6 t( w$ T 5 all: configuro/linker.cmd
$ A6 o- y* X8 n/ v2 G 6     make server_dsp.xe674& v6 d6 [' c" G, V/ Z
7
3 d" u6 v( w, Y/ P7 w 8 server_dsp.xe674: $(objs) $(libs)
4 D1 ~2 F5 w) ?+ _) }4 a 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)  x- u7 o( m( T; z/ R
10
: x' I0 d) y+ Y, w1 s/ b11 %.oe674: %.h
5 u0 f: E4 Z+ l3 ~8 P12 %.oe674: %.c
( A9 O5 u6 `  F& R13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<4 x  L# i7 s$ B$ }& u/ q
14
2 e5 ]( I- l4 W( g15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
3 m. c) p5 |! X! q16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \4 l& l4 |9 z3 b; X
17             xdc.tools.configuro -o configuro                        \0 s$ `% `" N! `- R' d& p
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
& B) {' a: |1 X1 n/ w19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \/ J' s0 d+ e3 p$ ^- `; w0 D5 }
20             -r release Dsp.cfg
2 v- v% _. C/ J21 & m* N* r6 Q  s) \( n
22 clean::# }, i* Z% m2 P( ~; u6 y
23     rm -rf configuro *.oe674  *.map server_dsp.xe674& i; C$ x5 b9 N( x, `3 h7 I
24
% K1 o/ S: _  W/ x1 l# ?25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages/ E1 d: L; r: _( y: F
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
$ J# @; W" I( P27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
/ p/ B8 e/ D4 P28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
$ x7 b* b4 ]" G. I4 v' h3 H8 P29
# }  X# G- c1 w4 C7 t6 j8 r; b30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
* g" T( X1 s- l31 " t! m0 O' p+ [# f% M4 W
32 CC = $(CGTOOLS)/bin/cl6x -c                         7 y4 {4 D+ r' D: V
33 AR = $(CGTOOLS)/bin/ar6x rq* d8 F- s; d+ X  Y; \
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi8 @7 a2 h$ i& E: P4 h3 R" W
35 ST = $(CGTOOLS)/bin/strip6x$ b2 U: w+ U' [' |. m$ K
36
8 J' W  z! [( A5 a3 O1 U37 CPPFLAGS =0 r# T' r/ Y& N. A9 ^% f+ |
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
5 r. b4 h4 g6 H: F' {2 \39 / J4 p" z% ?, i8 Q
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
1 `* Y- u1 U1 a! f41
9 }! w3 p. _5 w, J2 ~. [) }42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     5 L2 G8 `: f3 b$ R, b6 X
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序" E- K! _4 B& t9 b/ Y
./host/makefile' Y- s" ^* y) }6 y
# ~" O$ ]. n9 Z7 p* R2 n3 L0 P
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
" k% A4 N0 H/ q* I8 \3 T 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
& f8 u; }  K4 T; k, A2 ]% O) a 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug/ v& u6 d5 F7 V5 N2 Z
4 ( y  G9 ^- u. C  i$ s8 `4 q* M9 b+ k. n
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))4 A9 Q7 Q' i9 q/ @
6 9 }' s1 R* }# k
7 all:
% F# T6 v. \1 P9 L' a 8     $(MAKE) app_host
" i( a6 ~1 A6 z8 \$ ^& b 9
6 ]) q, g: {- N; ?9 z2 W10 clean::4 @# d8 N/ W! w' z3 d/ a
11     rm *.ov5T* *.map app_host4 R# U; T1 v: k$ f  ]; }' f3 Z
12 4 R/ l( L6 ~, n+ _% s
13 app_host(objs) $(libs)
. V* f, ?9 w: f& J14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)5 P: j* l1 S3 S2 m( h$ [- s$ ^
15 / J2 f2 ^, t) s3 |; t
16 %.ov5T: %.c, h3 p. u" {2 P3 X# ?+ {! s
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ h" Z# V$ b  L& M% h18 / r6 u5 B3 K1 ?7 Y) O: \
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t5 j! r7 z, q+ Y
20 AR = $(CGT_ARM_PREFIX)ar cr
8 F7 P) H8 b* K5 w2 ~: ?21 LD = $(CGT_ARM_PREFIX)gcc
9 \- ^- l. }: i2 S& F) F22
# x5 q" m/ K: b+ S+ D7 N23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \+ N, J) y# S- B( m0 L/ R4 H4 ~3 S
24            -Dxdc_target_types__=gnu/targets/arm/std.h; t4 X! T# q3 _% X) x4 B  w
25 4 v7 A8 B+ f7 W  ~* u, ~8 f
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径- V5 `3 F. z- m$ {- j
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \1 y- A8 Z2 n- Q1 a( s& h& }
28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ k' f8 C6 ^$ B29          -I $(IPC_INSTALL_DIR)/packages
* m- ]# q0 g7 G30 9 i' e! O+ p: _6 @: v/ z
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
" R3 L% h9 Y! h8 m( L32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
5 O8 `) Q0 H- t2 l  |! U: m4 y9 y编译工程# _  |% I/ \% u4 r% M+ F2 [# {
) L% E$ S: R9 X2 X! N! g9 L6 q6 H
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。0 w! S8 u7 F* H! j9 {% X, b5 B
# ?4 Q& E3 k1 H5 F
运行工程
: ?  W" J# A' |& [, q& ^+ A
' z- I8 m& V8 v+ Z* p- u3 ` 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。6 e8 g) N/ ~, u1 p) u- C9 e
  y/ F& {8 J) O  s8 a6 O* G0 o
1. insmod syslink.ko                    # 加载 syslink 内核模块% I0 |2 m0 M  Q1 J5 B
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序: m1 z. ^1 Q; x3 h6 E' ~
3. arm_app                              # 运行 ARM 端程序
2 F' f( Q1 v0 y0 B4. slaveloader shutdown DSP             # 停止 DSP 端程序
. {- w, b9 G5 B sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 5 `# r3 Y; Q  W8 Q* E( Q
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
, L: v3 U" c6 [7 v3 F( ~2 ]- _
+ m4 ?. o  E  U  K0 I 1 #!/bin/sh
4 F% ?( h: I" _% _7 k 2 4 a/ `, t) ~4 v, f+ E
3 set -x# t+ p" f3 {* q4 p- o
4 0 v: t' P; a% I  I+ m5 O9 p
5 insmod syslink.ko
6 A! U) ^: i2 C; H1 _) O- ^- ] 6
4 t$ g" {3 ?8 Z 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674# n1 W* n% E5 n& |
8
- L) S# Z- a% R- F1 @1 B- H1 p 9 ../host/app_host DSP
* @5 m. J. P  M  P: w- Y# |10 8 }: ?& b2 F* Q1 k: {2 z
11 ./slaveloader shutdown DSP0 V) _, x. |$ f% u6 S) i$ I3 c0 b3 H
: c/ S6 C# t/ K3 W) |6 V3 r$ X+ y4 e
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:054 N$ `9 s6 f" u
建立工程) d* P8 F+ O0 l' c
/ d, `4 ~  p0 o! a! R* p
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
  Z" Y8 r4 Q3 t* b5 d( q# y
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& `* H' U, d. ~! t
建立工程' a/ h9 r0 z" f6 h' @( S2 l
( ~: c9 H2 E  B- V( w$ N
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

; P. n( ]' @8 j. z* r$ |slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2190

积分

创龙

Rank: 8Rank: 8

积分
2190
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40. j. S: ^- ?' y( O2 e: u( M/ O
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

& e$ N  Q" S7 ?  U  W; e! Ldsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 05:21 , Processed in 0.042444 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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