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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,/ ]1 Z: O: m% T
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
0 Z, v/ W% E: a# l
  \/ ?! Q" Q. o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程/ \1 I# R- a) S
/ X5 q0 ]+ l1 A% ?* K
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。: T/ X, Y6 H7 |$ e  y: Y$ R
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。" M- ~% P4 U8 h$ c
 “清理”过的例程的源码如下:) ]2 O1 h; @$ _% u6 a
0 C+ d7 F6 J6 i
├── dsp+ @  @( n4 O. Z6 Q2 l) F  l2 B
│   ├── Dsp.cfg% J) L# }7 F8 r0 g) v- d
│   ├── main_dsp.c2 [, k8 G) s. _
│   ├── Server.c2 P/ F* ?" r/ @4 d8 ~+ ?% Y
│   └── Server.h
6 N" G: Y% N  C- A* k├── host, H  v0 ~8 Y+ P* r) o7 ?
│   ├── App.c5 h. L! g$ b- f5 c5 ^, {
│   ├── App.h, D; M* V! h! h* ?2 Y( b0 Z, }
│   └── main_host.c
" J! _; u, _  W  m9 T& Z. b0 F└── shared% x' M& C5 s* `7 w, b
   ├── config.bld
. V/ t1 g- N7 M5 `4 F: Y3 K& P   └── SystemCfg.h7 j, `0 A! X6 j3 M8 ^. e' p5 N
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。& `" F% c$ C3 K2 b5 ?* G, M

9 o' |) p" K  Z5 F/ a9 ?./makefile
2 v$ I% g: C: }$ Y8 v( X  Z2 j- U, r
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
5 |0 |1 j) i; T% P 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
$ n& ?1 s: F6 ^: r4 c  v/ k 3 $ {" i4 X: {0 }5 P. T
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi% H: R+ d' E( X( [/ Q$ _, N
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
1 n& @* s8 O4 b' d3 V7 w 6
0 t6 i& x) ~) u/ m 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50# w; {) `0 h+ r
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
0 S$ [' L  @: T/ }8 h  m- | 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4: U- p6 n  O  v0 X: X6 V) n
10 " {! W2 L; C, X. C) K
11 export SYSLINK_INSTALL_DIR      \
* @* q, {& c% {1 }- ?% H12        IPC_INSTALL_DIR          \6 C4 N: v( C; f# X  j" e' y' ?& h
13        BIOS_INSTALL_DIR         \
6 e5 [; i% X$ P! f( [) ^7 `14        XDC_INSTALL_DIR          \) J- {7 D/ [2 b: |
15        CGT_C674_ELF_INSTALL_DIR \7 |9 \" R- f. S
16        CGT_ARM_PREFIX4 ^2 A, `% q3 u" p7 ]
17
- V. M: A: w. n. J% k18 all:' R1 e& T: |* U9 r! Q( F5 p
19     make -C host all
; b: N" n# m( Z* ^" C$ c) F20     make -C dsp all  x2 P7 ?7 A5 U2 `
21 ! ~4 H" p6 r" v, o( ~+ @
22 clean::& O% q1 J' W; V: o: x
23     make -C host clean& `0 n& Q4 m; Z' K5 Y! h& [( A
24     make -C dsp clean
) ?3 Q5 k0 e; ]3 y2 \" Q7 z./dsp/makefile
% z8 L+ }0 W2 P+ J9 c  c5 w9 [  H' ?3 x$ d& @: s
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
2 R; D8 D) f0 K/ R. o1 L 2 objs = $(patsubst %.c,%.oe674,$(srcs))3 k+ p) d- V6 h
3 libs = configuro/linker.cmd
  S8 M2 \9 H4 a8 a) W0 E; q5 r 4
; E8 i1 T" x+ E2 {- T 5 all: configuro/linker.cmd0 y$ _  Q; ~# d" r! s% T1 X$ g  |
6     make server_dsp.xe674, L1 ]/ ?& O, i
7 - j  Y0 P/ h/ k+ n' t8 j; F
8 server_dsp.xe674: $(objs) $(libs)8 R$ p4 \# D4 O
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
2 P9 I* Z0 n6 a9 e; f10
) W/ T$ Q0 o* n, w0 w11 %.oe674: %.h5 V6 |/ n; a- S
12 %.oe674: %.c
, \8 n) |# O" M& v% M8 T2 [13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<9 h( Y- `4 }( C5 G6 F
14 , {# J+ ]; \# n2 k/ {+ e8 Z
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
& U9 R* a; H( }16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \- T1 q, V. R9 {$ O/ s
17             xdc.tools.configuro -o configuro                        \
9 R7 T1 G/ \5 S9 ]7 L9 {  M18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \0 C" u8 o/ v+ G' e+ ~) C. O
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
# e" A" o8 I. K! t20             -r release Dsp.cfg- J& d: c% j: B7 M& ~( S
21 $ f3 U0 ]1 r0 A9 L& ]+ M4 V8 f
22 clean::
: y# A* F8 M! m4 J* @1 x8 c23     rm -rf configuro *.oe674  *.map server_dsp.xe674- S1 t( _& {) p7 L! a. m0 l: L
24 , m( f  w* W( T4 k3 |" o1 ?
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages8 d& y! p& z% u& f' H
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages$ T+ E8 A+ o! O& }) k4 A( b  W
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages& f3 r. c2 r' V3 D# V4 Q& A- ]* ^& s
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages/ U% n3 n4 u* x1 z
29 ( o9 q# m, z: ?% M( P$ {, X. x: I
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)# J- `) H, V' U! x8 B# r% H
31 ! k$ u6 f2 T$ A& L  y- E
32 CC = $(CGTOOLS)/bin/cl6x -c                        
6 B  P( C' x: K33 AR = $(CGTOOLS)/bin/ar6x rq* G( ~: x7 n8 j. R5 Z
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
, F' U+ a2 [: [  o, f- e35 ST = $(CGTOOLS)/bin/strip6x
# I1 T1 G- Q; Z- D: Y# p36
/ \% c; N3 r% N8 N) a37 CPPFLAGS =
- M9 ^, w: m" e* D3 b" y5 B; `38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
" j" J8 l+ q; h: Z; i39
/ L/ Z! }4 K/ V6 N( K1 z40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
! H; n4 o. w3 P( s2 M41 $ G$ F3 A8 A, Y
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     % r* T; v  q" e3 l$ x
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
" }4 o8 Y- a5 S; P6 r" h./host/makefile
  \' m" I; I! Q' M* a
' S" H4 I$ v- r4 @ 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
. N/ V  M) p. P% ` 2 objs = $(patsubst %.c,%.ov5T,$(srcs))- S& C  U6 c* \: n0 h8 r9 ~
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
: T- k6 |% t) F; P 4
5 |" E; Z6 ?6 D9 y) R 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
% {/ g! a( O6 ?% c 6
; A/ |; u, \3 B0 k" h8 r) e8 i 7 all:! o: x! |& ~  |4 c
8     $(MAKE) app_host
9 G& H5 A$ V" `# I$ _6 X0 W6 O 9
5 A# E( C9 |; }  K10 clean::$ Z$ j* q( c: _% l5 T4 ?
11     rm *.ov5T* *.map app_host
3 `* Q4 K1 L0 J3 `12
3 J- u' n3 T& B. s3 D* a! g5 }& L13 app_host(objs) $(libs)& X' p, z1 W% U9 z4 m' `, k
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)' B- q( N0 k: [8 S3 n0 ]6 R: `
15
, P' |' A# }5 p6 T16 %.ov5T: %.c
- r, }/ \: O5 k1 e8 \( S17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
6 p2 o. j2 ~/ [18 3 P* O" z" S$ T7 P; J
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t" S# l) I* k. V$ b* w
20 AR = $(CGT_ARM_PREFIX)ar cr
2 X* E3 l, c+ H1 Y1 ~- i9 |21 LD = $(CGT_ARM_PREFIX)gcc$ D4 [' N8 m1 x+ J2 E* ~; I/ T
22
% N+ I1 z2 c( u% c. I* b$ `9 c! h; F23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
' |8 ?, i5 A) \' A' C7 C' x' a- I3 h24            -Dxdc_target_types__=gnu/targets/arm/std.h
, x1 J) X7 ?* H25 7 [" @8 V: h+ F% r$ r
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
. L: B$ o5 q0 D27          -I $(SYSLINK_INSTALL_DIR)/packages                        \7 t) V; e* G" v: x
28          -I $(BIOS_INSTALL_DIR)/packages                           \# b( ^/ C7 x9 s: x/ k0 T
29          -I $(IPC_INSTALL_DIR)/packages
, k* _4 ]6 l6 M! V30
8 }& C$ ]+ I- \2 F31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
" W( T5 j0 Y( {9 k) i: V  {3 g7 X32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
4 x3 w# s1 D) ?0 i编译工程9 v- v  f# h9 o8 J  j( K

' i' L% L* E7 g9 u' o+ X makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。) m, H  b4 _" S* M+ E& l
9 r) L% t0 w" @5 @) ~$ p) f( g* }
运行工程0 y/ a& e1 k2 y* g6 Z7 @

- `) ?6 h: Z( O5 {2 V! j 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
8 q9 k* H; l: `7 f7 ~% W9 |5 F9 @2 H1 p0 T3 p
1. insmod syslink.ko                    # 加载 syslink 内核模块
: e7 n5 j1 E9 C2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
& J% i& C3 m  W: v% \% [6 C5 i# e' m3. arm_app                              # 运行 ARM 端程序1 Z- X6 Z3 V' _# M5 Y, ^, \1 N
4. slaveloader shutdown DSP             # 停止 DSP 端程序
4 V0 l' k" `% q! U9 E3 V9 d sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 " `. d9 `* A* R8 R0 z' N) L" S
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
' @! G- K) w8 z4 ^4 Z/ B# _
# H/ F6 {0 ?2 |3 }; N) K5 e) T 1 #!/bin/sh( Z" {0 U- O! I2 x
2
$ Y* G; X6 r- i/ |: T0 i 3 set -x# y3 v+ k1 a3 K. T) x
4
9 I: U& u7 m3 l, y7 r 5 insmod syslink.ko+ l# k8 P2 \, y7 a* w
6
0 B& Y: k6 O  n! r! f 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
/ m0 f5 |5 R$ o! m# q' H# _ 8
/ R* E7 {% @, k8 K4 _+ P& Q 9 ../host/app_host DSP
* r( K/ n+ X4 k7 k$ z10
1 V/ G; P1 \# D9 Y- W& E* Y11 ./slaveloader shutdown DSP% e4 Y( a" C& N9 G% F  Y
, l: a2 I  A+ N0 f4 Z, Y* X
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
7 j# i1 s/ N" S$ q建立工程
4 Y1 [  ~* @) b, k7 e9 {# n
9 ?' ?) e( A. w8 d: n- @. Z 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

* l* L+ m3 K1 t# A" D2 ]7 islaveloader 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
/ L" R0 l3 G  O建立工程
1 T5 k  F; ?! K& [/ |
* R" w, B( d: f5 l! l 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
/ ~5 @3 g7 I1 ?  A4 ]7 c
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! R2 S4 N- q! A4 F4 ~
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

' O+ D) J# {$ }7 I" {, _dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 08:49 , Processed in 0.044500 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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