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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
' m* f" V: {  }2 P. `* z6 cdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。8 n) h  c* _% |( V

% r- {' f9 j; ~! V% ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程+ R+ N$ o( W/ D7 f. ]# c
7 P; \( e1 s/ B% S0 }. e' a
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
" [& l4 Z& W; Z6 y2 {: e3 v 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。$ H! q6 s( B: I# W  w; F
 “清理”过的例程的源码如下:
5 @1 Z- D0 S) V- ?/ \# F
$ O) G( b% W! M0 m1 L├── dsp
, y" ~' E8 f0 t& i9 ]│   ├── Dsp.cfg
/ G) l+ Z. p0 e│   ├── main_dsp.c
8 ^5 e; O/ k  d│   ├── Server.c
- X4 [! @9 Z# i- H* ?' J0 K3 d│   └── Server.h
' P6 t4 q( d& [3 ^" G  t9 k: X├── host
6 p+ L- j% j4 b' ~! n5 C! F1 G│   ├── App.c& n8 C' ~7 B/ o5 N! J, b; b
│   ├── App.h
4 C, D1 z3 `7 x; C% ?$ E& c│   └── main_host.c
# ^" h! F& L8 m+ S% A└── shared
$ y9 K% S; X! n   ├── config.bld( j4 }- }( O: w% P. }' s
   └── SystemCfg.h
' D4 }$ `# {# J3 L( d0 V- S# h 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
& s0 z' b* o8 _6 h/ K% {" w3 w' O! Y- i
./makefile. Q( ~( f4 A& [& O
7 j' Z6 {: U. j' E. N  z$ ~
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05" V* A* h" ~. `# _" V" K0 E1 J
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
4 B# b- W4 n$ I' T 3 . u) {5 y, I- \- k  |' T
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
; ^5 b, q: q% z+ U) ^ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
8 `: t2 K7 j7 Q2 f2 a( |/ D 6
; r3 j$ p' r. c6 s0 S9 W5 _ 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50. Y! X3 v* |0 q5 B0 b! z, N$ A1 m9 m
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
% R" b( \7 v; e 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.43 K% X/ K% G4 v7 C! E
10 - J: y# H, K9 E; [) v5 P
11 export SYSLINK_INSTALL_DIR      \5 B) {' j( c" Z8 a( X: {1 `
12        IPC_INSTALL_DIR          \
1 p3 R9 b. p3 j- F13        BIOS_INSTALL_DIR         \, H$ c  e0 e  J) u
14        XDC_INSTALL_DIR          \
. W; w$ T6 M6 u3 G" G$ J15        CGT_C674_ELF_INSTALL_DIR \
& o8 S3 b# s9 F* i, h. R16        CGT_ARM_PREFIX
% k! w* }/ y) b8 u& R/ j17
' @5 k% M" n% L" w; K18 all:3 I+ ?  H0 w: S) ^3 L6 r
19     make -C host all' ^" h; P1 v2 N  T
20     make -C dsp all
' |& v0 J- B2 F21 : Z; C4 O9 _2 m) {& e* b9 m+ o
22 clean::
! b$ z3 l9 {' Q23     make -C host clean7 [8 Q  B9 ~$ k
24     make -C dsp clean
# t2 u' `" E: C+ l7 ~./dsp/makefile( f1 ^# w8 C1 e+ \* G  ~+ P! T6 m

! C4 i! L! _+ k8 c& D8 _7 d7 x 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
7 C4 }* y; `( [3 u8 ]* M! J; W 2 objs = $(patsubst %.c,%.oe674,$(srcs))+ |# S6 T2 s; n" o3 ~$ M4 o
3 libs = configuro/linker.cmd1 ?+ I$ E$ ?* w* ?0 c
4 4 O% r: q! t. g" a  o; [1 h
5 all: configuro/linker.cmd2 L9 j5 S  Y- [2 f5 @5 ]- @
6     make server_dsp.xe674  ^# z, Z3 B" ~
7 / M! G9 ^3 D# E! F& Y+ p' n+ C
8 server_dsp.xe674: $(objs) $(libs)" O7 T) ^: D. z% v
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS). C( j, K8 k2 J4 v! X* M" m' J
10
% N3 I8 [& ^2 W# k11 %.oe674: %.h
  E; M, O6 }" F12 %.oe674: %.c
( P4 m7 T& S! H. t! Y13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
8 e% p8 q: N5 K1 W: F: v" Q14 & U! v) a6 U, a1 z6 @
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
9 \8 H1 W+ N: P( k4 P7 z16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \; k- Q( L5 `, |4 L! d
17             xdc.tools.configuro -o configuro                        \$ @1 T) H, H# [7 e
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \6 i  A. Q. l9 B' z
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
& m6 r3 ~# ~$ x20             -r release Dsp.cfg
  b7 r8 h3 X0 G$ B  ^" j! P! s21
8 f2 Y1 J- J. R22 clean::! \, G/ z4 D+ E$ v, a1 v; Q8 o
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
- g1 \/ X# [4 b! l& N24 / P' s8 S1 ]$ x, p
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages. E3 y# M4 d8 K
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages. u; B& Q& O9 Q' ]6 n: _
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages3 n7 {+ K: B% m! y; B7 ?/ M. b
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages9 v' S( \2 U5 u0 W6 ]
29
% g% c% F/ B$ H; O3 v1 w2 ]# q30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)- {, u3 J# G( S# ~
31 $ e2 c- ?$ R8 T/ \& |0 v6 u
32 CC = $(CGTOOLS)/bin/cl6x -c                         ) }% ^. x( e- v  l) W8 y
33 AR = $(CGTOOLS)/bin/ar6x rq0 s5 M& M+ ?( X2 }, \+ Q# i3 ?
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
0 q' y, ~- ]3 J  Z+ _+ a, C35 ST = $(CGTOOLS)/bin/strip6x
  N4 R' B4 Q- |36
4 b' T: Y1 d+ @2 r& G37 CPPFLAGS =
* K8 e% I5 {6 x' Y38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)# {! N: H7 K& \/ o
39 % @- c9 \2 w, n2 V' e
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
6 d2 b* V# z* k41 " l% ?3 H5 P. D! x  B
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
2 D2 a4 p7 m, g) g* y! A4 H43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  M. `! a7 ^9 d5 r6 T5 Q
./host/makefile
% T# t' E& {- X% I/ T* A1 ~1 Z+ R/ G& Z
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件) n9 r; `  u6 q" B
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
% p& `0 Y  N/ l5 A1 ~; w8 e 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug. g" X; F! b! c& n0 Z% V
4 - L9 b. _) u" P6 \
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))7 }2 t9 J  g2 L8 c; u
6 7 ^9 g* J" t- X4 u# H0 g( A
7 all:
: Z/ [) o7 M6 M' y  p2 x 8     $(MAKE) app_host3 o: y/ u# o$ C7 g4 w. k
9
& c+ T% g3 x! E- ^# P10 clean::
, R/ {4 P! P) Q; p6 U; l! B) z11     rm *.ov5T* *.map app_host/ o' j( g/ H' A' t
12
+ h1 [- }( B/ O% J* Q6 J13 app_host(objs) $(libs)' U( j2 W& g0 j+ l# W* J
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+ _2 g$ {: {5 E; c8 V+ S15
- E# {- H# B$ ^! U' d* W( D16 %.ov5T: %.c
0 s( H# P5 E. x& ]% \; `17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<* F* k0 C% o8 j
18 ) p% i+ m( q# d* I0 v# [
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
7 L; f8 ]: i& p. X) |  K4 x20 AR = $(CGT_ARM_PREFIX)ar cr
' b: z$ ]  e, _: G. s21 LD = $(CGT_ARM_PREFIX)gcc
* ?, S* N9 J; E* e! M22 1 J  Y  t2 N" g, s* {; f% m
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \6 {5 v( ^' h' U9 G% `
24            -Dxdc_target_types__=gnu/targets/arm/std.h
. ~( K/ ?7 i6 p+ Q% s$ y$ H7 o/ c25
7 R7 I: L) q- V" ?/ k- u26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径. ~2 c4 \) {4 U  L( n6 O  A9 a
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
* t+ o% Z( I5 Q/ V) m! }7 k0 u9 o28          -I $(BIOS_INSTALL_DIR)/packages                           \
! K; T7 b6 C( L- ]' A0 k% ^29          -I $(IPC_INSTALL_DIR)/packages5 \1 ?5 M; [/ ~8 V' O6 t9 K; q# o. ^
30 * _9 [0 t; q" e1 b
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map2 T+ p7 q; [: ~
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
  I/ l: B5 t6 D$ w' z编译工程
1 |3 y$ l! R, p1 F  U2 F7 U6 T' H/ x: G3 i& j2 N5 Z1 j, ]
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。) w# k& `" a( m* o; N8 d

6 d/ h; Z1 y" @' ^  S" r7 q1 {运行工程
) U9 ]" d; u, j  }0 Y+ }! A5 h
. I2 \4 p6 Y& j; t0 m; O2 I 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。* N" D, F4 W# X, M% L; {

# |  T, k. F% m5 M% D) S1. insmod syslink.ko                    # 加载 syslink 内核模块
' ?% @8 Q- {$ Y6 r) h! s2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序7 i3 x1 h5 ?# z! t% T
3. arm_app                              # 运行 ARM 端程序
1 C' B3 T7 e2 e4. slaveloader shutdown DSP             # 停止 DSP 端程序$ d: P7 m# k1 ]
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 . J# f( z* T8 g% d( a* {9 z0 E
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
; Y9 v7 @+ h( l: h: p3 `# Y
8 y) ~  d! k. l7 D6 s3 M) `: }+ w( h 1 #!/bin/sh
/ L! m+ M( B+ n, r 2 3 t( |0 l& F5 C9 D$ Y8 N- z1 s
3 set -x
  E: x- U8 V0 |1 c& R3 r& ` 4
: i' ?; C/ v' x. v 5 insmod syslink.ko
% J1 C! o: W9 @4 l' k$ H 6
4 h7 q% x+ f2 N 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674  ^+ I+ ^) ?! e
8 # j9 \, Z; k% v& d, B, ^
9 ../host/app_host DSP, \- D& v  i; W$ c
10
5 }. l2 u, y. b) j# N11 ./slaveloader shutdown DSP
( s+ L( i* |" t7 ^: Q  b5 [1 U. [7 j
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
3 t) W8 W8 \+ e2 j1 G建立工程( f! y. F5 d$ j; {

$ T( l2 Z9 A7 D6 P 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

7 R) j) b( A  ?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. r% l' @( L0 L
建立工程
; I9 x, A. J& l4 h& [
6 X* f9 B( j7 A7 w2 ~' w9 n; X3 P5 H 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

' c5 O- u: T3 m9 A% nslaveloader 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:405 m% B/ P1 k! i' j
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

) j% s+ j* c4 i) x# vdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 02:59 , Processed in 0.063757 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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