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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,4 m$ f* Y( N$ B! B
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
# B8 x5 ~" ^* p, o. v  `/ X: v' L/ c  P0 n( h6 X1 M2 M' H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

113

帖子

2122

积分

创龙

Rank: 8Rank: 8

积分
2122
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
6 j0 n0 ?& t* l/ i$ b, B+ C6 E7 Jslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

! }- L# _# A" pdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:05" ]7 g) Z: a  o1 ~7 ]& D2 r
建立工程
5 q4 V! Y) l' W, l( ^
0 d/ m$ L, Q) C# q" u$ m) Z 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
' i- n, f5 A1 l4 d
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
' S$ ]3 v: ^2 w, _建立工程
" Q& }% _: ~& ]
# P# I9 g* a" _  {; X# @) I/ \$ E) G 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

% y8 c3 y" u* L, m( s! w- {$ b- `slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程+ [7 K' ]4 ]9 T1 [1 O" C- Y
  e5 B/ W0 r4 ~3 K5 ]
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
5 a% K5 ^& [; |- n# K 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。  R1 i  R: P1 \! e! `
 “清理”过的例程的源码如下:3 ]7 p$ P- |& c* @. a
* y3 Q; I% I2 t8 s0 ?  ?
├── dsp" u0 I1 M& u9 H* t
│   ├── Dsp.cfg
& U7 o( r3 V+ ?% S& m. B1 w* x│   ├── main_dsp.c  I3 T; d2 E% a: \
│   ├── Server.c2 I! o. ?6 `# Q
│   └── Server.h0 X2 e7 m9 o: v
├── host
( N- a+ z" q; g│   ├── App.c
; ^- L+ ^. Z/ E$ `5 {9 }$ r│   ├── App.h
3 z; X; u0 M5 u% k│   └── main_host.c
! A- p' Q- l! D5 a! ^0 Q5 n└── shared4 V! B" \/ R7 Y8 V: n: @7 i# g2 P
   ├── config.bld, l( J5 v- M/ Q4 B) J8 T; W3 t
   └── SystemCfg.h* `* @1 [1 a  I) ]6 B  ?! i
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。# R( M5 |9 i# g, O" ~
3 F' v- K$ ?$ h) h! \
./makefile5 G& k4 o& \2 r0 N4 O; Q& R# p
& N/ {! \" c5 i, L
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
% H- D4 [: q* Q 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15- F. {8 x0 ?' l6 M' a1 W5 H/ \5 v2 w
3
+ |0 `* B* d" V& B; @, l' n) W' u 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
; b7 r. ?; ?# G. b 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-1 s) |- `$ M$ R6 y! u% X2 l
6 / J- w$ R4 M1 Y, y  ^. D
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_503 K3 q, X  m3 y: Q
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
% p0 u" t" X1 d( V* } 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4: U! A+ R* C) \- {3 s9 @* w
10 3 c$ ^0 k" B( o: ]; Q
11 export SYSLINK_INSTALL_DIR      \
/ t3 Y: S$ Z. {) i  Y: Z12        IPC_INSTALL_DIR          \1 }$ k+ u: I- T( u% ^  J8 O
13        BIOS_INSTALL_DIR         \% W$ F7 S* b6 G4 @& D2 z" ?
14        XDC_INSTALL_DIR          \. I7 T/ z" W# g$ M
15        CGT_C674_ELF_INSTALL_DIR \+ I7 J7 w3 x6 y/ [& R1 C5 B
16        CGT_ARM_PREFIX
* T* b# u$ r. L1 l3 I, v" M3 f17 7 A- y7 }& x/ u4 p/ r% `& Z
18 all:
9 W/ h4 l( [5 x; L; v1 N. |5 q19     make -C host all! O) D9 P+ d6 p/ j/ M
20     make -C dsp all' s# ]% D  P- \: ?
21 : I4 o4 s2 [2 ^; S' a/ _5 `. d) {
22 clean::* q* K+ e# g4 Y& u
23     make -C host clean
9 H6 I. w* }9 U9 X8 N& q" T$ w24     make -C dsp clean
8 W1 u( N# ~6 c+ L! @  Q+ T, ~- s./dsp/makefile1 O4 ?7 s* p* g2 c0 Y8 w1 b( A
8 a; j$ H. v- P4 K/ A$ n
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
' P3 u4 O3 t5 L% i( U$ O( i 2 objs = $(patsubst %.c,%.oe674,$(srcs))
$ k0 R: U0 i% v7 L1 c 3 libs = configuro/linker.cmd1 f* C0 E0 B8 L
4
1 ^8 ]4 ^5 C* v7 Q" | 5 all: configuro/linker.cmd
& ~" p6 d+ Y6 h$ f; X2 x* W 6     make server_dsp.xe674
, K, x2 z! v4 u# o  W6 H 7
0 u$ }/ E# P$ z2 i6 C 8 server_dsp.xe674: $(objs) $(libs)* ~; l. B0 Q2 K6 B# F; Y
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
; v: ^5 s3 K! {# A4 \10 8 c4 ]4 E% y+ q2 s/ y
11 %.oe674: %.h
) Y  _: ?4 ~/ ~12 %.oe674: %.c
2 J5 c$ [7 ~  e& C& T3 J+ ?13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<7 @% G4 @- H) U( _- b
14 3 H/ [% l- }+ _" o, W
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
8 \* [, {9 G4 Z6 G6 M4 U! n16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \9 @9 `, ?% x% c+ w3 q# Q9 J# |4 F2 @
17             xdc.tools.configuro -o configuro                        \
/ x9 @( q- F  [) O18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \; K+ N4 X' E3 b
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \5 t; e$ o- K8 X# O" Y
20             -r release Dsp.cfg
# G" g6 ?1 W; L' p$ \( l% |21 3 h7 @7 b5 e+ b! j; y' A
22 clean::& S# ?! U& h" U9 o, z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674& B) w- X1 t4 ~0 D  ]/ ^, b) k
24
. H0 t: K) [+ U+ D* o# R. B25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
- O" t7 a( B3 x26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages- m+ C8 Q5 W2 A+ h5 f9 e
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages% |- G' F" i, L# v2 J; G4 e: s
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages2 s1 Z0 }! [$ |& t  ]
29 1 l, ], x* m- a1 P$ g8 \' q" P+ z
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
" D2 ]1 G3 R2 x! t/ l9 u' e% }31
  _$ g' p" D$ p" W& y( B4 T0 \  `32 CC = $(CGTOOLS)/bin/cl6x -c                        
5 T8 z" \. t4 E  Z  u+ e0 f, ?33 AR = $(CGTOOLS)/bin/ar6x rq
7 P+ D  z( g. n/ R. o; e! I" u7 W34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
5 T3 Q. T& f- K% D2 v5 h35 ST = $(CGTOOLS)/bin/strip6x8 P* S$ B( o' @. O. X" t
36
3 v( G0 q% N! A9 e! i, W" i7 p37 CPPFLAGS =. `7 h  |3 [" z( L2 @* _7 U$ n
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
. c' l# M3 f: B* C0 B39 / |7 M  [, u! A. g" ], T2 ?
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
# E% V9 c/ P! n2 X9 _+ C  t41 + y% B, K, G- |/ ~4 h6 Z* S' q
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
/ H) T" `# w# H$ Q: T; J" p# @43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& l% G! b3 \; ^+ P  W% l. W( I& _
./host/makefile
6 R- o/ d* c; {
& X; ^5 v  o( A: m/ p( _ 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件% m9 d/ f1 b; N
2 objs = $(patsubst %.c,%.ov5T,$(srcs))4 I# s2 ~9 r) e: ]4 F6 R
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug, u9 w, u7 o! g* }6 `+ I& S) `
4
- y, M4 a. q3 g/ E  { 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)), D  E  V4 `4 {7 |
6
+ \6 T+ v8 z& \! b( ]8 u 7 all:
1 K/ k2 a/ @7 l6 A9 l. ~4 Y 8     $(MAKE) app_host% X4 N; z5 l1 M  D' K$ N6 K
9 * m  ?! C' B3 N0 O7 R" g) e
10 clean::4 R2 _6 X$ l7 Z5 m) k' y/ X1 r
11     rm *.ov5T* *.map app_host$ }6 t0 a2 G) i! U& `' n/ P) A2 |1 A
12
! n; f2 Q3 O4 z5 {& F1 g& ~13 app_host(objs) $(libs)
- H+ G6 W- g" V- \4 ?. D1 i) ~14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS); l1 g' _3 T+ r4 ?: _
15
: Z, w+ A/ K1 X) ?16 %.ov5T: %.c3 j2 b! _! Y- M( ]# E9 O9 e0 _) h
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
9 Y6 B2 |; B; ?9 ?- x18
+ f* Y! l' ^' n1 e) G19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t3 ^# V' J" {- X( h4 G) R
20 AR = $(CGT_ARM_PREFIX)ar cr
- U$ _! m! Q4 @! _; I21 LD = $(CGT_ARM_PREFIX)gcc
+ Y+ @4 a/ c9 {9 `' l6 H# O* p2 S22 0 q4 ~7 C2 t/ x, J/ ], Z6 D* |
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \1 I" G8 X+ G. V0 e; Y* U' [2 Z. V/ C
24            -Dxdc_target_types__=gnu/targets/arm/std.h6 K) x. k0 \) B
25
7 m" j, W) v) a2 G/ Q7 |5 q26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
+ t, c: `" z- D6 K2 d27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
* t6 w% X. E5 x4 k9 q28          -I $(BIOS_INSTALL_DIR)/packages                           \
# k, P. g, D. V, S29          -I $(IPC_INSTALL_DIR)/packages% D# e3 Z( z, ^4 p8 t* X7 J0 u* ^: |
30 8 w6 ?. o: y6 d& z  o
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map  v) h( D* J; M4 B5 o
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
# V! m5 V2 r# L3 z. G编译工程
5 G$ `! h9 W0 Q( G" i9 s; k5 B
4 ?' Q" b' L+ B: s makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
$ p/ ~! |# r9 n3 C
& ?% N/ m/ M/ y! Y3 v" J  t2 f运行工程: _/ |7 M/ S/ @% L1 z

+ U3 e4 I* P( H8 ] 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
6 m  Y5 u: d, x$ @2 \( ?4 m! H) S/ p$ T' C! w
1. insmod syslink.ko                    # 加载 syslink 内核模块; U6 V6 q0 n% C  I
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序8 V; R- r' q9 j( \
3. arm_app                              # 运行 ARM 端程序
+ t% i! o) B- n- ]1 f& j4 e4. slaveloader shutdown DSP             # 停止 DSP 端程序
5 N. e& y6 S. ~# V9 F6 @" K8 S2 a sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 9 M" g+ S3 \  @9 g, v; M
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
9 z- ?2 O) W* Q2 q# b) E# a3 S3 T3 w: v. X
1 #!/bin/sh! C. L2 g' {+ h' i! S" c" ?& {  ]
2
, I" X/ M9 z& z6 G 3 set -x
. u% X3 J  M; }$ H 4
# \2 x8 g/ K2 ^) g6 P2 @ 5 insmod syslink.ko
. D# Y; k4 f; N+ W 6 - `  T- M  C; P. d+ A% |5 g) M3 Z/ y
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
5 @: p. e! t8 z/ | 8 ( y2 c: z6 F& {$ U
9 ../host/app_host DSP7 i* Q. d& a" ~
10 , A- T+ p' |8 d2 u
11 ./slaveloader shutdown DSP
/ Z/ T/ J' x! B; [: r, c1 J, @/ e! F  X% q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 17:06 , Processed in 0.049855 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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