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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5779|回复: 6

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
发表于 2014-9-19 08:25:34 | 显示全部楼层 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
0 y6 r" r6 x% k, udsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
8 U- ^. `. x7 }# y' z9 ]7 n: e1 ~" c1 w# D" Y
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
 楼主| 发表于 2014-9-22 09:33:09 | 显示全部楼层
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
" @3 t0 B9 a% `
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
发表于 2014-9-19 18:05:57 | 显示全部楼层
建立工程
9 _" P  e4 c5 b8 k- Z9 S/ t
9 \4 ]' V3 t: c0 G; {% q 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
$ h% I# {* E( N! t) y5 O; a 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。/ Z2 s( o5 O+ I9 Q4 ~: A8 x
 “清理”过的例程的源码如下:
" c% q2 M, E" {7 \0 |; u
+ R4 |+ m/ [+ r0 o; M├── dsp
& d9 d& z6 }  Y1 C9 H- |0 {│   ├── Dsp.cfg* X4 k/ p' P/ O( a. h5 r
│   ├── main_dsp.c- c1 X& f+ E4 E0 {  O
│   ├── Server.c
$ B7 Q; q) w! n3 {  |$ g8 B! S+ w, A│   └── Server.h3 I  A3 P, @  Q0 Q/ Y6 E0 `* q4 |
├── host
: ]7 z  Q: c" L5 v* s│   ├── App.c
) O! d4 E  j! L# s! l) P│   ├── App.h" S: b; y+ u  J9 [$ z5 o. V$ i
│   └── main_host.c
0 i1 [1 O& ~8 Y0 ^4 q0 b└── shared
% e8 p( a1 @# C1 L3 O  n8 @   ├── config.bld$ l8 ]# }4 h( |# e/ P) @! E
   └── SystemCfg.h
# y$ X" H' l; S 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
9 m7 h9 _8 X, m5 l2 a/ f& U+ C1 M! N5 P' V& s& v9 _
./makefile; P) Q% I  b5 A- _0 ^6 F8 A
, H0 A" `: w/ D
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
. L1 [' G' Z0 p: J5 j1 L! Q+ d 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15$ W& A7 b: n" Y6 @+ d+ y
3 7 D9 W: u" }$ B* E7 w( W! N
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
% p* f+ I- a6 k5 o" S 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
6 [2 e3 s: j' w$ _% o 6   h8 I# t( b% {' E1 l( f
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50; ]5 q% F2 m1 b, c9 }& _
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72% k- T6 |' M. ]/ c1 M1 s
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4: l7 ~' u# t' S
10 " r0 m9 e. V7 I; a; o
11 export SYSLINK_INSTALL_DIR      \
' `/ _' M: X/ ~% D* Q& z+ A* J& }12        IPC_INSTALL_DIR          \/ _" a0 {& `5 J: N' I
13        BIOS_INSTALL_DIR         \& j. H, m9 P& t  ^
14        XDC_INSTALL_DIR          \
( ?& D1 c7 [! [15        CGT_C674_ELF_INSTALL_DIR \
. M' u$ {% N  v* E8 s  H' a5 i16        CGT_ARM_PREFIX! G. f& b; ~1 s
17
+ C" k- c- O0 K9 m! n18 all:% F+ @3 W' b+ O( {& v
19     make -C host all4 r8 z" y* h# |# Z/ L7 x6 R$ m1 D
20     make -C dsp all$ Q% A8 Q) _' v. Z. M2 I
21 3 e. l1 N1 m0 m
22 clean::+ L; _3 b7 C5 I
23     make -C host clean
- B6 @- t. q3 Z) k2 w24     make -C dsp clean2 m0 |+ M+ }. L) Y( V( U7 d
./dsp/makefile
9 i$ }! q2 M) H7 q6 `8 E" T, w1 ^1 ^, }+ V! _, \
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件2 S3 R$ \, f2 h$ O' B9 ^* r8 ^
2 objs = $(patsubst %.c,%.oe674,$(srcs))4 x8 J* `$ x4 G/ ]8 X
3 libs = configuro/linker.cmd
- w1 V7 j& s; u1 x- P1 o$ S 4 . m6 }6 r2 e/ e9 B
5 all: configuro/linker.cmd
  L# v; ?" I* }2 a 6     make server_dsp.xe674
8 N% W9 t* p- k+ `  Y- J2 h 7
9 K8 R1 @% ~/ Y5 ^1 o& D 8 server_dsp.xe674: $(objs) $(libs)% x) }- ]8 l  Q% y! }' R: Q$ |
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
. N+ m# r. y5 M10
! S* o' w) p; E11 %.oe674: %.h
. f- i/ j* a7 o6 a12 %.oe674: %.c
# p. M$ c' B0 z% `0 Q9 y0 ?- E. M13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<6 T: @8 g4 E. e8 X
14 ( T2 @+ q" i  ^( `- C
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld( y, _/ q3 @4 }/ x0 f, C# K
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
6 o- s) T- Y8 i# x& e17             xdc.tools.configuro -o configuro                        \# J4 `! v. w5 F2 a# @! s
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
% D0 u- Y0 I  j; ~2 [2 A* r" e19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \! x4 B9 N+ v) |6 x: g4 |, P- W
20             -r release Dsp.cfg: c) m# J1 H: \
21 - Y( d% E& D) T
22 clean::- G7 a; K5 C  H: }/ C
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
$ h; O( U( x" B. |24
3 |* |- I3 I6 f25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages$ J  l3 X/ T3 g3 z
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
; ~: [; `6 f7 c) H- i4 `27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages% {6 ?# a( R! N# ~4 W
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages  E9 X- h' E. [! B$ d. n
29 ) v: K+ ]6 a% p
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
; D. {: k' c& Q3 Z31
, O( Y6 Q; X$ S7 C( e* X2 a, T. i- A) |32 CC = $(CGTOOLS)/bin/cl6x -c                         " z. ?) w  X) o1 d+ ~: ]* j9 Z
33 AR = $(CGTOOLS)/bin/ar6x rq
4 j+ Z! E; a& I; h; d! x; Q* Q6 o34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
+ i3 H: @9 p1 F35 ST = $(CGTOOLS)/bin/strip6x4 {2 q% \* T& U4 c6 i" w* B
36
/ N8 V$ A0 h8 p4 t$ @% l37 CPPFLAGS =2 G3 M8 `" q' M: t& L5 x% L/ k
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
! o, R0 e: x. Y/ H' k# Z/ ?39 1 ~, E8 p' I* \  Y( c9 i7 K
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)% d3 B5 h  y! X
41 " q, ^' R- e+ d; N3 [
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     1 G9 H& r# E, j
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序7 l1 u3 D/ J+ F
./host/makefile6 z+ t# p: ]1 V4 C. ?

  {8 h7 j  d% S1 d/ o6 C 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件$ E. U" ]8 B; ?! B7 h; A) w" a! h* O
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
/ A* n$ p! F+ Q( H7 K 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug* T$ I! w  s. S  X
4
' C, C3 D5 |7 u. g' G$ l4 o% | 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
7 Q$ \9 g  ^/ q# ^' c5 m% e; U, M 6
" |  }9 b/ l+ h  O 7 all:
' ^) ~. \% ]' f# b 8     $(MAKE) app_host" x8 m6 v7 Z- ~- V  I) a& l
9
* W$ a' C& @+ S% h10 clean::) M) ^' Q0 H$ ~7 W, }/ Q3 K& ?5 ^( Y
11     rm *.ov5T* *.map app_host
$ J1 e8 Y+ N4 f% |12
3 t- t- l, t: A8 w  I13 app_host(objs) $(libs)5 }" @9 T  E$ Z( X7 n; H. r" j
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
" l  Q+ {/ q$ a4 y8 ~( l15
# T" ]5 E$ i0 T, n! o' i16 %.ov5T: %.c+ F, y  {0 L$ S$ O- a
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
& Y! F4 Y  Y/ \8 H' a* z+ e1 A18 ' l% Y" |- y) e( ^* Z
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
. Y! X5 {1 S4 {6 w# [% n20 AR = $(CGT_ARM_PREFIX)ar cr0 v2 N$ ]( e& c+ n
21 LD = $(CGT_ARM_PREFIX)gcc' B1 V  x$ \6 s6 o  ^
22 / v9 Y0 p7 B( w6 a$ h+ F1 ^
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
1 H% Q: b3 b0 u$ J24            -Dxdc_target_types__=gnu/targets/arm/std.h1 a6 L: s; A' D6 n$ F# k) _
25
! Y2 Q: O; F" G" f! `) T, @4 _! a26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
3 j% h4 i0 R4 ^  q27          -I $(SYSLINK_INSTALL_DIR)/packages                        \. P' B  O) Q0 ^* X
28          -I $(BIOS_INSTALL_DIR)/packages                           \
& X2 w# q' C/ S7 g# A8 W/ [7 ?) u29          -I $(IPC_INSTALL_DIR)/packages; c) f( f, Z8 b% O1 K# \. \6 V
30
: o* z- o  A4 w1 c8 D: ^3 |* P$ K5 }* f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map2 D1 p9 r/ a6 |  o3 f: ]- v& H- D
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& Q' t" b( c% l( O; T7 a9 P) r
编译工程$ P; ^" w3 \0 M/ L" J

# {) V. w% Y6 R1 C( I2 c2 p makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
  c! i8 ^5 a# b# [2 ~) U5 a; }* K9 _# l, X8 n
运行工程
- E- @; {3 T: i+ u
: u4 V+ |/ M0 U, O$ r 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
2 z" b2 _! f  D+ U! _, D* W  |
' z3 a, |9 ~+ }, q  {; b3 w+ z6 M' j1. insmod syslink.ko                    # 加载 syslink 内核模块2 c0 P7 |9 Z: @" w8 p/ {0 P) a
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
: M, T( c" J" b  c3. arm_app                              # 运行 ARM 端程序
. U& t8 d7 O% m4. slaveloader shutdown DSP             # 停止 DSP 端程序
3 [1 f* j4 R* T( s) O  \ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
+ U# B& d' e: H) g: _: [ 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。7 E# A6 l1 \0 k/ o# A2 @. P

2 {3 o6 Y7 N; q* \4 } 1 #!/bin/sh
$ _0 G6 P: U, ~5 M 2 - u% ~& ~" o4 V. T
3 set -x# b, P' Q- `  M9 a* C
4 4 L6 n3 N. C' n
5 insmod syslink.ko
3 d+ c) s0 \- V9 U 6
+ J7 h8 B1 a4 B5 i9 C  l 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
# x9 J: Q. c' N4 ~5 i9 d 8
5 i* r+ c6 w/ g" z9 w 9 ../host/app_host DSP
; _$ L5 _, j, y  u+ ^10
& C3 S& `2 T9 F- u# o11 ./slaveloader shutdown DSP
- L% g. i8 G  U% d
/ E- T" C, V$ g" O- [. i# \
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
发表于 2016-6-15 16:39:56 | 显示全部楼层
tenny 发表于 2014-9-19 18:05
: J2 ?" L, E7 U建立工程2 ]- |/ W* I& T1 R. G" M1 A7 V

4 Y6 J7 Q' }8 w 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

; M6 [5 r$ ~0 m& ?( G  O, N3 [slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
发表于 2016-6-15 16:40:40 | 显示全部楼层
tenny 发表于 2014-9-19 18:05
; c* _  e) i1 h6 a' b) ?' ^建立工程; U5 j, c6 K8 C3 ~  |4 E

& e, S8 I) a, j2 ]1 ]9 ~2 o' M 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
* w  U  E7 O4 x" n) O  s+ x# e
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
发表于 2016-6-16 08:49:17 | 显示全部楼层
执行 make 编译
回复 支持 反对

使用道具 举报

0

主题

113

帖子

2015

积分

创龙

Rank: 8Rank: 8

积分
2015
发表于 2016-6-21 16:59:08 | 显示全部楼层
zxbdlv 发表于 2016-6-15 16:40
; m" k. I( ?  _slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

1 U( P4 {9 b3 a; Ndsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 21:23 , Processed in 0.044486 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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