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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
6 }, w: b7 P) Z7 x; y8 hdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。& }/ {: o: Y; D: r& T3 }
& _. ]- R, W- f5 z" L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
$ F3 n: j8 ~) w, S$ G, J! M  X9 A
0 A" P( d% t+ @$ q 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。2 l7 \5 C6 G- w# S" K& l. X3 Z. ]
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。" C3 k/ v3 A0 ~1 I  Y  @" ]
 “清理”过的例程的源码如下:$ u1 c- m+ x- @8 w, a+ n

+ G+ H! Y5 d) A& W' Q9 k, u2 t├── dsp# h% z7 m; c9 O
│   ├── Dsp.cfg0 n( K7 }5 t* y4 s( k5 j* M
│   ├── main_dsp.c
' S1 G8 ~  n; r3 M; J* M% T7 f4 m3 _│   ├── Server.c" L7 K6 t0 T- q7 u/ \8 T
│   └── Server.h
; a" m( D9 T$ A├── host$ t/ c5 D* Z% T- }
│   ├── App.c5 Y) z$ N8 s$ l3 i  ?) {, y
│   ├── App.h# M) P' A3 `9 h
│   └── main_host.c
) v* t. I) q0 d7 O└── shared
) U3 `4 S# S  ^   ├── config.bld
* T7 n/ P" L2 o; T: r8 R) M   └── SystemCfg.h: m6 X$ l! D1 c& C# l
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。) V/ b# p% {9 G' }* @
, M; ^& z, U! @% I/ g% G
./makefile+ U2 ^9 i$ l$ i) n1 d7 E

! G8 p+ P9 T0 u( r' S 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05% k5 Z  j$ v3 ~( J
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
' s* Y6 }) A  S( @ 3 3 t4 v8 K$ V1 Q9 }! h( h; {
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
) q  H9 B: k" N  N3 v 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-& r! }; @) J$ g) J
6 1 V! e& d: q" o2 b
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_504 R! ?& r( y2 U9 j: |2 v, C+ @
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
$ a( b; b$ y$ [( Q8 \9 P 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.45 W/ \6 k; ?, P
10 " s8 u2 _, {0 G. j3 W- e
11 export SYSLINK_INSTALL_DIR      \
* J; x2 j! \& n" r$ l2 g12        IPC_INSTALL_DIR          \
, |! q2 f4 t: c13        BIOS_INSTALL_DIR         \
& G; h2 w" h, u$ n14        XDC_INSTALL_DIR          \8 w/ k* `; B$ [0 t
15        CGT_C674_ELF_INSTALL_DIR \: z& I$ ]" ~  B$ _/ d
16        CGT_ARM_PREFIX% s- A) z1 T: m: L
17
4 N5 n& o, ^4 v) m: ]18 all:
4 G: c  g4 }. o( m* q0 y, s6 K$ N0 s19     make -C host all
0 K% K6 F3 t4 y! C20     make -C dsp all
8 _% v6 R* z! @4 c4 K3 y21 / W% q* u# X) z# g0 b
22 clean::' C0 I. U/ L9 D6 n; p
23     make -C host clean
; r7 R  H- D) }, [24     make -C dsp clean
/ V& I5 e: b! ]6 ^* X./dsp/makefile
  k& H0 D- d  t' e. }, G0 C, F% V5 v  J4 o8 e% x$ t! y. a
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件5 s+ f: @6 m7 u
2 objs = $(patsubst %.c,%.oe674,$(srcs)); s" \2 I9 l* G8 s) Z% g
3 libs = configuro/linker.cmd
0 S/ e* ^& W/ S; B! m4 A! f 4 $ |' [$ x4 V$ Y* n* f
5 all: configuro/linker.cmd
5 W+ c& J+ Q$ t# V' k7 q/ k9 K' y 6     make server_dsp.xe674
/ a9 H) ?) J$ C+ u8 q# m) U# {/ [ 7
* L2 P$ z8 A8 I! q& k4 r 8 server_dsp.xe674: $(objs) $(libs)! P* p) e' Z5 j2 \/ A( E
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
( v* v* }% [# v- K+ \7 B10
8 I8 j7 u4 W) d; B+ J+ [11 %.oe674: %.h0 k4 y. r  N4 q
12 %.oe674: %.c, |0 ?0 @8 E' U6 a, }( Y4 B
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
; b7 Y. x5 C% r7 ~3 S1 ]14
" P7 @5 l  c4 I15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
% q# W" r# s1 u# B16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
& P" i; g7 J& q) |5 V# G; h. t, M17             xdc.tools.configuro -o configuro                        \
: V% @7 \- W; K: i9 R, r18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
7 L8 }0 c6 ^/ _' w/ ^# z7 P19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \. r1 @) n0 P) @9 y: M
20             -r release Dsp.cfg
8 |9 o5 S# {6 p  g5 S21 0 @4 K  \% O. y9 @0 W* ^
22 clean::( d4 C& o7 L0 E0 k2 Z2 u
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
+ C' m! }9 P2 P7 h24
- z: _1 J# s( L  X4 b( |- I& Y25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
7 M) |5 O' |0 b' g; o" a' }, y26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages3 W$ K1 w! b( `5 s
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages3 k. E, [# F, @. |2 u* p
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages$ K4 u6 Q+ h( `: D
29
: T8 m  |5 ^$ @; @30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
! n+ G& E- P/ {6 [' u31 % T3 I# P/ n. w; d* n4 K6 w
32 CC = $(CGTOOLS)/bin/cl6x -c                         % {4 f9 ^: H& P" o" v' C
33 AR = $(CGTOOLS)/bin/ar6x rq
& k! E+ |4 ]  x/ [! H34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
- h" Y% o& Y8 h1 s35 ST = $(CGTOOLS)/bin/strip6x( T. i/ l+ ?5 W; r+ P: U
36
8 c* Q( I% Y* n0 K! q+ k37 CPPFLAGS =" ?: x+ r# A  y& S! E9 V
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)- z, I) [5 G4 |% u4 y$ H6 x
39
6 n9 B/ t. ~% B* R40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)* [6 C& J3 \6 e& T/ _
41 / ?) P2 B1 K. Z1 b9 p" B9 y
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
3 [2 H+ I( f! I8 O9 p) l* Y43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序* q* T) p7 u9 E( }) Q' ^
./host/makefile1 d$ O/ O+ x) n! ^; T

( w$ c" |* S6 P+ l: J 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
' H) e& q7 j1 n2 b% k+ @/ {$ g 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
2 Y5 O) b8 m+ V5 @ 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
2 f7 W: u: q, c) v3 v% x 4
$ r/ t  @5 U, X# l$ A 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)): H& N) O( p0 e4 K2 X5 b
6 * K1 [, }7 ~5 x6 g; ~
7 all:3 R- [3 N8 k' {' C  X* w5 ]6 A
8     $(MAKE) app_host
- {( A/ k( T. M( t# i) L! v/ g) i 9
9 I: E/ E+ j: f. W10 clean::
4 t! S0 C6 ~5 Q8 P) ]) b: K11     rm *.ov5T* *.map app_host
& ~# e' i! F- A7 }9 B( {5 P& R12
0 y% N. L+ ~+ `2 n3 }* _) p13 app_host(objs) $(libs)7 v& h: M* t# n& B
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS), q/ Y% `/ J! e0 b
15
. o( O. |, J: K6 |5 [7 O+ h16 %.ov5T: %.c# K+ k' Z, {4 J
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<" y6 W6 F) Y' l4 D
18 2 Y% C# J- v4 E7 E0 I9 r
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t$ u1 J# k# h/ S8 o9 Q
20 AR = $(CGT_ARM_PREFIX)ar cr0 h2 W* |$ q  h& R% x1 t
21 LD = $(CGT_ARM_PREFIX)gcc
) B1 v; E$ a4 G$ M+ }1 p4 d% E  n22 + n! \# m* D" a# A' Z
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
2 b" N! m( S+ _/ ]2 V4 y5 q24            -Dxdc_target_types__=gnu/targets/arm/std.h: Q3 Y3 ~- f( W+ N
25
. C' K; w0 G. D/ E) z26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径$ d9 S& R" w/ F  J! r2 j' i
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \' q5 d1 x6 L0 }* A; g. o  j
28          -I $(BIOS_INSTALL_DIR)/packages                           \$ m: a- k7 B* s' }/ o
29          -I $(IPC_INSTALL_DIR)/packages
- F/ M) E# u; F! m2 r% R30
* |, s' b. L: X$ ^$ W# m  m31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map8 x: h( b9 B$ M8 S6 z* @: _
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
, l' W$ a! ~/ j: p1 x8 c$ v4 R编译工程% f1 |/ n- D. l2 k+ J- A- M5 j
6 S: j: f* }3 Z" v- i* d3 w
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
" K4 e. o6 h' r; j6 t# j7 g* g, V1 Z  x
运行工程
( Y9 D- K2 O" Z+ ?8 ?& A
3 n" l/ f3 l: \! c1 z2 u 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。8 G- Y; ~$ e7 L; a$ B7 V+ G( o; [

% ?$ b; C/ I9 W2 q, z1. insmod syslink.ko                    # 加载 syslink 内核模块
' G$ h' Q, R8 q0 g1 ^; W% m2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
* A8 v; L' f$ ?+ u& D  G! ^  I7 b& {3. arm_app                              # 运行 ARM 端程序
+ x* Z% N7 k- X9 ~8 n. {- ]+ I4. slaveloader shutdown DSP             # 停止 DSP 端程序
( l4 {( [- ?* d3 m7 }7 `, | sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
1 @9 K( C  t; _  ]5 N4 Z 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。4 K9 i+ B5 U( N) J  a4 [4 s. Z

' v& z! ?5 n) r+ D& Q8 p4 M) x7 x1 x 1 #!/bin/sh9 P% N  o9 d* G! M' V2 ^
2
5 T7 O+ u! g4 | 3 set -x; c) v0 F$ D6 b4 s/ t5 b: m1 [  C
4
5 k. \' X* f; Q& {/ g 5 insmod syslink.ko
2 k: r, X; f, X7 c 6 6 Y9 I6 E- @; s0 u; L# @9 }
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
7 @1 i! ]) T8 G9 q  ?5 H. h 8 7 A; I1 K" C2 e1 [+ q
9 ../host/app_host DSP
4 A# U- G0 P4 t$ ~10
1 U6 z1 l# T5 m/ B: T11 ./slaveloader shutdown DSP
2 E. |" a' W" ?; ?8 [1 F. B0 W4 U) ^0 _
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
3 R7 d: ]4 r7 s( z  F. ?) ^$ g建立工程
3 \; _2 s3 G! E1 c) G' Y9 G3 j3 y" S5 E  F: t5 ?
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

; _1 h$ i* x$ l, Sslaveloader 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( ~# m2 Z8 n4 o) ~
建立工程6 \+ P# Z  O; d7 R" V" w( a7 H" F( \

6 w  G0 s- r& @4 J/ D; f 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
  `. ?4 l! K) o3 l' \
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
/ u; |& c$ u3 l* b" C  Eslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
# j, l7 u% K9 V. R* w+ \" B+ a
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 12:03 , Processed in 0.042838 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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