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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,: x" ^' T2 G0 u  g  O* H$ x' m- s
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。4 t9 N+ q0 I0 X7 g3 {) Z

- r7 g) s- Z* c2 n  y. u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程$ w5 ^! H, Z, o! w/ H. j
* f; @/ [0 z* l5 |- L' u& ~# v, N
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。, _2 W; Y0 h3 C2 G' A. Z6 e3 z
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
' y' U$ ]8 }8 D# N- u “清理”过的例程的源码如下:
2 e( V& O- t9 B- s8 e+ R  V
9 U. _6 A* J7 y  K├── dsp
5 d% G0 k+ e, z. r, r' O7 }" q1 `│   ├── Dsp.cfg  H& a  }/ {9 h# z+ n
│   ├── main_dsp.c
' K: P; u: h& y/ H  ^4 i1 K│   ├── Server.c
& _7 c( g% S$ e( W* p│   └── Server.h
3 g/ c6 H+ G; Z├── host6 r. n* u2 A3 x5 x5 |
│   ├── App.c
  z( Q4 H4 {9 _" G" J│   ├── App.h
9 E/ k$ l1 Y! \- u% |6 d7 S6 n) E' o│   └── main_host.c
0 @6 r3 _5 V' ^* A+ o3 C1 Z. h" B└── shared1 g" Z0 ^+ v9 h' R
   ├── config.bld" H0 d! J4 H/ C
   └── SystemCfg.h
2 v3 n% L* N! [3 m( }0 Q( T 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。8 K- C5 r8 f, n+ F: d
! r6 Y! O; L  G. d* R7 c+ i
./makefile& r; ?7 j% v1 [2 l9 ?$ a

5 c! l3 E  z7 r( _2 b3 k$ ` 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
# w6 u, w  M0 N 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
8 g" Q! }- M% c- V. d 3
7 `& z" v( |' E2 Q3 ` 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi5 v2 j8 h& b0 M% H- P0 ^
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-* b" [# S/ z/ ]  U5 u7 E$ R7 M* w
6 6 ]$ o; n, e" c$ ^3 s% J& f! W' p5 f
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
0 U( j# ?+ p, u5 H/ h1 I 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
# s- }3 w8 v2 V7 s$ }7 a4 P- f 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
3 @8 \5 q! P9 B- y10 1 F% h, a( D! I6 W2 L" U
11 export SYSLINK_INSTALL_DIR      \. A0 E& L. s/ s, O; b
12        IPC_INSTALL_DIR          \5 Z5 D0 {& b, }1 ^( U( }
13        BIOS_INSTALL_DIR         \
) X8 `$ K4 a- M0 q7 {. B14        XDC_INSTALL_DIR          \2 i) ]9 V' ^" [- O. P8 i, Y
15        CGT_C674_ELF_INSTALL_DIR \
6 y8 V6 V  W/ L$ O2 x16        CGT_ARM_PREFIX" a  l7 @4 d' _
17   \4 _' I- D8 M" S8 m
18 all:7 V0 S4 C$ E& F; s, l# Z7 h8 j
19     make -C host all  h) Z% ?9 d! @/ ^* n
20     make -C dsp all
5 W% S6 U4 {1 R& J8 L21
0 [$ l7 R/ f( B, j% I22 clean::" o( [- M2 R5 z' @0 h
23     make -C host clean- w: N! w0 _' I" ~. }
24     make -C dsp clean
( b1 w. H( X% R7 ~: q./dsp/makefile+ ]: D0 }# ^4 w$ }
8 r. S3 Q( u5 _. K8 h' z
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
' j% x5 Z5 Z0 t' b2 a: w$ C 2 objs = $(patsubst %.c,%.oe674,$(srcs))  ^% z3 c& V/ h* b
3 libs = configuro/linker.cmd
6 n$ O1 @/ c) p# ~  @ 4
7 A. U/ Z6 b' [ 5 all: configuro/linker.cmd
# \9 w' W) X: A2 e5 i5 ^ 6     make server_dsp.xe674
4 U; M5 F0 i' K0 [ 7
2 H6 D$ @1 d1 d% g7 j) r 8 server_dsp.xe674: $(objs) $(libs)
0 e* D: b$ K0 z 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
" w' k- \( Z0 S- C( M10 ) N7 r  U9 C" L8 i
11 %.oe674: %.h
5 e% ]9 C; w, {12 %.oe674: %.c
8 Z( a' y: J5 u* u; o% t13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<: S  J% Q2 n- }+ S# X
14
" ]  F. N- a3 G6 u15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
7 j9 k* c' c1 ?# \16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
: q& `6 N' z* ^17             xdc.tools.configuro -o configuro                        \  r2 d- m" y5 k
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \% u! ^/ P9 `+ m0 k* f5 M+ Z
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
  O- x7 I# u8 l1 r* r, }20             -r release Dsp.cfg
7 _9 x' _4 P, `21
9 z% c; g0 t' z! ]  T" x3 S" U22 clean::
4 ]: \) q1 C" n3 K( N( `, E23     rm -rf configuro *.oe674  *.map server_dsp.xe674
0 {0 A. _, ]: l0 G5 V( g24
* q  D( f# f+ F- N# ?$ t25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
* H' M* s! m$ R. y- X8 H* D26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages, Q0 L1 i5 [7 b( P6 J3 e; o
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages5 D8 B  u; v* t- R) e
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
9 r- G1 {5 @6 t/ [. J4 v29
. {" R. ]2 |- P) L' P) w30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)' j0 u& d9 \# t- x
31 * _$ {0 ~$ o, j9 i# D0 q
32 CC = $(CGTOOLS)/bin/cl6x -c                           A! I% H7 N' ^; C5 q, `: U
33 AR = $(CGTOOLS)/bin/ar6x rq& _" y4 [. c, C
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
  P$ U$ E+ ^7 I# a, g0 |35 ST = $(CGTOOLS)/bin/strip6x
4 G. m' ^) O, z8 Q36 6 \6 t& h- X, A
37 CPPFLAGS =7 \) l: H: ], L( h" x
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
$ F$ N, E' J1 s" `1 u8 s39 ' a8 b; K- f3 k" \! ~$ _: u/ s2 f$ J0 C
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)! c; B# V6 h7 V! O7 K* p1 F; E
41 . B6 P) \* l4 [0 \. S
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
! W8 I! P% ]; }. G" L, H# X2 b% G/ \43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
0 J5 W* J" z4 Z: x% S! a8 J/ V./host/makefile% b9 V0 F1 P: s% c
" e8 v! m/ j& e, Z0 i# E
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
5 v: }, ~# e6 W, B# e' S" ? 2 objs = $(patsubst %.c,%.ov5T,$(srcs))4 K5 q, o0 W! @3 f2 J7 I
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
" R% l0 \7 }/ B0 V! j: s$ { 4
" p" P, R9 U9 s% U 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))) ]$ y2 e4 I2 [0 ]8 n% C4 n
6
1 m% {3 W& I* j7 w& F 7 all:
% N  Y5 d* K! ^ 8     $(MAKE) app_host
2 A: k5 J- Y7 r6 I: n3 m% T% V 9 3 a4 j% G  Z# o# d- p+ S
10 clean::
9 x6 b, g% g7 y6 J% k) N11     rm *.ov5T* *.map app_host
3 p8 J4 F) U7 M8 N12
  |& b2 i4 M: v0 ]5 m! _( _, L13 app_host(objs) $(libs)* m; @- f8 _# C. v6 C( |
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)5 ]7 U& T6 L5 a6 c
15 8 e0 Y1 R; r1 A# p8 y$ n
16 %.ov5T: %.c) B/ ^% N& J* R1 G0 }2 E
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
! w+ q' R& O- H5 Y$ h5 ]/ d18
/ o0 e3 _+ F' C2 L. b& T* `% e7 {19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t' l2 h6 z( p1 Q
20 AR = $(CGT_ARM_PREFIX)ar cr
5 b; u9 }% [4 s$ x21 LD = $(CGT_ARM_PREFIX)gcc
7 P1 a: n3 y' Y22
) B+ l1 \& F: ]. I9 E, t23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
# ]9 k3 x) ]9 x/ [  `24            -Dxdc_target_types__=gnu/targets/arm/std.h
5 k! S' Q! x7 u! Z# O% e" I  A. s' j25 & _3 X( [% e4 A) U# f
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径! t) D. L9 t( A+ k
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
0 n4 i, j/ k/ G28          -I $(BIOS_INSTALL_DIR)/packages                           \) ]9 Q2 O$ }" t! `8 Q; f& g1 N5 P/ \
29          -I $(IPC_INSTALL_DIR)/packages3 L6 U! `4 @, l' h! m9 i4 D6 ~
30
  u" m/ r& z) t! p31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map1 f% D# N$ e5 ]* G% U
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序7 Y) N- r2 E. W/ `; n2 w' H( s
编译工程" ^' ^  G# V0 b

; q% x/ N" V1 y, X makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
, z& K! @4 g2 Q& w" B, G
) z8 u6 u, t# X3 {. Y运行工程
6 ~2 \1 P2 C5 a7 U3 \3 \: p, ?/ j8 U2 C' V5 o
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。7 _2 e) \! j1 t6 @2 _0 t

4 J7 @8 J4 v* A3 p1. insmod syslink.ko                    # 加载 syslink 内核模块
. L* P/ A. |) {- S: e2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序  Y+ ~6 y. w; G( g& k8 T6 e
3. arm_app                              # 运行 ARM 端程序
7 Y. [9 _# V  L- I2 X4. slaveloader shutdown DSP             # 停止 DSP 端程序
0 R" x5 x# m; j# K sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 6 _- Y7 w% a3 V) |
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
5 `$ m9 J" l6 @9 ]
7 U# t$ q/ r9 C/ }; P" K4 t# b8 {$ p 1 #!/bin/sh) q9 j" e+ C& _4 N
2 " r& v+ v8 k- J' D7 h- g  n# k
3 set -x( ^$ }3 U1 w% B- U' u* j2 Z
4
, j3 a0 t) l' y3 |/ Q9 J 5 insmod syslink.ko
3 w/ x; a$ p! w! f 6 7 r  I8 V  S# p- h
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
# U5 E( `! k" A9 q5 Z 8
/ u1 y. T1 g  N6 S& Z 9 ../host/app_host DSP
' k7 [" B; i4 x; c# F, [10
& t+ ]; M# o9 \1 D( E1 n, G11 ./slaveloader shutdown DSP
' }! D( x) ^! _" u% L; p6 S) z5 _
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05, a7 ~% p- {5 ^1 y% F. Z; n
建立工程
, x) P$ t  C; R" C( S5 ~7 ?" x* Y" x& Z9 n; v3 ]" ?3 n: N
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

3 N2 F) o" D* V  J: x1 Jslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:054 c% i8 ?( t9 ~( X7 p
建立工程
- n: J$ w6 c8 P$ e
) i, t) l6 Z/ M% l% J6 m 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

, @+ C* J& l! O. N( p4 X$ ~' rslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2070

积分

创龙

Rank: 8Rank: 8

积分
2070
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40' Y# C- A+ c! D9 V/ }% Q/ X2 C7 Q
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

: F- ~2 A" J( j8 Vdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 23:49 , Processed in 0.048353 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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