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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7589|回复: 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$ ~* j2 @6 V4 |, s% z0 Vdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
5 |+ T6 X4 i) h7 [. i# [5 j0 m0 v
5 ~+ v# i% N- ?0 y9 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程( z6 _' q+ a+ K. C  |

  U1 C4 o2 X/ N" `) Q( y- c( p4 ~ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。* R( `4 U1 P% b! w1 x9 n5 o
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。# D/ v4 v$ }$ ?* A
 “清理”过的例程的源码如下:
/ `9 F, y1 q  L# l5 B6 U( z% [6 p* v8 Y3 ~
├── dsp
: C3 \6 n* n3 E" T2 U│   ├── Dsp.cfg8 R: e% E4 x: j( G' i; z6 y7 T" t
│   ├── main_dsp.c! J) X8 V. @% R! A0 [& l/ d! n: U
│   ├── Server.c' d# X9 k- Z) y3 T, ]+ T# d
│   └── Server.h
8 v& }: K  J5 j3 r9 L' M) u├── host) `" j  P( m* v9 d& Y
│   ├── App.c
; |% h/ D; T7 Z4 k$ A2 C│   ├── App.h0 d6 d+ p# b$ N) K4 L
│   └── main_host.c# p! r) o8 }$ W2 t0 i
└── shared; R% {- c) W" V( ?1 ]9 ~
   ├── config.bld
3 T  D8 g7 x, P# I6 [   └── SystemCfg.h$ a; R0 {% @$ B4 y. o7 k0 H: B
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
9 K* O2 W2 |" @0 W3 q, F" }3 }9 ?, U0 T) n# C. \
./makefile! \- {$ S5 i& w" ]5 ~: ?

: Q7 F/ I% T$ F 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
% U+ o4 O/ H" s. |2 D  @, L 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15" q- g0 R0 w4 _( p
3
2 j& u0 M/ s% a% F8 R 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' h; v; Y, W! r, j 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
/ z- P8 Y, o3 {" O: M8 O+ o 6 , [; y5 R/ W9 Z3 }9 {, H
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
1 |0 q/ d0 ]3 w- k. z# u5 N 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_726 g7 H* }3 k  z
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
, Q8 y$ [' G2 d  X+ o10 : p9 h1 O  p2 p! W, B' P
11 export SYSLINK_INSTALL_DIR      \
  a% _3 q# q& A12        IPC_INSTALL_DIR          \
0 M6 d! h& p4 H1 s4 Y13        BIOS_INSTALL_DIR         \
3 H& R: Z% U$ Q. j* H+ i14        XDC_INSTALL_DIR          \' u* A/ T$ `7 O5 U
15        CGT_C674_ELF_INSTALL_DIR \
( |1 Z$ o  }& C! |, b( s16        CGT_ARM_PREFIX
) i: X5 m) o: Y. n$ C8 |* ~0 I17 7 e" x2 m* I% J1 t$ u
18 all:
( R6 H/ l1 q/ V4 E19     make -C host all
" ?8 |) B/ L% j  S2 Q20     make -C dsp all
- ~; D3 X! ~8 F, b' b  r! d5 x21 9 {0 `& A& @5 u. j
22 clean::
7 I- z* ^. h9 y0 a% s23     make -C host clean
; H# d0 E- l; ]) v' M- d6 Y& ?24     make -C dsp clean
0 ?) K4 B5 p" F- R./dsp/makefile
* k9 \# M( C9 X( V, T. Z+ D2 `
1 n" z, c) X$ C9 J/ l 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件( B6 N* W8 Y/ r
2 objs = $(patsubst %.c,%.oe674,$(srcs))
7 q7 F  @9 T; F: }' V 3 libs = configuro/linker.cmd% J# |$ M7 O: M$ l, m
4
# j* s% y' K6 V 5 all: configuro/linker.cmd
# O  n& [5 b; c/ }  C7 [7 g3 L 6     make server_dsp.xe674; p- i: a4 ]& ?5 o, Y
7
- w! J# w% W+ p5 A$ Z# G& M 8 server_dsp.xe674: $(objs) $(libs)
/ N' F  [$ U9 |  q8 ~$ y 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS); j7 w: H* y! L3 P4 t
10
4 o2 w. ?( Y9 ~, N11 %.oe674: %.h9 ~. u- ~& H4 Z- @6 d+ P: h( w
12 %.oe674: %.c5 {/ _9 _: ]; z# k5 R8 Y. Y
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<+ }* h) a+ z( i; ]
14
; ]! D# ~/ c  p! x15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld+ V% `" v+ I# J, A" \* ^
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
  A. N5 F1 |* X17             xdc.tools.configuro -o configuro                        \
8 @$ |# M9 |' N/ f& P! M18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
% m! X6 I' N! j4 T; \, u19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \/ G  m5 M5 I7 p% _; i) h
20             -r release Dsp.cfg8 K! r* G3 h# a7 E
21 % K* w; H) O* ?3 o- T4 t
22 clean::" ?5 Z8 f- ]: N8 \! o- ~
23     rm -rf configuro *.oe674  *.map server_dsp.xe6740 _" t1 a9 A2 ?6 {) \& ]1 i; n
24 $ w$ P, g! M8 q! f* J" W
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages+ j- g0 S" ]$ \$ s0 u7 t6 b
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages% w4 s- G7 |& d. w1 |: b4 a
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages0 C# q5 ?6 K8 a. N( a9 D7 k
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages! m6 ~: S1 k- C$ p0 E' f; W* }9 n
29
/ j8 j. r5 W4 a& h7 x+ L- M6 g30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
0 z% T* L. ?) @$ b31 + A3 A+ F) _3 h0 l( v9 L
32 CC = $(CGTOOLS)/bin/cl6x -c                         - o7 P+ `- c. V  h& V, l1 y
33 AR = $(CGTOOLS)/bin/ar6x rq
4 _3 w) E  A. C: N1 d: _9 O. J34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
$ j9 l) n* ^/ o; w" ], N35 ST = $(CGTOOLS)/bin/strip6x
% f  t3 @0 t  D* u7 }# Z8 `$ E36
/ E/ F* \/ }0 y! x4 ^8 G) D37 CPPFLAGS =% c7 F5 l! y$ B2 V. Y) i* O7 ?8 p* G
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)8 }9 @- ~7 T% M
39 " ?, I, I* g  G5 O& L$ P( b+ o
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)6 h. _% l. T* Q2 c6 E
41 % }; J- e: Z* P/ Q
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
' v; F7 F6 V: t8 Q+ e/ g9 C5 n43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
: {, S$ }6 V5 f& P; i./host/makefile4 w6 V' _6 n5 Y( Q5 X

! V  X0 M$ x, y 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
* P  Y1 q  E" {# Z 2 objs = $(patsubst %.c,%.ov5T,$(srcs))' Q, z8 a. e% `! Q! X
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
8 N/ d# N2 q" |; U2 g: g: r! X0 B 4 8 H0 O* e9 E2 W! ^+ L1 l
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))- p0 f8 ?' Y0 Y  m% H& L1 [
6
- D' r: A9 N/ T# A 7 all:
9 \0 J( @' J( N4 `+ p- C3 P. L 8     $(MAKE) app_host
$ }6 a. L9 ~; u$ F* Z# S/ n 9 4 K3 \7 f  Q+ J; K  ?. w  v6 S
10 clean::$ }7 \  \% Z0 ?9 [% m" k2 P. m: `
11     rm *.ov5T* *.map app_host
- l: D  r- I6 N  x$ p4 P12
6 G$ Q7 }1 [& A# a13 app_host(objs) $(libs)
; a3 B9 @" m9 j8 g14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)% ]* r( f0 E" F+ b  E4 |6 y
15
/ S% v. a) {( ?; o& k1 D6 [) |, f16 %.ov5T: %.c
% E2 T# H! q% d6 a$ j2 C* B) j# ?2 r( l17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
/ K+ Z. @( g4 a4 W" K18 ! a6 Q4 X9 t9 E& Z( @2 s" A7 z
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
5 l+ a( D# A1 `: w9 Q20 AR = $(CGT_ARM_PREFIX)ar cr
- s4 i5 I+ D/ R' i8 y9 \9 l21 LD = $(CGT_ARM_PREFIX)gcc! R" O. A$ }  {" F
22
0 V) z2 Y3 A0 q. M& M- |: p23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \3 r# R% ]0 `& [( U/ C! H
24            -Dxdc_target_types__=gnu/targets/arm/std.h, K3 |# \7 R! D9 M" }. a2 b
25
+ o, e, q, C+ x; C# T' ?+ _26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
1 G- |# ~7 {; v+ y! B27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
2 m; f" S- @/ f  ^. H- l* D28          -I $(BIOS_INSTALL_DIR)/packages                           \
# \# C3 n) G5 Z5 W6 J! A29          -I $(IPC_INSTALL_DIR)/packages
. c* W" _8 J! K4 [4 H30 , S! _. [, A5 i5 Q8 v
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
7 u) ?& {* V5 b32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序8 q: g( a7 Z1 R, x  J
编译工程
; U5 h% C! M% c3 p; k. C
. j- p0 C; [3 \  t' Y makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
  j! O- n5 H- n/ M1 P4 b: T6 e* `3 M3 a, _: V8 g
运行工程5 X$ L: _! w$ N: P
+ q6 D; e; G: f4 [
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。# A) x" z. ^3 O9 S- E

/ l0 _6 @* O9 H" s1. insmod syslink.ko                    # 加载 syslink 内核模块% l$ K$ V/ b4 t3 W1 k) M
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
3 n& ?3 W: A- V; v: ]( t8 I3. arm_app                              # 运行 ARM 端程序- W. j4 o6 r5 N# _' f: p. ?% o
4. slaveloader shutdown DSP             # 停止 DSP 端程序
9 U2 V4 ]% p+ R: }! H) z sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 $ H  R- G: N+ o* o* w
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
! E8 e" C2 S# K1 w, T" B
* W  ]! W' u9 Q; ]7 W 1 #!/bin/sh
8 H  x; N7 p% w8 w- P 2
5 @/ ], M( H3 P" z+ ]+ W* f$ ?7 b 3 set -x% G) R& y3 L4 ]& ?# C
4
0 ^, _. Q. Z  d+ L# o8 ? 5 insmod syslink.ko# u' Y- [  K  `2 y# g
6 + K3 }2 f. A% C/ Z5 O- ?; v( r
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
- e! w2 Y. a% i  d 8
/ r+ Y. i; E; T 9 ../host/app_host DSP
  L7 |9 s/ a; d, G10 : [9 X! ?* H/ ~4 g
11 ./slaveloader shutdown DSP' p9 c7 ]2 B( u0 \0 W% ^

8 X8 L, j2 s* x& @; M
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
; v# g' t  [; f: J建立工程, x% ~( o# i0 W1 T

) n) C, f" Y; O2 K# X" [2 n 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

# s2 K6 y+ {* v& b0 l+ Q( }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
7 L/ e& h8 s$ a' t3 J6 H. a建立工程3 p( }8 k; q3 ?, h

( X/ W& c9 @, ?4 i* h: D% L 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
# z, j5 U0 p3 u& u! v9 T  U
slaveloader 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:405 }% b  _8 `1 g' a; M# h4 X7 d
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

. Q0 o1 D" z, k4 [! U- K# S. Rdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 17:39 , Processed in 0.042238 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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