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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
' S* E0 L/ b) J1 M- B, ?( adsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。. u$ q- ?8 V: B

8 \8 ~8 }" F- t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
# u; x4 n6 n9 j+ Q. o/ p
" ?- w1 `4 m7 W8 ~& x 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。9 r0 q3 N/ T7 W
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。: o" `: |- A/ Z% E
 “清理”过的例程的源码如下:2 D% s7 {! g( E
. k9 J; z2 u/ z6 x; t
├── dsp* m7 W- d8 @5 `. X8 z0 B
│   ├── Dsp.cfg
/ j7 y- @' p$ e2 S: A* c3 c2 a  J) M5 L│   ├── main_dsp.c
' z7 i( ]& c0 O5 ^$ X$ a' X│   ├── Server.c
; d) Q- }' b: [$ B/ s  L* z│   └── Server.h7 P2 H( i9 ]. a; [0 I
├── host$ Q5 Y! J5 B1 O& W
│   ├── App.c; Q6 U& q) e) P  m
│   ├── App.h
5 o8 A9 q6 o  t* }: e+ y│   └── main_host.c4 A( e8 H0 f: ~
└── shared+ m1 ?0 i/ |) P5 q) }4 C7 |
   ├── config.bld( m  K( `8 X# c5 p% q
   └── SystemCfg.h
# P% I+ O$ K0 c, m 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。2 i1 h# M& B, l4 T1 Y
6 }. z, f7 o( M( x) d$ C1 O
./makefile3 G. v6 c* ~2 g/ o

. [% J5 r2 K  m' p6 }2 J 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_056 f' {. J. I& `1 ]. z
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_156 x/ I# C9 ^  i7 n1 ?, f# d
3
9 s& ^; J, d8 l/ `1 `* S# e 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' V7 Q3 s# k; t& w. Y 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-; m8 N& F2 e8 w+ p
6 - ~3 M4 ^8 [& y" a
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
. k: `3 k3 y# d1 K 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
& ^6 I4 e2 z- D7 ?- d9 [7 I7 y 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.46 Q1 [, l% m+ \
10
* i1 g" R- B7 s7 r11 export SYSLINK_INSTALL_DIR      \
- K8 l3 F* q; m2 V8 {12        IPC_INSTALL_DIR          \
9 Y; D8 f  L" C+ z2 o8 F' P13        BIOS_INSTALL_DIR         \
2 D4 f& g! P" k14        XDC_INSTALL_DIR          \
1 T5 m: Q" n5 Q2 j15        CGT_C674_ELF_INSTALL_DIR \
6 H* k( E% b* t) N0 Z1 E16        CGT_ARM_PREFIX
7 W4 T/ j0 U3 K17
' |: J* Y$ s2 b" ]18 all:
# R7 c1 n( s; t+ N19     make -C host all: N% a+ B  s* a5 F# A. z; {( ~6 ?
20     make -C dsp all
0 _+ x3 h3 `' l$ g21
: m/ y- W. Z, S2 M22 clean::
: ]3 s) L! n8 E23     make -C host clean
, R) h( N6 C# {  K24     make -C dsp clean
  T! P/ n) G$ t- p" ^./dsp/makefile
0 _; b, i9 O/ p0 ?9 c, M
* {5 P4 D* T0 M: n* T" Y  U7 R& j 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件5 ^! z. l+ a  b5 c
2 objs = $(patsubst %.c,%.oe674,$(srcs))2 ~2 B; y0 b9 C- V$ X( r* K
3 libs = configuro/linker.cmd
$ d' z( A$ e/ b9 b- Z; ?. k 4
: f$ D$ d" l: X$ J/ b% y 5 all: configuro/linker.cmd8 a# ?" K  b$ O
6     make server_dsp.xe6741 Q2 c# u5 K# c
7
6 N1 e6 t/ L2 K 8 server_dsp.xe674: $(objs) $(libs)
% z7 D4 e2 n$ P$ a" G! o8 T 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: }' [8 o/ e# Z! }9 l$ s; o10
  M% t' e1 v/ C5 b* a2 r* j11 %.oe674: %.h
7 K& M7 _7 b2 L9 h$ w12 %.oe674: %.c
7 }$ o" |: Y' O13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
! s2 [+ _( s2 ~14
* W/ r  J- f& i" {; \$ X+ ]' |) A15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld) C* |+ v  N6 k' F
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
: T# D! e: D: x5 {/ @9 f% d5 c17             xdc.tools.configuro -o configuro                        \7 a4 R0 q5 U6 g+ N
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
, t3 p$ J8 \( g: i! V19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \' K1 a7 \# A5 j* d
20             -r release Dsp.cfg
# @) t7 u$ o; t6 |21
4 W5 H- V/ l, R& [$ r3 a22 clean::( B5 I7 p/ w: U) D& a0 Z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674! M5 j2 a0 P( B4 z
24
7 d$ b$ \: A, Y. m" M% C+ `( [25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
; X" j* A. K8 {3 y; N26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages3 m- b( Y6 I$ L% H0 [- M8 S9 g
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages9 ^: X/ Z8 z+ R8 d- z, i& g
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
7 ?  U! F$ H- F- X8 v0 Q$ E: Z29
% `: _/ V, P/ t30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)/ I' D* s+ Q+ e# s$ a( J' f4 O. k
31 ; O/ I5 N: a7 X% [- y
32 CC = $(CGTOOLS)/bin/cl6x -c                        
% E* _6 i# G  N1 g1 _2 S* R33 AR = $(CGTOOLS)/bin/ar6x rq
8 o! W0 f! O) j( p9 o- g' b34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
+ q! X$ n2 |; m) d9 ?35 ST = $(CGTOOLS)/bin/strip6x- {( c) Y4 k5 s  {* L; H6 a
36
6 A& {7 h9 |* M1 O5 `5 \6 _37 CPPFLAGS =
2 ~& b6 w, [) F' I  Z38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
0 x& ^" b$ d' `/ H' p39
1 r" U1 L5 R6 O8 \' L' ^0 V" S- e' ?40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)$ [7 T5 J- [. }& L6 {
41
( o; g- W- P* v0 Z, I42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     6 w8 V" d2 o( L; V; e) e
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
' Z! i# X) r$ R; `./host/makefile
" C/ ~" m+ `4 C3 f  ^) @
& M' s3 x( u0 G& d3 z; Y( c 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
+ z+ ~& i6 }3 n% u' [  f0 z 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
8 D/ b. _8 q& ~& m 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
) _  E. q+ [# E- }) h 4
+ q" n- L9 R$ B  A# G 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
9 n" B7 o- b( ^/ I; e$ O 6
$ q$ I- B1 o' b4 B2 y0 j' |# I 7 all:" f( `: T' P5 K1 Y
8     $(MAKE) app_host- O( o) ~5 e7 i
9 0 R6 {' U* |6 F8 L* v7 h
10 clean::
1 t$ g) F! _: G# S/ S11     rm *.ov5T* *.map app_host
- f6 D" e1 f/ S1 J12
7 [1 Y0 r( {& i; F13 app_host(objs) $(libs)
, S- ]! ~- Z: g14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
* a* o9 Z2 g& ?8 M# Y15
* ^2 |7 c: o+ U8 k1 K16 %.ov5T: %.c2 q8 u5 o0 q- q, F
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<- F0 X. c5 ?1 L! a
18
! M% Q# u$ k3 Y- O: ~5 i" W, k# S19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
& [; O  N5 i1 Q& D20 AR = $(CGT_ARM_PREFIX)ar cr- x. r+ G. Q) y% W0 M% C& [" @- @
21 LD = $(CGT_ARM_PREFIX)gcc
' q& H* p7 Q8 q' @) K# N- w22 , _6 T+ E: e! k4 U) R* a
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \: K& ~4 X( J1 G0 E
24            -Dxdc_target_types__=gnu/targets/arm/std.h
  b& @  A: e3 O" L0 |' q25
- v6 J* I+ c  k. t6 ?* q26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径9 e5 b) w! T* z
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
3 E  a% G' O. ]28          -I $(BIOS_INSTALL_DIR)/packages                           \
8 [8 C3 z# d* K9 u! v1 O" G4 J29          -I $(IPC_INSTALL_DIR)/packages3 Y; w$ O/ I; s( V
30 , k6 K2 v/ \8 i2 H& g& o1 f
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map$ d* O4 `" d( B: B$ C7 o- L! d/ J6 f9 f
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
- w! y- [) d* H2 p( d" N编译工程( D+ c/ U5 e) L$ a  _$ ]/ P
3 ?4 k; g! p8 S; ?5 i3 t
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
1 |: I' k( I5 ]0 Z; W/ S* E; P" K- t# ~+ T6 k
运行工程
8 G1 a& O: e+ p& P; h
  ?6 _3 N- y% T, o; J, c$ Z! Q 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。9 x! G" p" W3 }1 O

; W9 I3 q& n8 R5 k9 `& h! {1. insmod syslink.ko                    # 加载 syslink 内核模块8 ]( T2 T6 m, E9 \! e1 N  f
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序# h" X' W5 K) k2 [5 P
3. arm_app                              # 运行 ARM 端程序
- n5 j7 L$ ~) B! K6 E4. slaveloader shutdown DSP             # 停止 DSP 端程序- b5 u5 b, e, u% X; X+ Y
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
6 W, e! t. G9 s0 C3 B. g" f4 y- m 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
6 C8 Z5 E# c6 D2 `$ u
2 F3 r/ r- C% W7 F$ w. A& d 1 #!/bin/sh# Y" E6 D1 B( I" Z( `
2 3 j2 `( G3 b8 i4 p
3 set -x
- u3 V4 ^* m$ l" a! X' H7 o0 | 4 ( S/ A, n" M. U2 k3 f
5 insmod syslink.ko
' T( s) u" p0 O$ M( X  g8 ^$ s* l 6 5 ^8 K/ X2 p7 J) B# ^2 Z0 ?* H$ ^( X
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
6 k$ ^4 f/ j4 j* N# Q  W 8
0 {8 _/ ^. B" w9 r0 |& o 9 ../host/app_host DSP
( U3 b2 C2 l: h2 N# L5 k6 m10
( S/ S. D: z# g, S' D8 ?! Y6 H# U11 ./slaveloader shutdown DSP
% z( N; j  |1 f6 {; u
  W  Y  v# u9 \. I2 j4 ?5 g( h
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
; g3 S$ {) v. W) F- Y7 n: @建立工程
4 W3 H7 }0 `! s' T. ^7 ?, s8 @+ `/ ~( ~7 U" T; k
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
: y) m% ~8 |; i4 _6 D$ a1 p" F! H& 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- l& j- ]: B2 ?6 u) F
建立工程
6 {9 g) s  b- w; U  i8 l/ D
8 k" @& }' z' y, g4 Z- C: H 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
7 x$ w3 G: Y& f# K$ W' k7 H. b$ 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:407 R0 y( C8 M. m  o( \  B
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
7 Y' j. i; ^' ^/ u3 ^
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 02:46 , Processed in 0.044370 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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