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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
9 Z8 t4 P# V3 [, t/ @  n) ^& ^dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。5 O. u% H4 W% D4 F, c: q

9 J' u9 L# U4 u- _! [! T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程5 f0 P! P+ r9 ~* @2 w- L

! `7 n# Q: \4 g4 M- s& a5 `1 l# ]+ L: J: x 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
% g0 q0 P7 y8 z' Q 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。  n+ K7 l: `/ ^6 w
 “清理”过的例程的源码如下:
/ p7 D: N! I7 o: M$ R+ n# Q4 N+ l, M5 y- d0 U9 r# s
├── dsp! a5 ^+ @5 l3 h, o
│   ├── Dsp.cfg
2 Z+ Q$ K5 b5 Y+ e! L( p, m│   ├── main_dsp.c
" I7 v2 b# m, p7 X│   ├── Server.c
0 x- R5 h% N  x; g  w│   └── Server.h3 e. U3 j, N: i( }2 v
├── host/ H# W3 X  ?8 f' n
│   ├── App.c- z8 r1 |( ?4 S2 Z" X( L
│   ├── App.h$ o- s4 f$ \: K! a  O/ a& V
│   └── main_host.c
' ~9 @, G. |" a  E└── shared% a$ Z% p0 @4 N6 Q6 P
   ├── config.bld
# C5 B  E2 `+ I   └── SystemCfg.h/ I0 X) \& q8 _, v3 o$ M% C5 x5 @
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。8 V1 [0 ^. ]6 @, e' U. S9 c3 ?# N
/ x% {8 X& W* ], B* j
./makefile. K  w4 ]* I/ u1 o  w$ Q
1 F. K2 c7 W8 e) S
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
; b- U! R8 l/ Z6 X4 B1 W% U 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
# C: ~6 ^3 K1 a 3 ; G2 ~, i- Q6 f0 p. ^, V" m
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
# I$ ~" T9 ^0 w 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
& o; B- t; k2 _/ a! ^ 6
5 m3 O6 J9 ~4 ~0 ?4 y/ S 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_507 b; z5 z7 Q: E7 H5 u) E( I. ]
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72, s: \  T" [. R, [
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4* a7 b& i6 Y2 d, m& O
10
9 H8 H, [8 M7 o' h. `8 x) A11 export SYSLINK_INSTALL_DIR      \: d6 Z& Q" n: O; Q* r+ U
12        IPC_INSTALL_DIR          \
* r) m3 M" L; W- _9 k8 @% Y! z13        BIOS_INSTALL_DIR         \; V* E" a% m6 L2 Q5 F* o  ?2 M! l
14        XDC_INSTALL_DIR          \- m$ u; R5 s1 W6 u
15        CGT_C674_ELF_INSTALL_DIR \/ c% N/ z, }, T( \: z
16        CGT_ARM_PREFIX6 R# Y' K. }% F9 h( R
17 / r: t8 I' S  j
18 all:0 H  g( p: i; I4 s0 o
19     make -C host all
) h6 t0 U9 r+ Q0 W; i20     make -C dsp all
3 u5 H1 p; I' S3 E7 N3 d- G: a21   B; V# O0 H! E% _
22 clean::" V0 x+ T6 A( c$ L) C- ~
23     make -C host clean9 H, C& V9 ~+ V
24     make -C dsp clean% D! x1 p& `$ Z+ U
./dsp/makefile* }0 r0 P# A3 J" R( p% q
3 S$ n+ \, m% B, t
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件' u; s# p6 Z3 w+ B9 ~
2 objs = $(patsubst %.c,%.oe674,$(srcs))- _. P2 T* o" b4 f; F  f; ^6 J
3 libs = configuro/linker.cmd
* L/ c% A( k: @3 N5 c4 l5 w 4   _' B- d3 ~$ V: J
5 all: configuro/linker.cmd4 A8 b. F# u/ I. a. o
6     make server_dsp.xe674
: |! N* O+ s+ F8 |$ R+ w 7 8 d# m6 J+ n" ^/ r% a. b
8 server_dsp.xe674: $(objs) $(libs)
, O3 W* u4 x4 h: }# F+ Q7 D 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)- t) x6 V5 w4 E" ?' D6 u& X; T3 ]
10 - r2 w, [* \8 l! x1 r5 C4 o
11 %.oe674: %.h  m+ C3 o' K6 U4 \: ]5 p0 D
12 %.oe674: %.c
4 b( j: |8 P. G  L8 u/ b6 x( U4 i13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<' z$ ]7 a2 k6 s7 P0 d" p- Q
14 ) T1 C+ Z! L' o9 Q& }: T, T& {
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
- U7 ~9 ]- l. v. O6 D( G( m. `16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
* o9 ^4 g) \' W( F# I: M2 ?17             xdc.tools.configuro -o configuro                        \3 R0 H1 m7 a# D( \
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \0 `& ~3 \4 L! v* E
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
! y# c$ Y% k, E0 Q$ m" Q20             -r release Dsp.cfg: `4 b0 d! `" L
21
0 K% v3 k) r$ \, y$ T# j! V22 clean::! k# Y% M& U" A! B+ m3 _  W. `
23     rm -rf configuro *.oe674  *.map server_dsp.xe674/ r/ _4 C0 @1 d* P, G' j. I
24
  n- E9 Q! E, _- R; m$ P25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
! Q+ C% \3 n( p/ V% W/ t26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages2 O: M5 ~  [$ f* @8 w" ?
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages+ f/ _- \: l' o+ u# k. A
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
% Q1 z- a2 ^, S$ T  @7 n29
" T+ A- B0 F  K30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
5 K  k; |- B3 o31 # t/ ?6 \4 T) c- u
32 CC = $(CGTOOLS)/bin/cl6x -c                         ' s: Q, S, E! _3 U2 ~
33 AR = $(CGTOOLS)/bin/ar6x rq
6 e$ h) {. A8 T0 N, ?34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
3 U4 N6 u& v( |6 ^  w35 ST = $(CGTOOLS)/bin/strip6x
. V2 Q) i: I4 r- E36
6 o  v/ i0 _; v3 n6 `37 CPPFLAGS =
$ d3 k3 U/ S( {2 }7 L7 H38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)) L" t9 r4 G" G2 V/ Q8 ^
39
* E8 [, i+ @' j, }3 G$ e40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
# f& L/ A7 V9 b9 E. V( z: Y: C; ]% O41
* m9 a3 {# s. [' |" k8 M( N9 [1 k9 P42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
( K. N  t; A- S& p, L5 o  l3 C1 `43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
2 Z7 b% n3 ?- ]5 O  _5 a./host/makefile
9 y* F5 r& a8 m/ [. y, b0 |8 m3 \3 r* H
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件$ t5 t0 x. D7 c8 e+ e# o. T5 a. [
2 objs = $(patsubst %.c,%.ov5T,$(srcs))3 z6 a9 g' c7 G
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
9 {8 m; L! o, J: @ 4 $ q$ O3 h4 `% O& _
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
5 k3 l# o/ X% H) {  v. m( C& @) j 6 8 Y. C1 y# V. H2 s# R
7 all:
7 J5 K1 D$ t  q" R4 v. I 8     $(MAKE) app_host
9 ^2 Y0 V( [8 t9 K/ t8 u$ M 9
0 D$ u2 g7 ?% e8 J. p! `$ J10 clean::
4 B: Z, y- g2 g9 \5 b2 H11     rm *.ov5T* *.map app_host% P# c+ ?3 f5 \. P# `# Y3 H
12 " ~% s0 c( X1 |- h- J/ }/ f
13 app_host(objs) $(libs)! }& F: f2 I1 V+ a6 o8 c( m
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)  H3 n, M! Q" _$ F
15 4 A# i0 _! b* l1 X! Z6 ~8 P
16 %.ov5T: %.c1 e$ B; M* D2 N, O
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<3 r' e" D8 K. L, z
18 & G4 ]* z+ z4 a* V- j! K
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
7 K5 B8 D7 X& U8 }+ n20 AR = $(CGT_ARM_PREFIX)ar cr
$ @4 c& ~' U( [% m, X! x21 LD = $(CGT_ARM_PREFIX)gcc
: Z* P$ |6 F3 h$ R5 @$ v5 l22 / q! j8 j: ], `7 {1 ]& M- T: f
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \6 l2 J! s2 g7 ?
24            -Dxdc_target_types__=gnu/targets/arm/std.h
# A9 H0 [2 u% X% k8 c6 g25
5 g3 i, Y: e+ }, q4 M- m% p1 v! M26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
2 ?8 N4 O6 r5 d. E' D: M) T( K' A; Z* s27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
, s! U) q: e4 `9 d28          -I $(BIOS_INSTALL_DIR)/packages                           \2 X5 W: s3 H0 I8 c' Z; T% K
29          -I $(IPC_INSTALL_DIR)/packages  A- Q3 t7 R. a5 x* I
30
) a; c" _& S) ^) R31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
& Z/ `$ e2 x) {" \0 V32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序3 x4 w- ]1 \/ w
编译工程
$ l6 k( m) ~: {) f5 o
1 `% |) z' I+ [ makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
! e' m6 ^5 S8 }  a# Y. C: o. O5 `
运行工程
- q0 }$ H( k4 u! G; B9 E1 S0 F
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。: J" k, Z: z8 V' t4 `+ x+ v
% b) Z# o; q# R' T; f( x. `2 n
1. insmod syslink.ko                    # 加载 syslink 内核模块
, u/ ~0 V; s4 b5 x! J2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序. a' @/ i; O# \( t( _/ f
3. arm_app                              # 运行 ARM 端程序/ g" I- m' Q8 C
4. slaveloader shutdown DSP             # 停止 DSP 端程序
9 m* Z  p: J! w0 A2 } sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
) C1 C( D) ]9 ]2 S6 l1 N! b 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
6 g% |# k' e7 u$ Y
. y1 R( X! v- F5 a4 S5 s 1 #!/bin/sh/ D5 N8 l  U1 k, C2 w: \' g  F- _
2
: N3 X& P$ U5 a' n' K( \. M2 ^ 3 set -x  R; h6 R2 \6 C0 N1 u6 s
4
2 L9 Z# o! X  |5 b& X( g 5 insmod syslink.ko9 T# a; g# }0 T+ y. j) y. ?9 Z6 l
6 : T$ ^+ K2 n1 E1 G
7 ./slaveloader startup DSP ../dsp/server_dsp.xe6746 a, R3 K  a' ?
8
: w1 x: J7 Q6 J* { 9 ../host/app_host DSP6 J- B$ p6 s! {
10 - T  l0 z4 u2 ]" ?1 @6 K$ Y( w
11 ./slaveloader shutdown DSP
+ X7 h: J# X, n* V; c8 x3 F# u3 r$ \& `' G- ^' i
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05; h5 o) Y6 ?. r% ]% f/ e
建立工程
8 N# u, n& c& l  O) `( G7 \3 e0 h' D: f; q7 K7 m9 {
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

  j$ Q3 \2 y) _7 o$ d: ~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
+ E( i% s5 {* q8 j" e, y0 s) E# y& ?建立工程
( g6 a- U, m: @
1 m( [, N  a+ r 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
/ |( Y: T' I0 E& T" ^! 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

帖子

2144

积分

创龙

Rank: 8Rank: 8

积分
2144
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40; c6 P0 `: C8 q# q% S0 `& a4 R  s
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

4 T- L6 o. _; h- w7 z* H' _dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 02:04 , Processed in 0.089265 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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