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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,& h! R" d: I! ^0 J
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
' v9 e# s- _  O
9 O5 g$ R; k: ^$ j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程0 \5 e  L; a$ z- j1 l' l

1 u  \4 _, n1 P$ m5 o/ I4 m 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。$ @) H3 g* }0 B0 m
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
# L+ O/ e5 k% D: Z; I8 O “清理”过的例程的源码如下:6 x7 Z2 J/ O& W+ T! P" o% @

3 c+ l, v  a+ t4 w6 q  {4 H' H- K├── dsp
# a- A. Z' ^8 ]& ?( H│   ├── Dsp.cfg
! U9 ^# c. Y( T- X│   ├── main_dsp.c$ q+ S" t& U/ t; y3 ?7 Z- ]
│   ├── Server.c4 d; j' L+ K3 I
│   └── Server.h& W6 |, R7 F1 S# A
├── host
" U0 |# ?7 E- A% i/ V│   ├── App.c
8 a6 L+ F1 W4 D3 d1 s│   ├── App.h  @2 }# A1 ^) g) ]% G
│   └── main_host.c
) N4 K; c: U& ?7 p( ?6 A$ \└── shared' ]$ d! _# `+ g8 E6 b
   ├── config.bld
! I$ T* \6 [8 R% u( H; j. g" f   └── SystemCfg.h
! i8 Y6 |* _( ]7 c* p: } 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
' o3 V: L# F5 z; `! O% V1 Z% e* {, o4 v
./makefile
" f1 X7 u0 I) d7 M" i: t* Y5 @5 Z: \0 t& B! Q( F' }/ \
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05" a8 m; g* Y( o
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15* W2 ?9 T$ \  B' p9 U% L/ w
3
" U& ?: _& R% W 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
- i' ~/ c& x9 s 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-2 s2 ^  Y4 S8 k! n( R0 w6 ]
6
' k9 l, j! I0 h) E 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_509 h$ S/ R! `' y; t; S9 }
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
$ [/ U: G6 q7 S' g: F+ s2 p 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4" E2 h& C" t6 ~7 S" s
10 & O- G6 [/ D% C4 d4 O0 b  D* f+ V
11 export SYSLINK_INSTALL_DIR      \
% e# j  U  d7 o4 x2 i* d0 Y12        IPC_INSTALL_DIR          \$ u- P3 F8 z) P& P- n; [
13        BIOS_INSTALL_DIR         \1 S: c, s5 |0 @1 f# t1 p) Z
14        XDC_INSTALL_DIR          \
7 g, }) i' R& {8 o8 {15        CGT_C674_ELF_INSTALL_DIR \
" B3 R' l4 t* f: D16        CGT_ARM_PREFIX9 d* \  x8 [2 i+ d
17
, g6 y/ L, P+ @. n; |18 all:. [( E% j3 |! b) n4 W( ]. W
19     make -C host all
" e# a' d2 _% U7 s: v& X! t" [20     make -C dsp all
: H5 P3 m( L0 W* {21
- x0 z7 d1 x0 J2 m* y& w5 e22 clean::5 i2 `) m( c% T: u' |  H. v4 ?' l
23     make -C host clean6 G3 C9 n0 z  z+ u4 l
24     make -C dsp clean
. R9 E$ M! N% k./dsp/makefile
& A7 w" h7 l# o6 Q+ F- m+ Q
2 E+ o7 U7 \# k1 x4 c- B3 z 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
$ p- F3 }8 n  o( G  Q 2 objs = $(patsubst %.c,%.oe674,$(srcs))
: f2 a: b! r# r0 A% U 3 libs = configuro/linker.cmd) N: N* S/ t) \. `$ D
4
% ]; f9 h+ x5 L& c- q3 C9 ~ 5 all: configuro/linker.cmd
3 W( ?8 e1 ]' A4 `: W 6     make server_dsp.xe674: \! w" n+ @4 h/ j
7 . |  e  q8 j. H' D1 @6 i
8 server_dsp.xe674: $(objs) $(libs)
) Z& U  w" C5 Z+ h1 j$ O 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
0 r6 D/ x3 E& E( I8 s4 G10 & c9 L: C1 ~9 z1 ~3 d
11 %.oe674: %.h
" ~- _) n5 i+ S  L, w9 q! X12 %.oe674: %.c
* {0 V" S7 Q1 t/ v$ Y& h: s13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
+ D- k- V, `2 A# h3 K: Q1 {! Y14
/ `# c- l: D/ a# ~! c+ p15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
3 Z" P& ]8 ^: E) A0 ]16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
; ?2 H$ v. o3 v' u1 |( S17             xdc.tools.configuro -o configuro                        \' i- O1 @0 I1 f3 M# N
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
5 p% W, t6 X. a! u" `19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
/ K* d- y3 Z# w0 B20             -r release Dsp.cfg3 E5 `- H/ d/ i. z4 g- s
21 0 P$ d, f0 V! Z: |" ?* g
22 clean::! Q+ G) x; ]+ L" J2 w; I1 d) k: Z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674+ L) v  O0 z. Q5 Z) p5 H4 V* k" o
24 3 {5 a( m$ O" F1 _2 W5 e! G
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages! v# }$ n9 O; n' M+ l$ u$ |/ ]) I* X
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
5 Z$ Z) W# L% ]: _" [) b( ^27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages; v1 j$ A" D5 a: i' l
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages% L5 k3 `3 K5 L& |* [; ^: }
29 5 m0 W) _. }5 X4 U' z* [
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)  d. \) _6 v) t9 j7 c( ~6 Z3 ]* w
31 ! ?. y! P+ ^, R6 Q* ~3 I
32 CC = $(CGTOOLS)/bin/cl6x -c                         1 U+ k2 V5 C7 t0 I  v4 Q2 _
33 AR = $(CGTOOLS)/bin/ar6x rq
: d5 C& R0 _' n7 O) L34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi' _  u  W8 b2 i! |
35 ST = $(CGTOOLS)/bin/strip6x
1 Q8 V" u$ V+ m, D9 F" W36 & {2 y+ z( i, R
37 CPPFLAGS =1 i& ~) A1 X; w* O, j' h1 b6 m
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
% \+ x4 C- O7 Y1 t) Q39
' ]& M! n' A* P5 T+ @8 |+ ]* g40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)) i: U# z6 \2 Q! J
41 8 m& \- _3 G% d; Y/ }5 {% W1 S
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     5 [6 M1 Z7 I$ J
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
1 R1 @0 _  E7 E; o) o: h6 G0 @9 r./host/makefile
7 a* k  L, i; y" M9 O* |
( {5 B9 u; _3 v9 ] 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件( v- K: z. }* c6 a% w2 q
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
+ q. F" l% C; b, R- E 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
  [. g* f$ D' f/ p+ |0 [# k5 Y+ z 4
/ d3 M# E: }6 y- V 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
; D; `( u& S' J- a 6
, D) a3 O' H4 T0 n2 x 7 all:* u6 w- d" |, Q# l" G: Y
8     $(MAKE) app_host
" n7 b; o2 [9 h 9
/ q5 M% c, l- [& P3 L10 clean::9 u$ F! t7 x5 c% X
11     rm *.ov5T* *.map app_host! U/ }; d# W3 Y
12
( g6 c& r1 \& Z9 U+ x13 app_host(objs) $(libs)( \* W6 `6 b% G8 c9 ^! n, ]
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 W# g& {# E' a/ S  q9 R1 {
15 + i6 R9 a3 }% ?0 j2 l9 i! X
16 %.ov5T: %.c
8 z, A8 D7 L0 y17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $</ F  y8 B. n7 p+ d
18 $ y" |5 }9 l6 I* r
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t, A& i* H9 }* w/ |  c/ i  i
20 AR = $(CGT_ARM_PREFIX)ar cr( ~$ I9 T# Q0 D+ @/ Z
21 LD = $(CGT_ARM_PREFIX)gcc
( V$ s) m- B0 @% W8 k/ |( }5 a22
+ S! q) i% i5 G% m7 O23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
7 t1 s8 _3 v/ D2 w$ I6 o8 X0 V1 B: g6 `24            -Dxdc_target_types__=gnu/targets/arm/std.h
7 G. Z5 `1 E7 y( N9 c25   w6 r8 ~1 `1 o* p* p( b% q
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
5 j/ p9 A! D6 [& w. i27          -I $(SYSLINK_INSTALL_DIR)/packages                        \. K- |5 g# }7 z
28          -I $(BIOS_INSTALL_DIR)/packages                           \
- X( n$ k; [6 }/ I29          -I $(IPC_INSTALL_DIR)/packages0 d3 y. b5 {% g- C" K0 Z- T% ]
30 6 b/ z- \0 ^* Q8 q% T5 E
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map# l2 K+ r9 v" ?: x6 S. c6 o
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
$ m8 B  v- @+ \编译工程* J" q, m( ]# a" X) z1 |
0 a" U8 d+ H: Y8 U: w
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
( R8 {+ d* i) b& y7 M3 S" o- _
( Q  H$ |/ t/ A, m运行工程( ^2 d$ ?0 D" F' x9 q. t3 p! s

) h! I+ |* u" k  P5 j4 S 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。* b2 d6 M$ M* s. A7 ^

8 y5 I+ C4 s; m% V; q, p1. insmod syslink.ko                    # 加载 syslink 内核模块' N9 b  s: a# O( |3 {( x  C
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序0 ?( X( a6 U; n
3. arm_app                              # 运行 ARM 端程序. N8 j) [" O+ j) b+ L
4. slaveloader shutdown DSP             # 停止 DSP 端程序
6 z( L6 P5 `9 ?8 x0 [ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 4 I/ {, j. f* H5 T; V! O
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
4 ^  d  `6 U- B" d" }4 M( L7 i3 p% w( t7 }! O$ x% @# D
1 #!/bin/sh- P7 g( y  b* k- G6 J8 V( Z
2
% r( W' k! \% O 3 set -x9 }, L5 J4 y9 J, N# t$ m; k  O% F$ l
4
; |8 S0 h7 E$ T5 s 5 insmod syslink.ko
8 l1 _' g) ~: t. T4 l7 j' W 6
" x" r, \6 e! S6 v1 J  N 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
' s+ v" I' \8 i  M+ n! \ 8 $ u, X* I% @( V, S, {
9 ../host/app_host DSP! C: S3 E) a; c% t
10
) f/ H: X; J( u11 ./slaveloader shutdown DSP
  A+ u7 _+ [$ g/ u
5 I. K$ W# j6 G! u- o: _' ?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
* z4 U  g, H) ?( O$ s建立工程
. ^0 Y  i. ^2 o& ?% ?0 T" w
# @8 l+ B, _2 L 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

- I3 D) O1 B& v# ~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
/ a: O) S: h3 v% c建立工程
4 Y* {2 i1 ]  G/ S5 W: `# d
- d8 F1 o( j: W) v 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

9 N* l3 M% l( F. lslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
) S% ~% m" V2 r4 b0 Wslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

* ]# W0 O) R$ N5 J5 f% T/ Qdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 15:14 , Processed in 0.044753 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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