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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5915|回复: 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 U! a( k$ {& c! L, I6 O, odsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
8 J+ d( I; l' O7 B3 V3 j* L' z
7 m: r) D( L' g% Z/ P' c8 `' O  x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?/ R0 f% }/ q+ {7 @  L7 `3 Q
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
3 T! J" F% v6 E, D5 ^* b* p& K, j7 T4 ^' Q# {
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
* {$ ^) |9 q* ^, n! }9 [ 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
2 ?8 B& b, t3 g7 Q “清理”过的例程的源码如下:
- G2 M5 E8 Y$ k  m2 }, A4 v
- [/ I6 v4 ^. Z  A( P2 V  F1 q9 x├── dsp
6 C+ s8 i6 O  K. g  D1 g1 |3 Q. a' M│   ├── Dsp.cfg( ~  Y' e8 s; c
│   ├── main_dsp.c9 N/ R9 @/ R" f4 @
│   ├── Server.c: J9 U" Y; }( I+ h' K& X
│   └── Server.h( x$ {0 m) C8 _3 v) V7 ^
├── host
' @- c4 M3 B7 |│   ├── App.c
3 d# t' X6 x* i; S; _2 s7 M│   ├── App.h) w- I/ a2 V/ R; x  M
│   └── main_host.c
. s1 q  v, b8 W7 y" }└── shared6 M" ]8 H! D5 W0 V7 S( E( X% c0 f: r# V
   ├── config.bld
0 C5 c- z$ k1 z8 }/ h8 Q   └── SystemCfg.h
/ v& H; z* R( o9 e  P4 K 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。) o* W' l8 _  Z

! w4 o+ f  l6 l  q1 G7 x./makefile
+ w. r% C) y: r4 a5 t6 [2 A7 X
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_052 t9 M/ b2 k$ a8 j0 b. R+ a1 i
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_151 c8 o3 _9 p0 {4 f+ K  z
3 : p9 k) M& h9 W9 \! K5 o
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
7 Y" g/ \; B" t* `! w  c 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
; s) M  z- |  J2 g! Z8 i 6 4 m" f# p3 J) `3 @- b$ s" m
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
" P7 P7 Z9 t- r5 E 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
: v; \* E# f  [4 F" K7 d$ |6 t 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
$ @8 g( k; k5 Q, k% V5 D- p4 t' ^10 . [0 K( h7 y+ y2 P/ v0 t
11 export SYSLINK_INSTALL_DIR      \
  z0 ?4 g- t4 a4 U$ H, ~12        IPC_INSTALL_DIR          \
) X2 r7 C& E2 {/ }4 ]+ @4 n" _13        BIOS_INSTALL_DIR         \
% |' h7 Y( F+ z5 K; S- r14        XDC_INSTALL_DIR          \1 K8 ?% i- A* b# \
15        CGT_C674_ELF_INSTALL_DIR \0 O/ ?$ O0 ^( ]! y+ G
16        CGT_ARM_PREFIX* g1 p2 W4 X. [; t& L3 L+ D- Z0 @
17 / Z9 q+ Q+ c* Q# w1 I: [' n
18 all:
" O  J' g) [/ M- |, S19     make -C host all; Z; {, r6 j1 W) ^
20     make -C dsp all0 V2 P: q/ I0 |' ^6 a3 \: }
21
7 C6 V- h7 [# W: k7 |* t+ j4 Q22 clean::* e4 _' j5 U) x4 h
23     make -C host clean' z7 i) ]/ H) t; S* x
24     make -C dsp clean
9 }2 H. v  A; ?% Z  L./dsp/makefile
; a. Y. C: [* R7 @9 M, O2 O9 T5 o& t: N' X% `0 K
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件" M: [6 m6 z: n: T
2 objs = $(patsubst %.c,%.oe674,$(srcs))
# C4 d$ S1 R! G" m) v" a' K 3 libs = configuro/linker.cmd
/ M+ ~% T/ ]  G 4 5 Y/ r# Y) f& b+ M8 m2 o* q  e) `  x
5 all: configuro/linker.cmd6 j/ C$ ]. T8 t
6     make server_dsp.xe674
6 Q& K. p/ N+ M1 W7 @ 7 1 c5 R; ]" i3 a# U$ J
8 server_dsp.xe674: $(objs) $(libs)
, c! q7 A' G1 @( x  ]4 @# D 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
& m/ [+ h! ^- N6 _+ R1 B10 . I/ I. l% H; J1 E9 X; [
11 %.oe674: %.h
! g; L# V2 \$ y$ K. k3 g/ ~( h12 %.oe674: %.c
2 G* w6 Z4 `6 B% C3 c* Q: Z, o13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
9 o8 b, i/ c8 d6 s$ O14 5 F2 ?1 u* i$ Z' f8 [! P3 a
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
1 z) q- F  b6 @( m16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \, U5 F0 u2 F, ~& Y/ D0 A
17             xdc.tools.configuro -o configuro                        \2 `8 v- x: A- A$ A
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
) y' y) z, H* |19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
! o2 ^5 |8 J. J7 @6 X20             -r release Dsp.cfg
' P# h1 _. l9 S7 V/ I2 K! n21
/ E4 L4 }* F0 {5 B  L22 clean::, D' h, @  U! k, `9 d& T) m+ ?
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
6 C) N: b+ F& l& @8 @( R% x( E24 . }( R2 v# H9 u5 X
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
2 H* [' d* ~  H" X* S& i9 Y26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages4 `6 Z4 x* |1 U4 O7 r  B/ a8 j
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
3 y" {  ?' E4 H. J28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages1 G6 Z0 k3 s# j; v5 `4 h" d" X
29   F  i" y" @) U; P
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
; Y0 D# q. N; j0 p9 i. @% F; K31
  |) \2 T2 C. N7 B5 ]) i% a: W32 CC = $(CGTOOLS)/bin/cl6x -c                         " j( o  I! U, Y) B/ h5 H  ~
33 AR = $(CGTOOLS)/bin/ar6x rq/ d# p0 V9 \: S* F" b) u& M
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi; p: s  U6 A- L* n) A. J1 N! h
35 ST = $(CGTOOLS)/bin/strip6x
# }* j3 p# ]6 \3 z8 x36
. k  i7 [- K+ f7 }0 n37 CPPFLAGS =2 n1 A3 i4 ~+ t7 s% R6 y
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)& i: t( o% F, h, u9 @
39
$ q5 {' u, ^2 _9 Y  O6 Y  J40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
5 X$ z% `. z8 [0 t6 W* a41 0 k$ k: h- Z- h9 O& k7 K$ ?
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
( N" @' k+ ~. W" @. ]; D- u! R+ [. L43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. @7 _0 R+ t( J  ?  j2 S1 P3 d- B. u./host/makefile
5 T6 J# x% l9 O1 V7 q- D% V  j- Q1 e% t% e) s  I
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件- [1 m+ P& @5 _- X2 Z
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
6 `8 K& N5 L' B' t7 ?2 M( w 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug; Z( {5 ]* C6 a$ d7 j5 X4 w/ A
4 % o  v! |0 W3 x% I0 i( S+ I
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))8 _, W% i5 ~5 t9 X& J7 \$ m
6 % m* c2 x2 v2 n% Z4 c
7 all:
$ D+ \% i7 }  E( u1 o* U/ O7 ~! Q3 f 8     $(MAKE) app_host. ?; J- N3 ]+ Y$ I" u6 J
9   A9 ]6 i! z0 B) c5 E1 |
10 clean::
' j+ l: v% f! D11     rm *.ov5T* *.map app_host
0 x  O' X# M- Y- Y" |6 b" W! H12 . c- X- n$ l# x8 T
13 app_host(objs) $(libs)' g4 x) E. n& R# f
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)! U7 G9 ~: `; ?* {" U- C
15
/ s0 |9 o1 |  p16 %.ov5T: %.c
. u* M2 U7 |6 ~$ I! x17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
) o3 d" {) c; m( G9 m18
  w  e8 n1 _: l. ]* x9 N19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
6 A" `- [) c% X' U4 ~+ V20 AR = $(CGT_ARM_PREFIX)ar cr8 j8 P' N# n) x* @$ w; y3 D* d
21 LD = $(CGT_ARM_PREFIX)gcc( n/ {1 m+ X) p$ ]  U5 u$ q
22
: X/ p5 E9 K. Z! G23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \5 K$ \3 x, H; e$ [4 q5 m  h
24            -Dxdc_target_types__=gnu/targets/arm/std.h
/ {* P  q' d0 y5 @( T/ b25
. ?! ?. ?& P# _7 Q% }7 J4 N$ Y26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径- p- E( D; N: W, {7 v! ]4 ?
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \# D/ v+ g& x( q5 r5 G. h
28          -I $(BIOS_INSTALL_DIR)/packages                           \6 J. z2 o& B3 s5 s1 o
29          -I $(IPC_INSTALL_DIR)/packages
& V3 x6 B6 w) P, {7 o& W30
3 P5 U! g( c+ j9 Q7 x# ?0 N31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
% W/ L( N- g" |& u9 n% ^: O( |: M32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. V7 g6 q8 }# s% X编译工程9 D5 u5 z( i2 b0 `' J5 m

& K+ q+ c7 y+ ?5 }7 j makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。" W3 R; i/ t" L6 {2 [

+ H3 t; f3 X& A/ y运行工程$ b1 p) w: E3 Q8 ^7 K7 u  d
' ]6 e& y- v. D0 ^# J
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。3 T1 D7 d9 g5 B: ]4 d' J

# g+ Q# c" }4 b% q" r1. insmod syslink.ko                    # 加载 syslink 内核模块
: y2 _9 n$ \6 @1 S1 G  g2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
- Z1 C& c3 {3 V4 A4 X# H7 l$ W3. arm_app                              # 运行 ARM 端程序
- `& x5 q1 j: L8 B4. slaveloader shutdown DSP             # 停止 DSP 端程序# w3 g2 m0 |5 W% t4 a* }
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 2 d) Q2 R, h, U0 l% G& C# w# N# R
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
8 _# X9 z6 ~3 ?, `. w% Q4 n; q3 @) Y* L& t$ j
1 #!/bin/sh
- o+ \5 m. R- {5 S- O3 u3 X9 ]3 R 2 9 K" ?0 @4 {" C
3 set -x
7 u( k% F* ]( K/ J/ |$ G  X 4
! T, X( J+ e3 v' X2 O! Q 5 insmod syslink.ko
" F: G8 p4 H8 I7 x 6
+ B' e; O# i( U0 L4 b& y 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6745 f+ r: @* k" [+ a9 m8 Y* Z
8
0 e% h' G( {/ e8 b' r% x 9 ../host/app_host DSP
; G1 ~! c" D+ E) k5 d9 z7 V+ v  l10
& W% {  [0 s" |- e5 u0 R! d9 T11 ./slaveloader shutdown DSP
& p1 k0 W3 Q+ p2 [' l9 T7 i; J3 y) H3 a8 P" K0 s' o& u0 o1 @7 v  ?% P
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
: u  t+ n3 I# j* I建立工程# ~" ^4 P" g4 \  |

' a6 k7 W; T8 d 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
" f; O# a' u5 r! R# p/ N+ N1 l
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:053 g7 _- N# G! y* Y8 j1 f" m, B
建立工程
7 z) K3 _% q( c2 O
/ X! k: e, n2 f% e 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
1 X- i4 e- W- Y! O6 y2 a! R
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, D$ t% h  }9 Q8 Z! l$ w
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
9 T9 H  }- K  R$ s* Z
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 13:05 , Processed in 0.041756 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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