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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
8 J# l/ Y% T( R4 L6 V7 {- X7 Edsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。0 I% o; q: x( L% }

( d0 Q5 q) R8 _  _0 q$ I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
4 d7 K$ J: H& U7 I; M/ q! e! e7 p7 Z2 _4 v$ S
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
( e* D6 A0 w' }4 S, j. P7 F! n 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
! v+ V3 G# j' `* I1 ] “清理”过的例程的源码如下:
4 ~8 \: B+ X8 E& E, E. _
$ ?! ^2 S7 X# N* m6 z4 R├── dsp5 i2 _  E: v4 C
│   ├── Dsp.cfg5 l( w2 ^% q) h: h
│   ├── main_dsp.c
1 `6 G" q' u) G* ?│   ├── Server.c/ m5 ?" m( Y, x! B
│   └── Server.h
/ Y7 I- b4 M; f# I$ C├── host9 H* ~$ x3 A3 z. ^4 d
│   ├── App.c, _( `( I' X/ ~' b5 ?4 |
│   ├── App.h
& j3 }3 n% E9 b3 n│   └── main_host.c8 n* ?. ^2 n, l
└── shared# C9 l/ y# B. {( h, D0 [4 }
   ├── config.bld
( x. C, O0 P* D   └── SystemCfg.h* p& M# ]! e. g: {
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。! J6 Q" B3 Z/ T: m
( X* Z" Y& G, g1 B; \8 R+ R9 {
./makefile
. q( _& T! s% s
/ s% E& |7 t9 `4 P 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05% J' T" j& X2 v
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15; _3 M, N- L' s
3
, L/ k! ^& k3 G9 G 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
; X9 I1 `5 l! k) ^/ F4 L& _ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-9 K3 {9 i' i; a1 v: }5 Z: p
6
+ k, g. G5 ?- j% Z8 Y( Q 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
/ ]7 A/ s; `- ]; p& t* i4 l; v. L6 g 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
8 w3 K1 W2 v- V9 t0 g* K$ _ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4. `1 D. Y% T4 p, x  T6 _' y5 u
10
6 C1 o# f( y# D, m' H) i% Q& B11 export SYSLINK_INSTALL_DIR      \( L# E" Z0 e1 q4 C
12        IPC_INSTALL_DIR          \
4 U  M  A# h  h$ ?, I+ C6 F- T13        BIOS_INSTALL_DIR         \% A: ?0 N( j/ R2 e
14        XDC_INSTALL_DIR          \# t% X2 b$ k9 f) K
15        CGT_C674_ELF_INSTALL_DIR \
4 R6 n+ E, I8 ~9 [* n16        CGT_ARM_PREFIX4 L0 h5 [  K! A% |( m6 E( F
17
) M4 j& M9 }( \18 all:
! U6 H( V! Y! L- ?19     make -C host all+ j3 p: X+ R' |8 X/ J* W
20     make -C dsp all
0 y( ^( l; G8 {" P' g- ?* H21
: s. z5 X/ d, g1 A# T22 clean::
/ A' p5 z: N# E8 r23     make -C host clean
& k$ I4 |! Z& R" v2 a8 U. x24     make -C dsp clean9 {( e! `& C8 _# o6 E
./dsp/makefile
/ V4 I  R! v. P, O5 P
8 e4 `- ?; ]+ q 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件6 g0 @4 L% B+ {. H3 B* a& F
2 objs = $(patsubst %.c,%.oe674,$(srcs))) j. p3 l! G2 w
3 libs = configuro/linker.cmd
3 {- C1 M" ]8 C 4 ( `5 J' @& n* a8 }* V
5 all: configuro/linker.cmd- Y' X( F* C" r  h$ B
6     make server_dsp.xe674
, `' {1 K: p4 C- ]; O1 P 7
" v& u" v) W+ K- y: q( c% |8 c 8 server_dsp.xe674: $(objs) $(libs)
# c, m  e/ @' u 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS). }" f5 c; }* A4 F
10
+ f, r" B1 z* k11 %.oe674: %.h
7 I( ]5 P9 v9 @0 o$ v2 a12 %.oe674: %.c& t( X7 ^- v. H
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
! g$ B$ x/ k, l/ O) R; O; U; W1 s, d14
3 @4 f' l$ }$ }15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
! c1 k: _" @8 d: l! i  S16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
$ c8 @0 l. M& t17             xdc.tools.configuro -o configuro                        \
+ t; S0 W1 X2 ^# _( d18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
% a6 c; ?2 C3 u+ f5 v, L  K19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
8 ^! J- [9 i! d+ T20             -r release Dsp.cfg
8 w7 J+ [* j/ J7 o3 G21 $ [) n! l4 N+ n
22 clean::9 ]! a. ?6 m, r4 P
23     rm -rf configuro *.oe674  *.map server_dsp.xe674- y5 q, q- k( r- S' i
24 / Z# P( U+ u& e& a
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages% N9 h1 b% {3 x' C
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
6 z* Z; |! |+ Y% v% n27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
  v* }+ l& ?+ d! x3 M$ o1 j, e0 N28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
# ~: s: u; @2 O29
% ?; o& j. {' k9 b! @30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
- z2 p) q3 }+ D7 Y/ _31
3 ]7 E8 y) `! `# }' o32 CC = $(CGTOOLS)/bin/cl6x -c                        
' K+ `  ^& _9 G/ o33 AR = $(CGTOOLS)/bin/ar6x rq" a  q3 P; H7 ]6 u# c1 w; [
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
: E9 K5 n+ P, H3 t% M0 j35 ST = $(CGTOOLS)/bin/strip6x
; a1 T1 I$ I/ r0 p, g36 # e" I  ^2 K  O% P, M$ w8 G
37 CPPFLAGS =
" e( I; o1 q8 X$ C38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)1 T# n9 m; t9 y8 v
39
3 X& S0 p- a8 Y. S3 W40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)4 t0 C6 \! H: G9 Y8 u
41 % ?, X/ O2 i! w1 _* g; ]5 R
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     6 O' V# P  u# O* X/ m( ~8 g
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
* w/ b8 U! G0 n  t./host/makefile
% J7 u7 y5 H5 Q: i# n8 s4 x" x
. h( s; }* Y2 m; `4 I 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件$ h' H; |5 Y0 o& O( ]% ~+ A
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
! M0 |3 i. D5 Z7 d 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
- `+ ~2 W7 b3 r& S& M4 B 4 1 o. A; I8 |) M6 U) y8 Y/ y- Z9 Y9 D+ }0 t
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
0 s* f1 w9 }/ e9 k 6 " U5 ?& |; S- |. P) ~
7 all:
" Z! v- X2 x' r; q& s 8     $(MAKE) app_host) \8 t6 ~  Z3 v3 ~/ W
9
* C, U2 y% @- N3 x, I6 ?5 @10 clean::
; _: a( \9 N. H! h& S11     rm *.ov5T* *.map app_host
2 O( r5 D$ u4 w& E, f% S) B12 5 H+ ~7 Q% z% D/ @- j
13 app_host(objs) $(libs)6 D% C7 g" n8 L% ^: d. \/ L
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
9 ?7 `, i% v9 e3 r" z15
5 b& }. r! V8 s8 B6 e1 y% s4 X2 N16 %.ov5T: %.c
5 ]  w$ H' d2 O1 k" f  M( n' P  |17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<( l# _0 h6 x3 Z# f7 D, k
18
( G1 \, m  C4 }, S' ^' V. U19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
' U9 q/ x: G- R' ^1 Y20 AR = $(CGT_ARM_PREFIX)ar cr
! I/ l4 m1 E& o  q21 LD = $(CGT_ARM_PREFIX)gcc
) p& g$ k2 _) S1 G9 W' f2 Q+ j) g22 2 p. i7 ?0 L8 F+ Y1 G
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
$ j6 G7 ?3 Q7 Q4 A" l24            -Dxdc_target_types__=gnu/targets/arm/std.h
0 v! J9 T  Z4 k# E( x1 v2 p1 W8 Z0 N25
. U0 L1 B# F' g2 v! f5 w' C7 G: ?26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径$ m3 _  t- Y+ R9 ~
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
9 E3 s! y  `5 {2 `28          -I $(BIOS_INSTALL_DIR)/packages                           \' u) C6 S7 L7 G! H
29          -I $(IPC_INSTALL_DIR)/packages; f  p$ G) G6 O& u8 \
30 $ J9 W- p2 N( w9 {+ j6 W
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
( J; Z6 i# O: {32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
7 q+ t0 V( o( S! ]( r6 Z. L0 j编译工程
4 e7 l) Z/ n9 m/ W/ m
6 J8 V+ E8 O+ x makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
5 {2 o. ~7 l5 J) c! t) S% P$ R* D8 N9 ]8 @) S8 j6 t
运行工程2 W* i/ A$ ^7 p& l, Z4 i, E- F
, E/ ]; _  G0 t4 N( ~% S
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
9 d( I1 g: Z9 A
" E7 g; W- h3 d  e1. insmod syslink.ko                    # 加载 syslink 内核模块3 l( Y& D3 D3 W  y2 j4 V9 l
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序, M% |9 F9 ?! C( @0 [5 ]
3. arm_app                              # 运行 ARM 端程序) @& l5 i9 w  B9 |$ p
4. slaveloader shutdown DSP             # 停止 DSP 端程序- \' S8 X) P) W% o0 Q3 P
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 2 H, `6 z+ o$ X' `. T
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
9 q2 z/ ?6 L  }! D4 A
. Y- B' h, {! j. \ 1 #!/bin/sh
& c* @3 c! t2 V 2 0 J8 s% t4 v3 Q, s1 g
3 set -x
7 t& c* O9 D8 V5 j/ n 4
. M; H2 J2 Q) ?) H3 Q3 {  Z 5 insmod syslink.ko: z$ ], P& O9 s4 \
6
/ K: G& A2 r. o: ^+ y0 ]0 h 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
! {  Y- b9 J* g* R# L 8
4 n; s$ x% \( }: k0 N; O 9 ../host/app_host DSP
2 `  f! e9 a# z, D10 9 {; `' Y& h0 P2 b# v
11 ./slaveloader shutdown DSP6 H, w; p  k+ w* p4 q
' J9 e* {( W" ^2 S* Y' T& x
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:053 o6 k0 n! \2 K0 a) k- V* ]
建立工程
" x" @) V1 y/ S. h3 J+ ?) r/ B  O
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
# n' d7 v2 L8 O
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$ y: G" w) ?' i
建立工程) i- g. }7 W" E9 w- w/ J- L

, Y2 x  L9 j1 a# b, B5 G, e 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

, v/ z4 H$ F- z5 B2 w# cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2098

积分

创龙

Rank: 8Rank: 8

积分
2098
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40  e5 r! g  u  Q5 |/ p& f' ?, @2 ]
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

4 w/ T2 p% R; ?3 ?8 u  adsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-19 07:22 , Processed in 0.043298 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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