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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,3 n% Z; ^2 F: a* H! f1 b9 Y: z
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。( G. {# i) c' ~4 V

: e: _6 H  M. G) ~( u/ ^3 t& L# s1 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
  c+ y$ t. ~1 |/ L" q& h& W8 G0 t' D$ ?$ r( T: `  u, p
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。4 s/ @1 x/ ]- i& k, p
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
: ]5 ]( J3 B% u! C3 d, R( X “清理”过的例程的源码如下:8 S, H0 d6 }/ ]" H: k! ]6 e8 F5 z  Q/ i  E
: R6 z. B% |3 {' m0 F0 V0 T
├── dsp
2 g- b- M, Y: t' W, t& J│   ├── Dsp.cfg* e& z# a5 ?7 y! S1 x' A
│   ├── main_dsp.c, L( }) J( P/ x) u, `
│   ├── Server.c
$ _. V5 U4 x, ?: _│   └── Server.h2 L# G" S% u7 u5 S; H/ ?* D7 G
├── host
* o8 p) e/ c) k7 s  N: d' E9 q│   ├── App.c
5 T) M3 d. n! Y8 o7 d: B3 e│   ├── App.h
/ s9 ^: o% n) Z9 G) B│   └── main_host.c
8 Y2 }  _) |: u$ M2 k4 c% i  B└── shared
3 J/ i- q, L0 L  l" j  l   ├── config.bld0 O0 ^" q: ?& @2 ]% v# r
   └── SystemCfg.h
, j2 K  w* i  l9 f, ~2 y* D% ~ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
4 {$ b1 n# G9 p9 l9 ^
" C$ R7 H  o6 F& D& S./makefile
9 P+ ]: ?# p5 ~6 N' d! b# h! w  |8 l) |9 L& E6 t
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05# P$ A$ c- E% L5 ]
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15) ?8 |* q5 b" V$ {$ V- Z
3 ' f# w) c; y6 ?+ v( Q
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi7 w* l7 u6 j; `0 c
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
5 P- [$ g9 F& r( k+ u' O5 w 6
: c6 j8 v5 D! v8 _ 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
$ z' d: O! S/ X9 O 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
3 u; C: `" }6 z7 g 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4  n8 i. Y7 B* p4 G
10
! u. K3 g% ?% A  r% A  _/ Y9 M) J11 export SYSLINK_INSTALL_DIR      \! I+ S' A' i) |; i8 K4 H
12        IPC_INSTALL_DIR          \0 E% N  [3 U) \7 f0 l# _" }
13        BIOS_INSTALL_DIR         \
( v' ?( i7 k3 {8 c4 z% w; P, V14        XDC_INSTALL_DIR          \" o  D6 t( Z  `$ Q  }  C  t, f9 q
15        CGT_C674_ELF_INSTALL_DIR \: B4 \( N( a% t9 t$ W, Y" V" R
16        CGT_ARM_PREFIX+ b) Y- [' T4 t6 H3 M7 ]: p
17
* F0 h7 h/ O/ e$ r1 y18 all:6 d4 ~) _! l& q# W& d* [
19     make -C host all
% s" J6 S# e1 ]7 b; D20     make -C dsp all( T$ {& R6 E" e
21 * R8 ~/ v/ u5 B+ k! h
22 clean::9 F0 k: w- }) ?
23     make -C host clean
4 V$ N  R# a& o, [: A  s, {% h' O24     make -C dsp clean
) o0 @+ h3 V* c9 \./dsp/makefile
4 ?2 O. f. f, r7 P2 `  c0 l/ Y: Z# u: @" l5 G& \
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件$ C  J" U# J* i2 `5 J/ r; I4 r
2 objs = $(patsubst %.c,%.oe674,$(srcs))
6 [* w2 u% I# A/ {: y" z 3 libs = configuro/linker.cmd7 Z5 a+ a* @' @  P
4
8 w+ y6 E7 |: Y" z' X2 C 5 all: configuro/linker.cmd
" ^! n" g  Z+ g" P- p 6     make server_dsp.xe674
$ c$ e1 ?- I: s 7
9 c/ Y6 A1 c) Y* S2 @ 8 server_dsp.xe674: $(objs) $(libs)
1 K: T- p1 O6 d 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+ J% T# K* _/ S) v0 X6 e10 ' z0 L! j$ W$ p* M& S: h
11 %.oe674: %.h
* j, ~% q! ^- O# M. _/ q7 c12 %.oe674: %.c$ r. i) X- s2 l% {
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
" j" B$ @/ K5 F  e% E  e; l14
5 G: B9 c/ M7 b4 q15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld! n! e$ W0 w) \* ~. U3 P
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
& N6 d6 Y; p& t" W3 V( j17             xdc.tools.configuro -o configuro                        \- F/ z& H: y8 }% d9 t7 k0 @* u
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
3 q3 C4 E# z3 z5 s! T8 [8 U19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
* m! [  E3 D2 R5 }" p20             -r release Dsp.cfg7 b2 T9 g# a. N4 Y4 H
21 2 k" l; b% r2 W0 j% i: L
22 clean::! o/ h, |" t5 X
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
1 c6 I5 y" m6 Z% r3 N; J24
. f0 m1 V5 R  _/ H25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages9 I+ ~- j/ l6 \0 n, |* J* R
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
( X4 _- ^) b3 M+ t27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages/ x* ]# ~% T# P1 T
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages- C+ T2 R, k! O5 [$ M# @& s: a8 g( X
29
& I3 d, w9 e! ^& `% ^5 F- n7 I" g30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)) c9 T+ D) T) R  Z5 j  N; |
31 2 N* e0 B5 o0 K; {. R
32 CC = $(CGTOOLS)/bin/cl6x -c                         & n7 T, t: N: ?/ S' v* ]9 ]
33 AR = $(CGTOOLS)/bin/ar6x rq& J3 H6 P$ E6 z+ V: P
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi# m! t- L% U% `$ o5 I' i! f# a4 X
35 ST = $(CGTOOLS)/bin/strip6x
/ ~( v3 `+ t, C5 Y* a36
+ Y& e% v8 P3 D/ V) _# M* K* u37 CPPFLAGS =# m; j# m- W; T: {% y; I
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)  G) j& _2 N4 o( ^( o: G8 L  T
39
5 i8 P) Z3 l9 A# A4 n! F5 C. r40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
. t1 N# i/ H5 L4 l. C2 ]) ~/ l41 % S2 T7 e7 h. p( |& B
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     5 Z6 S" A5 B" I- _2 D+ T
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ ~1 }  ]$ Y1 o. W5 v+ _# N" z7 f./host/makefile6 B: \9 n+ q1 x; S& C* e6 F/ ]& t

* Y* q4 i) y$ `( u/ e 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
9 h6 z. L; d/ Z* R& Q( M9 v) N; j 2 objs = $(patsubst %.c,%.ov5T,$(srcs)), ]" V, x8 R" o# t
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug3 ?1 _* ^+ q+ c( b
4
* b. ?% c$ W( f# s9 l6 g/ @ 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
8 Z! Q9 `+ `$ O* x5 V 6
( A- [# M7 t! R  x8 b5 z& a 7 all:4 r' b1 f' H3 l8 E# N
8     $(MAKE) app_host
' Q6 @: f* ?; q% r% K* | 9 $ o* `& s5 s, z) [4 A8 U
10 clean::! q. f0 {% \0 r1 Q. X- o
11     rm *.ov5T* *.map app_host
0 R* v1 N; j" O' d12
' F8 y! k3 \0 E5 u& z$ c13 app_host(objs) $(libs)
0 \% Y+ `8 \% m1 \6 [14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 k2 G; C6 O) s
15 2 O/ d7 m3 m6 U- x9 B. {6 C' `5 M
16 %.ov5T: %.c
1 o+ S. T% K( a9 Y! |3 T- n17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ P5 b4 e2 n2 o% J( M0 I# S18 ) x% Q6 t# _7 S) [$ W
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t4 _& P# V$ ?5 L. ?2 n$ m" o7 _
20 AR = $(CGT_ARM_PREFIX)ar cr
6 x8 L( K; U/ g6 m21 LD = $(CGT_ARM_PREFIX)gcc4 F, Q4 X+ M; v# Y2 |% r4 Z
22
# o: o0 L0 F; q6 L' C/ S23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \9 O% |' Y8 @6 k
24            -Dxdc_target_types__=gnu/targets/arm/std.h+ e& w& B9 B* r. `7 S; m
25 0 n; m. D  D7 h, G2 E4 |
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径* c$ P; N& W  G
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \( U" }) ?- c( P& S- D
28          -I $(BIOS_INSTALL_DIR)/packages                           \
" y% O; ?% Q, g. A! t% O( n29          -I $(IPC_INSTALL_DIR)/packages& x+ u. q' o* o
30 $ N# G! |0 W" I3 y- g+ D( m
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
; N0 o# ~" s; q32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序* X/ E' _7 u5 g; H9 @0 I
编译工程
7 x' b/ e' g7 V
0 A" I7 h2 i5 d makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。  S5 k, x2 D! c% P0 i" \

1 j4 L$ ~  v# z1 z! _  a运行工程
( _, Z: _1 j6 B% ^% M9 \1 T; m: K" E  B( O; [+ C+ C
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
1 R" W5 p& Z7 t
5 r& R; a  p6 h" Z% m, |' H+ y1. insmod syslink.ko                    # 加载 syslink 内核模块
4 Z8 q$ O0 V1 |- n! b+ C, o( P2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序. `/ v$ T5 K- t. I, g7 V5 @7 R% F
3. arm_app                              # 运行 ARM 端程序( c$ N  U1 U0 l# x3 y7 d) J2 S! P
4. slaveloader shutdown DSP             # 停止 DSP 端程序
3 H' S6 [$ |6 N& t, ` sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
6 ]# ~; C5 V5 Y! F/ W0 X 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
, c) b! P( Q: s1 w8 n! ]
. E+ {8 [, ~7 ^. h: R4 J8 v- ~ 1 #!/bin/sh3 l+ h1 I$ c2 ^$ w) w/ N0 n: D& I
2
7 Q6 C2 V. a. i4 y/ k 3 set -x
* R7 P; `- k1 X" Z2 ?: ]; t2 q 4 . H6 }* K5 C" Z* A7 l# E
5 insmod syslink.ko
( E3 c: ?4 i: v; ~9 u' G6 m3 m 6 " `+ _1 ~9 D+ O+ n3 U3 P; }
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
! m3 c+ a4 A, O5 O" l  C 8   |$ n* H  K: ^; I- q# c  Z/ H" J4 i
9 ../host/app_host DSP) g( d8 Z: z2 q+ Z; F& s, B* z
10
( q' f0 b" `- i7 P! {! c$ t  x5 y11 ./slaveloader shutdown DSP
/ j6 R* i& @9 ~# s$ |) N# R9 G- `% ?! A$ D. ^0 y- \0 M1 ]4 R, [
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05* }8 y0 B% U1 y8 F, a
建立工程5 L8 r& h) i' r# M+ t' u
/ \% J5 ?/ j( L9 U9 I* F0 ~
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

# ~: ]+ m6 o# |, `8 }& b' vslaveloader 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  p5 H9 _2 E, Y0 l& g
建立工程/ s$ _; f; q$ a/ n- H! C! G
/ e( T0 h. n  y: H; X+ U! m
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

+ H& O+ S4 |; |2 j, m2 O- Pslaveloader 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
2 k6 i8 S2 g9 fslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
6 T2 _3 S- U7 ^5 D  {. k8 j
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 03:49 , Processed in 0.043237 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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