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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
5 c6 T* P* y- E" Rdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。/ H- @$ G4 B2 x8 Q5 q* S8 Q  ~
3 [: Q/ \* C3 ~6 s; F* d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
* i, q9 m, ~* I5 p% Z& g/ K: {( G; ], i4 Q6 I  x" f& h
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。! c. u& \0 m2 t8 y6 Q, }
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
- ?: c: y* K6 J- _! d7 C/ W “清理”过的例程的源码如下:+ ?( R5 R3 M( @! h( q1 W" ]

8 h5 F8 V7 O& t0 l, L├── dsp- @1 U1 L! @- U* G& j+ ]
│   ├── Dsp.cfg, `; e, Q4 D' N' x* M. B: e
│   ├── main_dsp.c
* E8 W: J' o: `3 y% N2 V0 H│   ├── Server.c) t6 r  i+ q1 s  {4 @3 }
│   └── Server.h0 Q3 R$ O' y0 s( y: R
├── host
8 G/ d  u. ^+ [$ M& n6 y' }│   ├── App.c& ?% @( A: ]9 o9 k
│   ├── App.h
  j% H+ P3 Q8 L# N* f, `( g0 T# ]9 h│   └── main_host.c
( U2 m' O1 _: Z1 j. N+ o6 j- z" Q# I└── shared
. F" {5 t/ ~& b& o& A: n# ^   ├── config.bld
* x6 q: F9 q5 \  |& Z2 Z   └── SystemCfg.h
$ n  u# s2 K% \ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。2 z$ [# X, e6 m7 c, G0 |$ u

% i( D1 e0 S  X5 c7 O- F./makefile
* q* Y# A9 f" K! b* ^! L( w* A1 V1 U8 g+ W5 h) L
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_059 c' ^8 j5 u3 g  ]( ]5 T
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15! _3 q3 {; ]* Y8 I* V
3
. R( }; `1 {0 B$ b- m0 v1 x 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
9 u* ?% i5 A0 a% z! w7 P 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
; p3 t- D- p) ?4 q( W! F 6
8 ^1 U" v; t* s 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_501 q( ?& f9 X) ]. H& v# @0 N
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
& E6 e% ^2 e6 U 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
; e5 [) p9 _. u/ F: {$ q10
5 _4 {/ P) z) Z- F$ y2 g8 w: K11 export SYSLINK_INSTALL_DIR      \+ T* m' d9 I, S! a( N1 @
12        IPC_INSTALL_DIR          \
( o: ]+ a4 i1 K. ]( K" s13        BIOS_INSTALL_DIR         \( S9 q( q4 t" a9 o
14        XDC_INSTALL_DIR          \
7 h+ `3 ^% X3 w3 z2 E! j15        CGT_C674_ELF_INSTALL_DIR \
! Q& X& e! Z8 D% `8 {16        CGT_ARM_PREFIX
- {4 @5 ~& Z# m/ K! t, ?3 O17 ( k& A6 A. j4 ?1 ]8 u
18 all:
3 E: {0 i& q0 S  e19     make -C host all- ?, U# t8 ?' f, b- a' e$ x
20     make -C dsp all# v" B2 u/ E$ \& e$ h  S& V0 \+ L8 p
21 3 f  f1 |% s9 C2 }
22 clean::; U0 S, y! a3 I: T7 w
23     make -C host clean& T% ^8 R4 _4 b% o) K& ]- W
24     make -C dsp clean
. t7 W' a' G+ ?8 @6 }./dsp/makefile- L$ _3 v! _) R7 W5 n; ?
2 k' [& ?& t0 t8 Z0 o* m
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
3 o- m1 M5 }9 W. R  T- M 2 objs = $(patsubst %.c,%.oe674,$(srcs)); s1 P# E. ^. g  \1 u" \$ p2 Y
3 libs = configuro/linker.cmd
( E) q2 g' ~8 H' B  f& O 4 8 c* `5 _4 ^3 Y1 v8 I5 ^
5 all: configuro/linker.cmd& Y; O: B4 ~, Z! W
6     make server_dsp.xe674
; M2 e6 K1 V" E% I 7 7 ~2 m3 |, {3 E
8 server_dsp.xe674: $(objs) $(libs)3 I& Y6 R: W# M0 W- x
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS): p( I1 h# x* f) Y; v! h" q
10 8 h* l6 N& M4 t! ^2 |  [  _0 L9 O4 h
11 %.oe674: %.h
9 E9 x" [, V7 V3 g2 n7 N# S12 %.oe674: %.c
1 q' O' p# a5 W" C6 N1 J3 ]13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<+ O: g  r) k* _
14
. F: \5 m$ j* S( E' |" d15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld: v$ r0 n! O! D+ P
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \+ {3 [* a% H7 f8 [" j4 J
17             xdc.tools.configuro -o configuro                        \
( r5 l; v( B! l4 D18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \3 t$ b- X/ m; D: ?0 w, _+ d+ G3 ?  h3 D' S
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
# b* n6 x, K/ A7 S20             -r release Dsp.cfg
6 b3 L; ]% X* y2 q& U21 # f" ]& ~& B) E7 U7 q  b
22 clean::7 Y0 L9 u( v8 E" m. W+ t+ o- A
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
9 h: x, ~0 z+ S" Q9 [24 * n3 w( D% ]" J3 O
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages3 f9 t6 I* `, z! [8 I  r! ^
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
$ J4 W& C. V: M- [3 y% `/ S27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
. n9 g6 p& o1 f9 Z( F28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
1 e7 m2 a1 ~3 A2 |0 I$ s0 X0 s29 $ f6 l4 W* y; p3 c
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)) z5 L: O* |1 O7 e- a
31   q# Q* C' W' d: G( [
32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 i4 {9 v: f2 c  k6 ]3 ]33 AR = $(CGTOOLS)/bin/ar6x rq' Y& A2 A- @% ~) {1 o& x0 g
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi- U0 ]$ X% M+ L, v3 l/ V
35 ST = $(CGTOOLS)/bin/strip6x; [# }2 |( V8 [* o" _
36
, Q+ k6 v% e3 `3 p0 j' F37 CPPFLAGS =
2 ?( k3 p) j/ k8 U7 Z( V7 b0 n38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
/ L% z) q: B. E; u3 |39
; ]& Z  Q3 B4 ^9 y3 N4 A40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)  |  a% O7 N# u0 A0 \2 c
41 ( U, Q# Q* s7 H$ a
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     # b$ o2 M. {' g$ R
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序0 E/ n, [1 f/ J2 Y$ n
./host/makefile* Z2 p/ i. I) F8 s. _

/ Z: y2 ~- w" w% Z5 O  F 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
+ d. \* M0 K: \4 }' ] 2 objs = $(patsubst %.c,%.ov5T,$(srcs))$ J- o; t/ q* z- `/ X- N
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug' ?# |% n2 C& Y# C1 u6 t
4
, S" o# S5 g4 h- C 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))" |% p. [+ t' w% E% t
6 ! H/ h  A( d( V; c
7 all:
# _6 R' z9 A& r  n 8     $(MAKE) app_host! |' Z* k" C2 q' u0 R
9 . I! c8 E# Z+ U# c# n
10 clean::, A4 X+ ^: ^9 T2 k
11     rm *.ov5T* *.map app_host+ \9 p' w9 H* {
12 & r+ t3 d% h" }" t1 K& z' Y
13 app_host(objs) $(libs)
+ |; T3 n% d3 v- Z% \. ?14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)$ W  L4 p$ R) O$ Y& U) q
15
3 ?, n/ p5 Z. _( N16 %.ov5T: %.c
! v: o3 g, ~" W7 y" l- `: Z17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
2 ?' N$ c. T$ A; I- U18   B3 \. a* j! [6 y
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
3 }7 t& l. F9 n& V9 a! E: O6 r20 AR = $(CGT_ARM_PREFIX)ar cr
# I2 m2 B) K9 j6 Z5 [21 LD = $(CGT_ARM_PREFIX)gcc! A, \1 w" R5 T+ i: J
22
( R5 Z0 z8 F( R3 _2 o( _; m23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \/ ?5 i1 o1 N( l1 H* h
24            -Dxdc_target_types__=gnu/targets/arm/std.h% r! Y% b! q4 i  [3 f1 P2 e
25
1 E5 e' o/ r! A26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径. T9 A# ?; P! Z
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
& G" z- z+ c! v8 ~# `28          -I $(BIOS_INSTALL_DIR)/packages                           \+ g- A6 T0 G. I
29          -I $(IPC_INSTALL_DIR)/packages" h& B% p. j$ u
30
- t$ ~; N4 Y2 m; @9 \* o' k, V31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map! s. |# k& u  b! P
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
- m( A7 K! U" o编译工程
: r* x2 U4 u. S1 U" x( a
5 ?+ k4 c/ H% ], }3 { makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
0 ?  C# i1 o1 m! _9 ^' Y7 t' a4 U2 \' [& J
运行工程( F- r3 V- Q* {" }
4 I( j0 I  ]7 T- n0 y
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。" L) a+ c8 c; }6 w  U9 x' @' K" u; q  O
: K+ i% q7 x& P' a6 H/ X' _
1. insmod syslink.ko                    # 加载 syslink 内核模块
( w" o' \. s' ]4 j* l+ w* _2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序5 t( v  N0 X$ h! Q* |, |! o; N
3. arm_app                              # 运行 ARM 端程序
4 W: o; w' C1 {: B4. slaveloader shutdown DSP             # 停止 DSP 端程序7 N' q- D( `+ |2 v; ~* J7 H
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
* H; }& v. n5 F0 e3 ? 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。% r) _8 |6 {* r. ~" [8 B, P

# o. L/ U8 T2 E; \- G9 C, a 1 #!/bin/sh5 B) u2 r+ z* e- r
2
& D: n+ |/ K) G: T! H/ | 3 set -x& x$ \9 T  s* j
4
9 @/ a1 A* _2 L# E) d+ ^ 5 insmod syslink.ko% ^! V: a' a# r6 l: B8 k
6
+ {5 _2 H6 B, H1 m 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
+ ~5 j6 V% i9 T" ? 8
9 c" c7 n" i6 f  a- u 9 ../host/app_host DSP+ Z3 T9 r1 H4 s" E% f
10
: p6 r6 j* M# F5 y8 J11 ./slaveloader shutdown DSP! I8 W( _7 s4 C" o! K

9 F0 f: z  q; k  P0 |
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05$ _6 u5 D$ m; T- j. ?  o2 Z2 a
建立工程& O2 K8 U( r$ W0 l, C- H
- S/ s# H  }9 x  @
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
- w3 P0 e* 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; _0 S7 T" x5 D# |0 g+ E
建立工程
9 @2 x- T! n) [, ~6 \5 B1 n4 r# v0 ?( ^2 T( Y) T! k% F
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
, a7 k# s/ b: o% y
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
2 x3 Z, Y" W6 ~# }slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
6 d: D' X6 B( A
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 18:14 , Processed in 0.047748 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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