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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,/ o5 P. _; ^' ~/ A+ K
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。! z- h: m  f! s- B) I

1 F3 c2 Z8 H7 }; {& f, t" w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?# `% R% K" t4 L& \* \" y; A, n$ F
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
& ^: A4 {8 f3 T* j* U& b* o; S  g3 X$ c8 P. C  f
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。) c# F, _. o. B% \0 W9 K
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。* X) I, S. j, y1 E& B9 M8 U7 u) B
 “清理”过的例程的源码如下:3 g2 [+ N8 K, v: ^7 ]4 c
, s& ^2 g: B) B4 ?, _
├── dsp" x7 U; x3 a, }1 {9 d1 `5 u
│   ├── Dsp.cfg4 L3 @% N3 w+ v2 z7 b
│   ├── main_dsp.c
) h' D7 J& {5 a, d3 X│   ├── Server.c7 S6 N9 e9 {! W. f' y4 v9 m7 C
│   └── Server.h+ A& Q' m1 e2 a9 Z- M& Y" @
├── host
: K3 v+ F" R+ r2 ]│   ├── App.c$ K* y( c. C& E; k/ x! s
│   ├── App.h+ y, M6 Q" Q8 M6 U6 j2 ?
│   └── main_host.c; l: v5 M' h& N# A
└── shared
! o. Z* `  L" e1 \4 I$ y   ├── config.bld
1 b( U( v1 \  ]% J8 c6 ^   └── SystemCfg.h. w% b! d$ A4 d- z4 ~
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
* D# s; w/ S( p7 K8 |6 d
' c  a- o# [" b- v3 [5 f- Z8 i./makefile
- e1 r, a8 ^- ]- X$ a# H" e2 Y6 Z$ n; M2 @6 {
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05  W3 X$ Q2 D! ~. t) T4 i
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_157 C2 {* @, P, e& G1 U6 I
3 0 F  m/ w, G; }& k6 v$ V$ ~# g4 k
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
# o* i4 G) J. U 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-* r8 C5 k# z! }& h# f1 ]
6 : I! V* d! I# Z8 I  h' r( m( }2 T
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50- P  i4 e! }$ ?6 r2 B2 V  ^
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72) |% E& e9 U* X" s
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4  [+ M1 |' I/ z+ G7 U* r
10
* G  X: X5 z3 ?2 J$ B6 E* Q11 export SYSLINK_INSTALL_DIR      \6 {& g4 ]; N2 z8 k9 {, j1 R% N3 @
12        IPC_INSTALL_DIR          \$ l: k7 r4 Y, k% ^
13        BIOS_INSTALL_DIR         \
. k( M) G. W! v  v7 ]! B6 R14        XDC_INSTALL_DIR          \
( q. B2 C/ c* D15        CGT_C674_ELF_INSTALL_DIR \
. h% W9 M4 f6 l2 `2 s8 z: f16        CGT_ARM_PREFIX& c5 c2 |4 }" e: S
17 * _# H2 g. e1 u4 `
18 all:
9 N) P& F# L1 D. G  J19     make -C host all
9 u' [- z. s  n: k, l20     make -C dsp all" H$ {4 M2 x' z' q+ M
21 ; k4 T! A9 v* R8 q
22 clean::3 B" o: J% O- P3 U. y& K8 x
23     make -C host clean
; R/ s* w# T* E8 {24     make -C dsp clean
2 d4 e& n; s2 m, q8 d6 r./dsp/makefile, n; O- ~7 B- E& r
8 u' w4 T2 u9 g3 c
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
& e! H: u+ z3 M3 O: u4 ~! l+ S( g3 ~* g 2 objs = $(patsubst %.c,%.oe674,$(srcs))
0 \5 m* [0 Z5 _+ h( _# w0 }, z 3 libs = configuro/linker.cmd
0 N% _- ^' C  H% H 4
. ~+ r* Z  G& U" N8 o 5 all: configuro/linker.cmd' j  j# ]" d' J' Z6 ]  V
6     make server_dsp.xe6742 `7 U6 K/ B& t9 h* j; C4 y1 e
7
; y, \' [! f* N$ t7 E+ R3 K+ R: |( w 8 server_dsp.xe674: $(objs) $(libs)
; `5 l& V6 |6 Q, G; Y! J+ n& Z) b+ z 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)/ e  g- y6 V+ i: `% t
10
: e  {( \9 w0 t6 b11 %.oe674: %.h" x5 k0 S7 h# Q( Y( ]1 a6 S# z
12 %.oe674: %.c8 S5 G2 {  |% C# I: G+ i, j, K
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<' ]" K. `6 K: V' v9 L
14
  s. @7 ]1 Y, E0 [$ q' o0 Y15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
; ?* B$ V" i# T' [: a' f16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
; o1 i8 m8 D) o8 H7 n/ d17             xdc.tools.configuro -o configuro                        \& l/ f7 u7 |' r  F# d8 e- L
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \" x4 t6 S0 [* I$ w% c# e2 c
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
! U7 s  [/ P$ M' v7 @. K' @9 m20             -r release Dsp.cfg
, A+ v  ?! a& c  U& h21
0 I0 e* H( b& J0 `; c5 h22 clean::
  W' L& ]9 P1 X7 z. @* A23     rm -rf configuro *.oe674  *.map server_dsp.xe674! f4 B( j2 n2 f6 `, ]
24 2 k$ w  m- A+ n" q* b$ w
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
9 w% V( ~/ F0 l2 Q+ u% p$ N26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages) F7 u1 y! c' Q! ^# s! R
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
: V) i6 ~& b" @28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
% n2 m" n2 ]% ]# _; I$ @29
9 `+ D5 M5 u8 C- E  s) D6 C7 @6 H30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
- i9 `! ^9 n7 a31
6 k3 c6 K% }% |  k4 B0 m  e  o8 N32 CC = $(CGTOOLS)/bin/cl6x -c                        
+ J  l( S7 x' n0 P$ Z+ ^$ @$ P- f33 AR = $(CGTOOLS)/bin/ar6x rq
* P) w) N. a1 y4 u* h& i34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi# W9 g; ^& k5 U. a
35 ST = $(CGTOOLS)/bin/strip6x" j) H4 [, _( e1 ?2 J
36 ; E4 \0 e" ?  \  _
37 CPPFLAGS =
2 \5 x' |& G5 U% u$ C! o/ r38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
* _9 @+ X9 P+ E% j1 S1 V39
* [: Q/ _; ?' ~: A# }5 a  T- n% K40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)3 |6 Y8 Y+ Q6 \
41 7 W. W; U. P2 J; L! `* a+ K6 k
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     - h  \% l+ |% {/ j& x! H0 @# \
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. j; ~3 c& A" F./host/makefile3 i+ M4 ]" c; y) o9 [5 y
0 q' C, x% q1 t+ i5 m$ h$ g
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
! U3 N& t# c6 ~* O% ?8 f3 M 2 objs = $(patsubst %.c,%.ov5T,$(srcs))# g* S, p+ U6 W. h0 v4 y
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug4 h: S" W( t0 R  S
4 : H9 K: t, n- l+ }# k6 M
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)), ^) y6 J& p9 Z
6
  U+ b  P. u6 x: }+ a3 e 7 all:' W9 b/ I$ |" B
8     $(MAKE) app_host
# P! g( x8 g9 @, |4 b- ^0 K- E& F 9
2 J! J0 ^1 `! s) A4 W; x. W10 clean::9 d8 Z, h% q# J4 Z8 e% o
11     rm *.ov5T* *.map app_host" P2 T+ l( e* b2 c9 i1 j
12
" {& C: K; r" v/ K, E7 I; Z2 V8 j. A13 app_host(objs) $(libs). o% Y5 ~8 ~) N. J0 n; ]
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
6 \: i* h$ v2 t% l3 m- Q0 I$ ^15
% ^7 p; r' W) \% |! ~3 {/ o16 %.ov5T: %.c
5 g, w& W# {/ j+ z1 D17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
5 i4 O; ~- Z  W0 r6 Z8 d18 9 \+ ^' x, I" ~5 c: d
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t2 Z. M2 F9 F* O# B/ Y  ^1 `- `/ {
20 AR = $(CGT_ARM_PREFIX)ar cr
$ p: W/ ?) u4 ?. |/ O5 M21 LD = $(CGT_ARM_PREFIX)gcc
2 v1 E' a/ V, D% n; G( x22
+ o9 p- G" S4 c' u. ?$ b23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
# f$ I6 d6 O8 @5 G: B2 q/ i24            -Dxdc_target_types__=gnu/targets/arm/std.h
4 t% O8 I% B& D0 z9 y25 7 I. v8 u( a; b6 O) Y1 e; E; H! ]
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
; k' V' X. T. A# X27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
( H4 R5 G# r9 `" |28          -I $(BIOS_INSTALL_DIR)/packages                           \
. ^' j' e# r; S. S' A& U6 |9 [29          -I $(IPC_INSTALL_DIR)/packages
: _  a2 s! i1 C( j30
* z4 x9 h3 ~9 ?4 p! f/ S- l. j31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map1 y4 v) N$ Z8 p& X1 v
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序. h4 \5 z  p5 i9 i' }
编译工程* B6 D) s4 v- }4 w8 Y9 Q+ d* F5 H+ W

6 O3 a  o7 i( g# ^# R; Z  P. } makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
9 l0 ]$ }5 t8 K4 j' Q* D7 l7 Y
5 y( ~) D% u4 F& Q! z运行工程" x; R" ^6 }% L' q) K6 m
5 B3 P, ]6 g4 ?+ D! c; w
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
6 a, I3 n# r" d- ~5 M/ x; _4 D* \) j) C& P' Y+ g8 o$ |1 v6 q# N
1. insmod syslink.ko                    # 加载 syslink 内核模块4 j! T/ X' K4 O3 z- a& i
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
! `0 t& Y4 t- R0 z. n3. arm_app                              # 运行 ARM 端程序
0 v+ i! g7 h* B/ L2 s6 H4. slaveloader shutdown DSP             # 停止 DSP 端程序
! J9 x5 U8 {# Q) d3 |9 k9 u0 I+ Z sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 . w! W9 |' E7 r& }3 C) d2 |
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。0 T% z0 z# I8 p' E* o& d

+ S) `% \0 Z, }5 w# S: E/ _4 k 1 #!/bin/sh
" F. ~2 x2 B& I& @+ s 2
: g2 c$ O: P" n' a 3 set -x
& c2 a- w8 w; y/ z+ \; o" B& D 4 . @5 _: d% g  h* H3 K4 t: Z
5 insmod syslink.ko
6 b0 z6 P' S: u/ m( b1 j* S. ^ 6 ! `" d2 a9 b: w
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674" e7 O5 c" x  b5 a! f6 X9 u
8 ) f' e) I, Q% c3 A6 a
9 ../host/app_host DSP
' y' }$ ~# X' y% g7 T5 x* ]10
7 c% ^: f( b/ o) d2 B11 ./slaveloader shutdown DSP
# q; I, Q: X# Q
9 i- `9 U! K1 r0 Y
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05& }6 t3 G. h- z+ ~$ B
建立工程
6 h! f5 ]' M4 s/ S( P2 N! Q, |& n
: z: }1 O+ j$ Z% r 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

5 T. F- ^$ N. X7 Fslaveloader 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. S* {& d- g4 ~8 u1 E. K8 O: X! Z
建立工程
2 Z3 w2 `( L" r( b2 C( W( I
3 t1 {7 s$ e9 f+ |/ V 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
7 L; N  U# s5 k+ a& r1 Y7 d; V" v
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2088

积分

创龙

Rank: 8Rank: 8

积分
2088
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
+ K& m' G, z& t* ]slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

! O! Q2 L" h: ]dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 19:12 , Processed in 0.042225 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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