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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,3 F& Z; Y4 O5 r1 [& b, s
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
' {1 M8 S$ i6 Q& c) t3 s
. z3 w3 A3 B* [& k, n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?3 ?6 f; z% ^/ r1 N: |* ~
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程0 E( X- L4 H: b0 i% _
- {6 ]6 _- E% n) p( I
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。- d, F' e, }+ k. h
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
; b; ~5 z7 h3 } “清理”过的例程的源码如下:
# h! D+ k# `7 i( ?: i# p8 y$ L( r  v) o0 f2 B  f2 L( ?
├── dsp
, r5 q" x( L) k* s* Q8 {, A5 N, a% y│   ├── Dsp.cfg' F' N; D9 x8 d5 Q
│   ├── main_dsp.c
* ~' @  ?4 [; s4 _- x/ I+ q│   ├── Server.c
' N6 [" d" G* h7 `8 `│   └── Server.h! u: D" Y% K+ l9 T+ w& i
├── host
. p8 b5 c8 M5 E+ c% o│   ├── App.c
& e' P! v% F. }. J1 Y│   ├── App.h
6 s3 t% Q0 {# }0 z3 j│   └── main_host.c* c; s! c0 R2 C, K- L
└── shared( }- x/ O3 C) E
   ├── config.bld; M# N, D$ v- o: C- {! T
   └── SystemCfg.h
) ]2 U% o- G. S9 J1 _ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
" d. u+ ?7 u- }: V5 j# ]
0 U8 W+ b4 ~3 v! V5 f4 L./makefile
0 h7 @. S# @4 y0 v0 n1 o  s1 e& N( u9 N( n1 i# c2 @/ u9 `& v) M! ~
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
, _6 q( _' B( Y6 t/ V: G. E0 X 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_156 q" [2 g5 g! R& d  p
3
( C' ^1 `# b2 ?) x 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi7 s. y* b. H8 T7 P
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
( w5 |% b" F# t- g 6
  M8 g4 Z7 A; Y( B7 a 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
  A" ?' J+ U5 I& I1 s" T. ] 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
, L/ V  c: g6 ]/ O7 d, N) Z$ y+ c4 J 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
- p: F$ }0 b4 ^8 P10 4 ?  s9 `: f9 ~
11 export SYSLINK_INSTALL_DIR      \
% _! x5 ?# G# `6 _7 i6 e' W12        IPC_INSTALL_DIR          \) T5 B; U/ K& x, n" s9 o- ?
13        BIOS_INSTALL_DIR         \
  `9 P  q$ e6 j8 J4 a! i14        XDC_INSTALL_DIR          \
6 h  Y  U1 P! w15        CGT_C674_ELF_INSTALL_DIR \
' y' C, ~& l0 ?9 Y& P" s16        CGT_ARM_PREFIX+ I' B% z6 }2 F( _
17 + l1 i# h' R# J
18 all:
: Y% t, b" V6 h. a' D' ~  U: l) `/ P19     make -C host all
" h5 S& n9 q3 t3 k20     make -C dsp all
% o. x5 n; L) e) W/ \21 / M% Q3 \  A0 `+ K: S
22 clean::
7 ^9 o2 H7 }7 X4 v23     make -C host clean) n: m  `% a! F2 v
24     make -C dsp clean
- n/ R# \2 ]6 X' Y* e7 m./dsp/makefile
  ~5 L2 T5 k8 d& G) v7 Y! w! y
: b' r, L$ f7 ~0 _ 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件' m5 P! @& Y" ]) `! q" M1 Z
2 objs = $(patsubst %.c,%.oe674,$(srcs)). }, i3 b9 B& e# b  I) I7 U4 j
3 libs = configuro/linker.cmd
9 T4 D: E/ q0 _) }2 J9 e; i 4
; ]3 ?: `7 c+ T2 I% S  t' z 5 all: configuro/linker.cmd2 W; {+ I% M3 q8 \. a
6     make server_dsp.xe674
6 f5 u! _6 m8 y3 \# X 7
7 N) O2 {( S5 C 8 server_dsp.xe674: $(objs) $(libs)8 P2 x" X: o- e/ l8 W, f
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)! h7 O* v- d* U* t2 z+ }; t. I
10 $ P* H- h' b( ^! R
11 %.oe674: %.h
$ e) r' C2 h  ^" i5 @12 %.oe674: %.c$ M, w% p% o& u  ^# G6 d5 W% e
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
  M' q; Z5 w7 j9 N14 , ]& }; q( _$ ?" M8 X
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
8 S* ~" o+ H- p5 T' w& [. u; v16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
4 `0 R- h$ l# ]) g6 r17             xdc.tools.configuro -o configuro                        \
  r5 ?) Z1 n3 h. T18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
. B3 G; i+ h4 Q0 N! q19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
  K. B1 k* x: v20             -r release Dsp.cfg# D. C" ]# C5 D# z' r3 B( p- q
21 ; k9 ]8 y- M+ H; X( H5 G. N1 e- w
22 clean::
9 c+ a8 }. D$ n* P23     rm -rf configuro *.oe674  *.map server_dsp.xe674
$ h  h4 k  L; R0 {24
4 X5 i( E' Y  c$ b( l9 Q: r) S25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages5 g  \) d/ n" c& y1 D
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
! n% Y& `" X2 s: e5 n* ~$ \( Z27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages- l0 a: F7 c8 C
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages1 u4 ~% [. a: m- w2 w
29
8 B& l0 |* `7 y0 }( x# Y8 Q% U30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR): ]; \0 v8 h! q% y" M
31 , Z- @8 |& b% G5 B/ }/ I4 x
32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 u7 ~* K# \3 N+ b! ]  g33 AR = $(CGTOOLS)/bin/ar6x rq6 O* G% v: }# k/ e; l0 j
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
  w. V# v  I3 }: s* S0 T. E0 e; s35 ST = $(CGTOOLS)/bin/strip6x
9 Q3 k2 t1 n9 R# o- i0 F' p9 o36
' a7 r0 Z0 u! I37 CPPFLAGS =! b7 M5 s5 w7 S
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
2 y) B+ S3 A9 _4 ?39 : L9 m1 q" Y* ], t+ i
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt). s0 B9 [4 u& v2 l
41 7 d' A$ T, r% o
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     , X# ~' M3 n& Q. Y3 s8 v
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序4 H+ Y9 k, @* ]
./host/makefile
+ ~: d% \8 h6 ~. `8 M% u! q6 f) u5 ~, U! _- S/ ?  i' M
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件2 R+ I( T8 z% a: h% B% b$ x7 r
2 objs = $(patsubst %.c,%.ov5T,$(srcs))1 c* d1 z4 V/ R  H: }/ z
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug# U' L( [( }( {3 q' e  K
4
, M2 S! d% t* B( d 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))1 u+ S: O- l; Y
6 7 b# F5 G% o0 {0 j  n$ V  k
7 all:
0 P  s, `1 ]* K 8     $(MAKE) app_host
2 O3 X6 ]$ M$ E* n: t 9
. Y8 z, y5 x# w4 X# p10 clean::
  C3 q7 K* z, o8 @11     rm *.ov5T* *.map app_host
: ?0 `3 w1 e4 p5 [1 i12
& |. u8 b- l( x. V" \13 app_host(objs) $(libs)
+ b: _) \, @8 g# @! u& f% T14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)0 J) i+ Y1 X8 B2 D
15 3 k7 o* M" i9 D* F& \
16 %.ov5T: %.c
9 P* ]1 M1 T0 W2 Z* K* t* d17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<% o5 @- T1 P: |+ C
18
0 D  O; E( L! L' b/ O19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t8 L( ?7 a& w# u1 w
20 AR = $(CGT_ARM_PREFIX)ar cr) i* A+ R/ U: J
21 LD = $(CGT_ARM_PREFIX)gcc. B/ v+ \  f6 A; h# G5 x0 R
22 * ~% @) w; y$ \: l7 Z+ ]; w
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \2 N/ {7 V# g5 i6 l8 x9 Y/ A, g- u
24            -Dxdc_target_types__=gnu/targets/arm/std.h
' [( n# Q. `  v& S+ g, n" u# H25 # W2 m, O  c+ J, G# E9 g
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
( Q) }3 M- P5 g. \3 i27          -I $(SYSLINK_INSTALL_DIR)/packages                        \" X. ]/ R* J* [* @) y2 p, a" l
28          -I $(BIOS_INSTALL_DIR)/packages                           \
* U3 E2 m# T6 g# J3 k' w29          -I $(IPC_INSTALL_DIR)/packages& f0 {' t2 y. z% ^
30
% S+ g: j4 @6 t, c9 i31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map; @/ T- j7 c7 P1 r: Q  L# _
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序/ o" u9 ]9 _7 c7 ~
编译工程
, ]+ G! I% R) d6 C" c4 u
8 z/ F9 c; x. b$ T makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
3 l' |  M- K; w
9 C9 }6 `$ B7 ?- c9 [/ Z运行工程5 \- ?4 J* d+ j' x! S1 d$ Z. C

* v  e; B1 O6 @  I 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
2 c) D" h. ^  n; ^
# b" o) v& I! [' E: B1. insmod syslink.ko                    # 加载 syslink 内核模块
$ w: h$ n  O+ |$ P$ S+ I1 b; X  ~; T2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序5 A9 Z9 ]$ \$ H
3. arm_app                              # 运行 ARM 端程序) |: A( G5 b1 _
4. slaveloader shutdown DSP             # 停止 DSP 端程序7 K( @! M0 ~, h" l8 [, d* h
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 6 G+ L$ i. a. A3 s
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
4 L  Y2 ~1 T$ u: y" k
+ r' ]) w0 h0 Y/ [5 L/ T4 Y1 C+ l 1 #!/bin/sh
7 Q2 P' j  f; K& u* H( l) m8 t 2 ( o/ U6 G. W" i) v8 X) h
3 set -x
" @5 h( H1 {6 {% w1 h 4 - M3 u: P$ f" n2 C
5 insmod syslink.ko5 g( G" f' d9 c, ]
6
% R; I, f' n0 W5 J/ X" W 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6747 }# I8 N* g+ q7 z6 P$ Y8 R
8 8 `8 C. l  H' y6 D( |7 S
9 ../host/app_host DSP
- ^+ S+ u# s9 }1 Z5 \; a10
" W; L8 P8 m: i" v+ Z# E11 ./slaveloader shutdown DSP! Z# V8 f6 w2 A$ F# |0 B- K

; u" E2 b- V6 q8 C2 a  z4 E; j
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
2 b( U  L  M. A; U建立工程6 |1 n$ y5 K5 s4 B2 X; O
: z" g3 U* ?3 _' G' o! Q  W+ k3 }
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

/ \- [1 C9 X0 S2 G0 x) A. Mslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:056 b  M6 l9 A- H$ i, ]
建立工程6 b. |9 |( p: H* @0 c
0 I$ ]% c' g- u8 B/ J: f) G
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
. I' v# @7 c. M# T
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2027

积分

创龙

Rank: 8Rank: 8

积分
2027
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
3 ?& q  G% W; W  W' Y! b: Rslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

' D3 T; p6 H, I6 Q* udsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 00:16 , Processed in 0.044735 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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