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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,- l. _+ q. x' e6 \8 Z0 \- W; _
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。7 |( U2 h( p! _/ o/ c/ D& L
6 R2 D* d8 N9 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程/ f" F% {: |7 w
4 u- T/ V( G0 a
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。! D+ T; Z5 `7 Y8 v
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
9 t- S! {2 b8 r' V8 c8 M6 S “清理”过的例程的源码如下:& j8 M  s* s. n' w0 w
; h# r5 w+ k. t" i& N0 |
├── dsp
% T+ Q+ U6 Y) q│   ├── Dsp.cfg9 L; |' k) |* M
│   ├── main_dsp.c
) s% Q- v: [8 T& f' @0 {) v: ^│   ├── Server.c
6 O- v& U5 a! P" z2 N│   └── Server.h
2 P) a) c- C/ l├── host- E% F* _. m, g
│   ├── App.c
6 W. Y) r, N! l9 F$ F3 T│   ├── App.h
: c3 I9 @/ f$ s9 U! S1 [; ?│   └── main_host.c3 [$ t0 g% s9 v. `) `2 d* U# b* `, m
└── shared9 M4 S; W) j9 H9 v9 T# d/ \; c
   ├── config.bld& W% M3 e0 D* M- e4 ^
   └── SystemCfg.h+ h( {  L" g) q- n; S1 o( l! w
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。$ X3 ]* |2 X1 f5 v

& T7 S0 J/ c% M: @' L, S./makefile, }) N2 u3 O  y
" s# L" N. u+ u! @" `0 N! D
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
" F) r4 `. n  _ 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
9 j: t( I1 L! q. P! [2 i 3 . ~: p! k" j7 D  W
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi) O1 D0 Y! s6 l7 S9 V5 ]
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
$ u* K% t* ^7 @ 6
* x& [9 @0 C6 `5 ?: Q% L 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50# j+ Y+ }: o% C& W* o$ a9 s
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
0 l4 n* T. _  Q1 A* T: p4 W) | 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
) o: e# ^4 ?7 f* \2 P! }, T10
) j; C  z3 j8 {% K# H1 K$ b11 export SYSLINK_INSTALL_DIR      \8 Q$ O- ^6 Q) V& t  r4 i+ {. `, v
12        IPC_INSTALL_DIR          \, E5 d6 k) a9 |( ^
13        BIOS_INSTALL_DIR         \( }; t$ l* M. Q
14        XDC_INSTALL_DIR          \2 n; `3 c  F  ?
15        CGT_C674_ELF_INSTALL_DIR \" W$ j, J$ `. W+ `& g( K# R
16        CGT_ARM_PREFIX
3 N/ ~6 i! }1 B17 : \$ a1 X+ W* g" E; U. g( u5 [  ?
18 all:8 B+ J$ Q8 o/ q( G. ?
19     make -C host all
% K4 }. d5 {7 j' m& x; a4 q4 v; f20     make -C dsp all5 S5 [. D+ K" N. J, E
21
6 _9 E+ T$ ~* b# ]" J6 A0 ]22 clean::2 B+ O  _' q+ H: V3 {3 z/ p
23     make -C host clean& x* |+ c. ]* ?
24     make -C dsp clean3 G4 v. d+ I# ^4 D; L! g1 d
./dsp/makefile
' }7 B4 m: G. E6 j% t
$ L1 @; w( A& \* I* [7 I  d 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
+ l7 h" U, z5 |5 S/ M 2 objs = $(patsubst %.c,%.oe674,$(srcs))6 P/ x. K2 Z& {
3 libs = configuro/linker.cmd  B+ M" o& M( \2 L
4
3 B9 F4 p( k1 {  z; K# L& i 5 all: configuro/linker.cmd
$ M3 N$ e1 h% G' z: ~ 6     make server_dsp.xe674
) Q4 ]; r% i  i( z1 e+ d 7 ; O, {! A" w9 ?% v& X: n
8 server_dsp.xe674: $(objs) $(libs)
& Y3 B" W  K! |, s9 k2 b7 J, Y 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
! b& H& l/ p; R5 V' b+ ]10 . I. B% c6 O; O3 w; {
11 %.oe674: %.h2 b- `' a. u+ n' n0 K* ~! M5 k0 R
12 %.oe674: %.c5 t1 k! b7 j' G* J$ p9 H8 A
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<9 U1 K2 @) o  K
14   c% P7 }" O6 b3 C
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
+ ^% e- u$ S1 o- `16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \/ w+ z9 x/ G3 l5 c  |# m& T: ?. k# ?
17             xdc.tools.configuro -o configuro                        \
6 X3 |7 p2 q' s0 I5 K18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
( S7 W2 C3 p1 O% S' Q( K1 {! E19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \' [3 e) X" T. q; y" g% w9 L$ `& H- w. {2 h
20             -r release Dsp.cfg
( |- h9 u8 ]0 q0 u8 W- @$ X0 j21
8 l  ?1 D. L1 Z( U) V22 clean::
5 T1 @. k0 M9 D' U6 R23     rm -rf configuro *.oe674  *.map server_dsp.xe674
9 m  W) v& f/ i  W/ X, Q! E24 8 k+ L2 x1 D5 W. r8 E$ [* K
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
% F: n/ p. ~  `0 f9 W0 r26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages3 f) S8 c# x2 u6 O1 T' [5 A
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages# G6 F2 K) _: Y; M4 H; K
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages+ i+ l* w) F4 k) B0 \' C, b% Z
29 " ^3 P" X  B1 p, H
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)# ], n# o/ n: ^9 K9 C0 ]- M" z1 B
31
. r. M+ Z, |, J* X; h4 ^32 CC = $(CGTOOLS)/bin/cl6x -c                         $ S, R3 l7 J9 Y/ l3 q
33 AR = $(CGTOOLS)/bin/ar6x rq0 [8 O9 E7 b1 k- i. d- A) T  ~
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi" y7 I2 o) |$ G" }; x
35 ST = $(CGTOOLS)/bin/strip6x
- Y& G& n1 n- k36
6 x+ G, g9 B+ z, u* Z3 f* F37 CPPFLAGS =
/ }* t0 k) y. S% j8 [38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)  D2 e7 V8 F% w. R" j( P. F; ~* Q4 C
39
" S7 a6 T; }) k( D- a! W40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
" w+ D* ?* `: J& d, r, [+ A, M41
1 ?! x( }' m% C& G, p: g8 p( ^% u42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
$ r! O2 {& h8 W6 T+ u0 a% K43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
9 u( `. _  I) V( A0 j0 P- a$ N./host/makefile; \2 e* S& q; `/ S; {+ J4 G7 {

5 U+ w# {8 }. i. s, z. E, ^ 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
4 o; s) j# k( |' Y. g4 o. S 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
1 N2 T: P& @1 E( G6 n* q 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
4 m7 c1 G9 s- J  b) k6 D1 V 4
2 {( r0 d5 R/ G0 s+ p 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))% q  Z9 C( e; T. Q8 S& S
6 ( a) R+ ]! |* N
7 all:/ [0 V" @% c: w( B6 E
8     $(MAKE) app_host
" d, M+ X# s' g7 j# y' p 9
8 \' ^) L$ I6 i& i" e10 clean::
  b$ X7 R& [5 M7 Y11     rm *.ov5T* *.map app_host8 V3 k9 v; M& g% ]7 g( I
12
0 J/ E, Z' M+ y& \# T13 app_host(objs) $(libs)
% n, W8 X) P; ]4 @) K( e14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
, _9 e, Z. X9 l9 m# B9 W1 b15 0 q4 E5 @5 K! z1 W1 o
16 %.ov5T: %.c- u8 R+ {$ f- \" L& |: J: Z
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<  P3 u) ~4 ]& {  p
18
; o" e( {5 f0 J/ L* l# V19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t; |7 l1 C6 O; e1 c
20 AR = $(CGT_ARM_PREFIX)ar cr* i2 Z, t' G$ b4 w9 ^8 \* x/ }
21 LD = $(CGT_ARM_PREFIX)gcc) N- C, @( n! d- V# z' i: W
22
# @* L5 Y# x3 D7 B8 ]  q! s23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
& Q4 r# q0 f$ r4 a24            -Dxdc_target_types__=gnu/targets/arm/std.h' |& G1 l$ F: a* R, A& p: ~0 t: K
25 # }: L; {2 N. k$ V7 m2 ?
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
) {1 d/ }, Z4 ^% T- E, L& u27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
9 ]+ {0 d8 j" G# n; `28          -I $(BIOS_INSTALL_DIR)/packages                           \
. O. o& F* ^2 ^! C/ n29          -I $(IPC_INSTALL_DIR)/packages
( e  T! U" k: L3 b: a- j* q30 9 x# A6 E0 r7 G% M# a( d
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
3 W% \" P! ~1 H% O) _6 x32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序, A" |& j8 C  n4 P. X
编译工程
$ K" O9 b' a. `! U- P/ s; M  Y& l* @; s$ B; C
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。( e4 g% p, ]% d- Q2 e
; s/ G. t" h0 d. r
运行工程
2 {. k/ P  K$ U& P4 ?
, i5 E( s( z" t' L- p7 A0 H 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。0 e/ w+ ]/ t4 J0 z. C( l' R# p1 l

- e( K; B) l; A8 j1 E& n1. insmod syslink.ko                    # 加载 syslink 内核模块
: C/ U& A9 f+ S" J: N2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
8 E4 N: x" ]: B7 ^3. arm_app                              # 运行 ARM 端程序3 Y5 }/ |& \9 i* c% X
4. slaveloader shutdown DSP             # 停止 DSP 端程序
: Z2 u4 A5 _% p+ ] sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
7 I5 M3 a8 f3 x: G) p8 D0 J9 l 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。0 d9 D) o- {9 X, U
, o/ L, v3 o+ k6 U
1 #!/bin/sh' \/ {4 U2 v$ X0 o4 R2 K$ n. }. T* @
2
; i4 y9 T& X& `" Z! B' C# l" [1 R 3 set -x
4 }; ^7 X' c  i" K0 o0 h 4 ! @' ^4 B, A# `, a0 T; K; z) {1 T- Q
5 insmod syslink.ko4 V* C. s" @: j7 o+ u; _) x
6
! @6 W- H. G$ t! V4 F 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674$ g% [% ~! ^( U/ d, J' k
8
" A- a  x# O4 m3 b# A: `- x 9 ../host/app_host DSP& D. L/ c0 N- k2 d0 b$ `
10
: c. G0 n. X  X- M- B7 O11 ./slaveloader shutdown DSP
1 ~; W0 o+ G& C+ U
8 c5 H5 R3 \6 |9 T+ R/ Q% b+ O
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
7 N" t" Q2 O; d建立工程
, P& y0 c4 b2 P' {! M" t6 ^- w, y8 ]0 `0 e
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
$ p4 G# o7 y3 I3 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( @0 U6 ~) n4 @1 m
建立工程4 R& e5 {( i# E# ]+ B' e
8 t- s2 j5 d& \) b
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

) R' y9 K# U, G2 P7 `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% R! p2 c& v' t. a) }
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

) O0 x9 s" z6 Q6 Bdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 17:59 , Processed in 0.042494 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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