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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8008|回复: 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) k/ x3 i6 R9 B4 i
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。. T/ Z7 m) ~( k5 f) M9 B$ Y
( ^& W5 r8 F* a6 Q7 l4 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
" ^% Y6 n4 L' g  Q6 y& I+ ?
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程$ i) O: _! R! L0 m% h

6 d2 I0 C; C$ Y) S5 f, f* \ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
, y$ @# c6 ?, e7 `0 o9 e 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
, e8 n, {. d6 s/ y" X “清理”过的例程的源码如下:6 p; w; g6 G  f* u5 A
3 P4 s- ?* J/ {. l) R, \
├── dsp
- |3 q. @( y3 r, M│   ├── Dsp.cfg: N" E) k; Z' ]1 f
│   ├── main_dsp.c
$ K6 E' z8 N  ^6 M2 Q! f│   ├── Server.c
" x% Z* N1 w9 X* g/ R│   └── Server.h  ^8 s+ L9 ]7 i( O4 U& {% L; ?
├── host7 B7 Q; k! K; G1 K1 L1 v6 R
│   ├── App.c7 ]. k9 D/ z; |! F
│   ├── App.h
9 z( }8 t# d9 m6 [2 ]2 O8 l│   └── main_host.c
. o; ^* l6 s6 J2 ^+ h" t└── shared
. ^) u7 G, [. f: j$ I! [) \  D   ├── config.bld
5 s0 X5 w% ~' N' f   └── SystemCfg.h. O0 k0 R/ g* M
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
- v0 N- z5 L5 f' L8 c; r% T+ p: G( Z- j
./makefile9 R5 U2 c% K: f8 p  I9 W6 ?( y) Y
8 X8 a% U5 k; ~, S) o
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
" J1 M- K7 k+ Z7 `- A 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
6 z2 a. u8 c2 A8 |9 L0 y$ A 3
  p& s7 Y) }: K6 ~8 M 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi, q) V  }+ S' p* g" i
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-2 T2 m" J9 V+ S8 ]; v8 ]; t
6 9 Z6 Y: v. t4 r
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
, W( D# V2 v4 R8 B 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_721 ~. Q2 J( k$ U1 D$ Z5 j
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
2 l8 d2 W- ]8 o8 j) `6 u10
1 t5 j: r- _; h1 d6 O  D11 export SYSLINK_INSTALL_DIR      \
- [3 B9 q/ V3 Y( b" y12        IPC_INSTALL_DIR          \
' A# z6 H; X/ u: x! Y4 S  y' T13        BIOS_INSTALL_DIR         \
0 L* ^/ |: I; P( h; r14        XDC_INSTALL_DIR          \
( V) d! P, R  h0 h; R/ p0 ]6 @15        CGT_C674_ELF_INSTALL_DIR \4 R9 v! J! H3 _2 R
16        CGT_ARM_PREFIX
  P% M4 K9 f+ d) j0 _17 * o3 w5 K1 u: S1 u
18 all:
2 a! ~6 s" ?9 S3 D/ q2 k" B19     make -C host all
& w. P9 t1 w1 ^' B& J5 |0 @20     make -C dsp all- G; C# i, q5 Q; h7 B1 o( |: k
21 ; D9 \% x  O# a( t: q* g  M
22 clean::
' {5 J3 }$ Y* Z! D" c& d23     make -C host clean
0 U" @7 e: i' H( o/ U24     make -C dsp clean# i7 z$ u0 j( f: B  S8 M! w$ X( k  h& n. w3 i
./dsp/makefile
. b/ Z3 E) a( L4 {: D+ R+ {9 D# g( B/ O8 M- L/ s
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
3 _* B. m8 L1 x2 O  Y% K 2 objs = $(patsubst %.c,%.oe674,$(srcs))8 Z8 f7 c8 t& b5 l2 ]. Q/ ^
3 libs = configuro/linker.cmd$ |) t/ W  L) F2 M9 Q
4
. F( {$ q5 e) k* \) T 5 all: configuro/linker.cmd  D( ?, L3 T% s& f% e7 \" ~+ ]
6     make server_dsp.xe674: o, N* q6 j: F; g
7 / d/ W8 u: x) y) q4 v
8 server_dsp.xe674: $(objs) $(libs)* W3 j* n  L5 X% l6 H2 H
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
9 E; g0 x9 `! D7 {1 W, C10
4 V% P0 V2 P- V' u: k+ |0 i11 %.oe674: %.h
( e8 s/ e$ e  U12 %.oe674: %.c) R: L* J# k1 s$ ?
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<" c1 z5 W5 B# f  S$ R$ G1 i" ?
14 : d* x" D/ I# R  [* y& Q5 C1 i
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
  L+ Q( t2 b# p) i1 i16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
( S- z) M1 W" W. H17             xdc.tools.configuro -o configuro                        \# {0 G. @* x( d. V
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \0 F9 T' M5 D, d# [! j
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
" C; `+ a7 ~0 j' y3 R2 Y5 c# S20             -r release Dsp.cfg
3 ^4 k+ _6 d$ }6 Q! w21
" o7 O& |/ O4 Q8 p( X$ Q9 A22 clean::
% E0 r0 t: i* T6 t  _23     rm -rf configuro *.oe674  *.map server_dsp.xe674
8 O# s8 @1 M' `5 S/ b1 n24
* U, @0 _% v' q0 p% n" j: k25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages9 W. }2 r9 S+ I
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
9 g% K& I2 j1 @) M1 H# c0 m% ?27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages: D( P/ T4 y% a4 T7 E- h
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
9 U' p) [3 W9 h4 l; `29
" L1 p: K7 \* |- z30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)% e6 X5 ]6 P% r
31
" l( D5 N4 `/ F, Q3 t. x32 CC = $(CGTOOLS)/bin/cl6x -c                         & Q' D& U! A. {7 h
33 AR = $(CGTOOLS)/bin/ar6x rq
3 A9 B: |7 U: J9 v# R- [34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi: N: V0 c; G7 L  |
35 ST = $(CGTOOLS)/bin/strip6x& w+ ^1 `2 |# C& x
36
7 x0 @/ g7 S! L& l0 }  ^( m/ O37 CPPFLAGS =8 |0 n  S" c( [- X3 ^4 l
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)/ z, A9 _6 I1 z$ a9 ]
39
, T! \! y; D; l4 U; d40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
! K  I  C# N3 h/ T# m41 " L' w3 j: ]+ d6 F) ?- q
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
2 P1 K7 ^1 T6 \: E/ w6 J43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
9 y) |( N$ i6 `3 E' u. w1 B8 ]./host/makefile
+ J) ~) K! `$ b* |3 ~# r+ S
! l) o9 `$ ~5 _! T 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
/ [; E1 x3 ~+ \ 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
4 e( W4 b9 M% e9 X# Y# A 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
6 L% j4 E! t0 P) o/ J 4 & Z9 X% z) \* T
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
" s$ D$ r: @" }% d7 v6 X5 G2 |" [ 6
# l& a% K; h0 Q( R/ U+ `+ z' `, k 7 all:% Z. c' T+ t: e% G
8     $(MAKE) app_host! G4 y( ]8 h6 V6 {* j2 [# R
9
+ o$ H0 M$ N/ t/ S% ?10 clean::
, B! F2 E# X- l" @. l$ j11     rm *.ov5T* *.map app_host! Y# S. \* n- _, f, F& A# B
12 / x) \5 W! [; p2 v8 O
13 app_host(objs) $(libs)1 i/ `! M0 E& z+ i$ l1 K( p
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: k/ ~! I. N) U  v8 j15
8 I$ C# ^3 V% M/ V3 [* N16 %.ov5T: %.c7 R0 _! `/ i7 P1 c' H
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
( L7 X/ ?- a- Q18
$ C' C$ {2 O, `19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t7 J$ n$ O. G3 N3 q* t0 q
20 AR = $(CGT_ARM_PREFIX)ar cr. i. e9 N( ?$ l& A
21 LD = $(CGT_ARM_PREFIX)gcc9 M% S' o- G6 l. ]
22
" Z. |/ G/ _4 v1 k" F23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \* {: r; A% q* K/ O6 h
24            -Dxdc_target_types__=gnu/targets/arm/std.h, F# }6 p; L9 d7 f5 {, B
25
' O8 U0 u* c5 W% m. r26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
7 G' V* p+ q2 _0 A( _; ~27          -I $(SYSLINK_INSTALL_DIR)/packages                        \$ v0 U" O, P2 k6 Q3 c9 J3 p
28          -I $(BIOS_INSTALL_DIR)/packages                           \
  K# {$ d) Y/ K- u29          -I $(IPC_INSTALL_DIR)/packages3 T% |5 E; H! `1 R9 U$ i
30 ' ^& o, {3 ]& O# O2 [6 c
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map* x( n4 H0 |! W- s$ W8 m
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
% }1 k8 k  U( X+ }- N5 a0 W编译工程& k9 {9 e/ u7 G. A0 R8 [

( X. r7 A& X7 f  A: X6 b9 b makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。. n1 i# ?/ C9 |+ M! G* z! w

9 _5 Z. W" r; O& D运行工程
# S3 E6 a) q2 B1 |3 e% n3 Y" w6 {7 |* X1 v6 O, a: _! M5 Z
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
" @: _  y5 y/ w) W5 u5 V3 k4 T5 H4 y! }  x
1. insmod syslink.ko                    # 加载 syslink 内核模块" ~9 ?8 [- t" `0 B. z' b2 S
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
! h4 S3 I0 S( W; U2 m* }0 Q, U3. arm_app                              # 运行 ARM 端程序
8 q5 o( D8 ^1 k/ L5 ]9 K- E4. slaveloader shutdown DSP             # 停止 DSP 端程序
* J; G; s% H  B0 y& ^ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 & h/ ~% p5 @5 e% z* M
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。7 c4 |% x5 B5 t1 T

- N' i/ `7 d! D 1 #!/bin/sh
# g$ u8 {: O- Q- U7 c1 N# ]; @7 t 2
' r- L3 }! f5 E6 ?! ^ 3 set -x8 O( t/ \0 o' y3 p
4 9 w+ @8 q: I& r. l: ^( b$ L
5 insmod syslink.ko0 [7 e; H" q& N3 F) e  T# W" S; g4 h
6 5 U0 U% H4 `' z1 ~+ m; Y
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
! A1 a) E' ~( w+ i' u1 | 8
4 O, d3 S& O; s* L7 e/ b( f& Y! }6 O 9 ../host/app_host DSP
* M) @8 o. Y/ b9 U) Z# W, |( o: l10
+ _) w+ M& w! x) o11 ./slaveloader shutdown DSP
8 A1 a; s1 Y8 H/ I
3 Q3 \$ n8 g1 b, A: v) {6 j; h
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:052 i, Z! a7 T! y6 N+ u* Z6 l
建立工程
$ {4 f' Q  x; Q3 Q$ O. Q9 h' N2 c6 m# H# e3 x* c9 `
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

$ ?7 q) B7 `) [2 s: D( pslaveloader 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: F; T$ v9 V) X( Y
建立工程
4 I+ L* x. l' L4 J1 f" n* U- B& u  L9 l5 z
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" C9 o, n* c% i5 y5 C* I8 xslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2110

积分

创龙

Rank: 8Rank: 8

积分
2110
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40% R) b, k0 W& P# s! n
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
! ?0 O# V! h& {& g
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 12:33 , Processed in 0.044866 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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