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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
" Q7 R. `/ k/ _8 L; ~dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
, G/ a! k/ S% Z) \( t  U
& B2 c) w5 G2 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
) h( h% d2 b7 _+ K. b8 Q
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程* N9 Y% f7 ^3 k9 Q

# p, b8 b" l9 R, N9 |. x( u 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。9 t0 s; W3 T  ?! y# n% i0 g; P
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
5 z. g+ x  B* t: S& r  c3 C “清理”过的例程的源码如下:
* m; i& h6 B% ?! n8 D% D: j* |" g( u9 h1 g
├── dsp
8 K/ Q$ L/ Y& T, ~9 `* A│   ├── Dsp.cfg6 g. i; d; v5 `0 ~4 i
│   ├── main_dsp.c
# z) w% C4 X5 q: X. r6 K│   ├── Server.c
1 {8 K' H- v1 I% |/ a│   └── Server.h  h1 q) D+ q; Q# R
├── host
' H7 H, f& m  f│   ├── App.c
3 k, G5 \$ l  W% t7 \# M│   ├── App.h: c. G. D. `; G5 Q! u
│   └── main_host.c
9 ?+ l0 F5 R# X; d4 D, G└── shared
& \3 }$ ~5 p/ H9 X1 B3 ]4 X. `   ├── config.bld2 X0 @2 U6 t, K5 f* ]. k' f9 G
   └── SystemCfg.h7 m+ m9 o! W0 j  r
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。' W+ N% m7 _' F+ D

9 D- y" H+ g3 G- T./makefile/ }0 ~3 B2 T% \) E# Q2 N  h

/ i# [- Q" k* R. v 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05( U, l  Q; ]5 O
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15' t: g( O- n' [* a7 N
3
5 U& |3 d6 X8 } 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
6 V8 R/ O" f( _6 X! I, J 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-) C. R( j! Y; g" d3 l
6
! k5 O' d" q% v6 v( w! L 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_504 N- c# [- m/ h3 G6 J" z% _
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
' v% x' Y, ]2 J 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
9 ]- A" D( d$ U# {' _$ y2 j$ X10
" H! u% N, e' w8 x* x! k11 export SYSLINK_INSTALL_DIR      \8 L  b' v9 p/ e8 }0 B  Q, A* i
12        IPC_INSTALL_DIR          \
1 t1 x& W( \; V/ e" e$ g6 Q13        BIOS_INSTALL_DIR         \' m" a( l' v/ @' G
14        XDC_INSTALL_DIR          \3 k/ |2 c, @, d( D
15        CGT_C674_ELF_INSTALL_DIR \
2 U1 }- b. T( L1 `16        CGT_ARM_PREFIX
5 X: B2 m1 ^6 o  v' x( f2 }7 z17 ' Z* ?7 M& y" X# f$ d2 {  J
18 all:
" `0 V6 ^7 S* e$ O* q7 i5 ]19     make -C host all
, E3 }* R2 e$ z( b6 N, H" ~. X" S/ v20     make -C dsp all$ F$ O, V( }8 y$ P) A; D
21
2 \+ o  H  W' b: _22 clean::
" A: y2 `; F! r23     make -C host clean
1 V, s" ]' c( R1 J) h9 c0 h24     make -C dsp clean' {" h6 L) @+ |2 O% T7 r( e
./dsp/makefile
7 X  T4 d( f. E  e' W7 j# b6 x$ f$ n0 t; T' w* I1 O
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件/ y$ ^8 z4 \4 A
2 objs = $(patsubst %.c,%.oe674,$(srcs))- x; F9 @, q- ^* W4 p1 T0 W8 K$ G
3 libs = configuro/linker.cmd
% r5 P9 X0 @, A+ I8 l 4 ( X7 |9 _7 M' U7 |
5 all: configuro/linker.cmd
$ n% p; c) ]& U' z8 E7 m& L 6     make server_dsp.xe674% D2 c) u2 O; d
7
. [$ @5 u$ D5 H% v8 C 8 server_dsp.xe674: $(objs) $(libs)
! g  O% I' X2 ~2 c1 f 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
. ?2 E& i1 d9 Q7 P10 : X( r- b3 v, I$ f1 c
11 %.oe674: %.h
$ _, g0 G, h; p2 \12 %.oe674: %.c$ M  d& {# B5 c! U! a3 G' R- c% |
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
/ l4 a7 R+ p& v14 * @% i' K7 I0 Z/ W  l
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld' |. E0 z3 {* \( e' q) F  Q
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \4 t, _* M4 l5 l$ N
17             xdc.tools.configuro -o configuro                        \' _5 P5 G; `: v
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \+ k0 _$ w- m- Z5 ^7 d
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
+ }! l( F$ P7 T9 Y# k20             -r release Dsp.cfg
( u# H+ M. I2 r21 + e" Q! o2 I1 O8 y4 i
22 clean::4 Z$ W* V8 t. k+ E  ~& H- N
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
  w7 w4 v9 @$ e: y1 U24
1 D/ M; ~: H) [9 h2 r* h25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages& P  [$ T8 k( l5 z: T) k2 T
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
9 D& c4 R5 {! J, C# A* a27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
$ J7 ^6 q- ]- i28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages& |1 y8 W: T' k" l& P
29
* ^4 Z: Q- G5 B* R* @) Y30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
! t0 i' T( ?" D31 * g, G3 J, c  F5 H" t9 Q' i
32 CC = $(CGTOOLS)/bin/cl6x -c                        
& O% s- b. g* [  S33 AR = $(CGTOOLS)/bin/ar6x rq  |0 j, k! L8 b; o
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
# ]2 C! q- d7 i9 C3 t( L35 ST = $(CGTOOLS)/bin/strip6x
8 S+ [6 s. P; T- W: w36 % s3 \  h4 `5 p
37 CPPFLAGS =7 E3 j0 e7 r! X! ^) [& @* i
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
& b8 t5 A+ }, n& u* E39 : v' U9 E! q% j' O1 R  e; j
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
) k, D3 t5 C4 k2 z; D! q; ]41 3 S+ ?& E$ K& ?
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     3 j! m" I% M' p9 b# ^
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& ^7 q' p) s9 S& {& M9 f
./host/makefile0 O5 H- q7 \2 I& v! w
. m9 X0 A6 t& ]% g7 b$ k. D
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
0 a3 t; Q$ v( V3 g2 ]9 j 2 objs = $(patsubst %.c,%.ov5T,$(srcs))& `6 p* U! h8 }' I
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug% L: y, b0 J- Q+ W: c5 F( y
4
2 z0 q5 F, ^6 E9 w" e/ { 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
# b. _! C" j/ N  ?- i1 {) m 6   m. A1 j( k' W) m  {
7 all:+ U  o. ~) C9 e/ |1 z' |+ t
8     $(MAKE) app_host) O2 w( w" t$ @* c" a1 Y5 M
9 - @: A( M& ~+ ~" S' `1 q$ ?
10 clean::
1 n) f' }7 l! T/ b2 O11     rm *.ov5T* *.map app_host5 d1 Q$ X* R$ }& J8 c2 B* V
12 $ Z% T. M5 W9 {) r# v, t
13 app_host(objs) $(libs)
' b7 t4 a4 m8 F0 Q14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: }# t" x$ x: f4 Q8 Q. z15
- [* N8 ^" k; X16 %.ov5T: %.c
. f' r& l# R. f/ O/ X17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
$ t; H. [! b1 s+ u. P% }8 ?18 $ C& ?0 D+ V) s& m
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t2 d( y- E/ i. [; h
20 AR = $(CGT_ARM_PREFIX)ar cr6 G9 [3 @/ H  s" j
21 LD = $(CGT_ARM_PREFIX)gcc
* ?" g% N. q9 {# G22 " V" J* ~8 T; p% p4 t' W8 L" ?
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
% n1 K8 a3 p* k. W$ v% l24            -Dxdc_target_types__=gnu/targets/arm/std.h
- g3 r( i; h2 f& w25
! _9 d5 y' \) r  k$ ^$ m5 m26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径& d2 w! P* o  j/ h; M9 }0 D' n
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
/ a$ |$ _: t6 a28          -I $(BIOS_INSTALL_DIR)/packages                           \
5 o0 ~  u+ {. v& p7 |29          -I $(IPC_INSTALL_DIR)/packages
& r2 O4 h0 |1 H1 A+ B5 j4 H30
* K7 T( L- L7 z! o$ S31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
5 o& k: X3 v2 d$ O32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
! b6 D2 M* E( T  j4 \编译工程
3 J3 H( j9 A+ H4 i4 W' u1 [- ]& `  _7 \
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。7 ]' G" T( D% v1 u) D3 i4 i# v/ S

$ h' N/ A1 C9 z# V& O运行工程
7 r7 l( y& u- J1 N- ~4 p0 `4 ^
3 T( V; `' h. Z$ v  V 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
' \  z+ c5 r! I. [" U$ Y
! k+ t* H0 w" [0 Q& u1. insmod syslink.ko                    # 加载 syslink 内核模块
) Z+ u$ Q- j" M! P0 \$ P, C8 l: H2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
* S% F; j9 R7 o+ v/ p) f( A3. arm_app                              # 运行 ARM 端程序. T' F2 ]+ o. t; P4 a$ V% \! B! D  v
4. slaveloader shutdown DSP             # 停止 DSP 端程序& ^2 D8 M/ `  `0 \2 J! y! j3 e
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
: V- P$ s# X0 o2 b! c2 u; d 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
5 Q) X% Q( `0 X+ t8 w) t" ?5 B6 Z: L* h! g$ z: m2 D
1 #!/bin/sh
- Y$ b; l) _' D6 R: e9 I1 E 2 " Q# h- T3 Y" |+ Y8 r
3 set -x* V) }; _) ?/ u+ Y6 ?, j7 D
4 2 M+ k" K5 k# n+ M
5 insmod syslink.ko: n- p. ?; m; [) E
6 ; _0 a+ H$ J3 `/ l. F9 s* M, [  l
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674. m, E& K6 @) w
8
7 k- P  K" T: Q& \2 ^3 `' P# r/ G 9 ../host/app_host DSP4 {, b. {$ U) `- Q/ N
10 6 S$ z- R! n0 _. d
11 ./slaveloader shutdown DSP
% R8 u, J" T% s: T, E" r( P% T
  ~! j2 E- c; {5 \7 C
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
% Z" y* o) ^! m建立工程
. S; Y! M) _$ a6 C( z, b3 \9 ^" N
. z) a# I1 T5 W) m% J6 C7 v5 K8 ] 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
3 L+ Y6 T( U' o4 g' m
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
' j# u2 h  e) E" n, r8 a* m7 U3 _建立工程
+ a  {$ @  L+ I5 X9 X
7 G/ l' I, r, l5 [" ? 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
) g7 `# D9 n3 w
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2091

积分

创龙

Rank: 8Rank: 8

积分
2091
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
- I  m3 w$ B4 I0 B( ~( O9 tslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
+ d5 n# n% V/ g
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-1 05:43 , Processed in 0.056104 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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