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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,$ P( k& v. J0 j- P
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。0 K$ r& `8 \  N# T

# d0 A5 f4 Q0 U9 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程5 t: H$ ?1 ]! F6 T$ y

2 Y8 k; k& N3 z  h9 ^ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。# Y& m  T, }! b; R3 X: E- A3 i6 u! i
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
  H0 e9 y+ k1 B$ Z9 U. X “清理”过的例程的源码如下:8 b5 W/ p, ]. s6 U% C) ?% d( K. ?, O
- n, l- N3 D/ W6 G, }
├── dsp, Z  i4 p1 Q; e: }4 S& x5 D
│   ├── Dsp.cfg' q% [, O) b' g
│   ├── main_dsp.c
0 f" N% `% o( g0 W$ L│   ├── Server.c
" F( i8 Q' y4 }9 |, k- N* v│   └── Server.h
2 i9 w3 X+ g  q% L, t3 Y├── host
7 c9 |% G0 K( f; f3 x% l8 S│   ├── App.c
$ q( T. ?1 P0 X│   ├── App.h
# @8 o8 T7 }* o7 ]- A) x( |│   └── main_host.c
) w& @: U0 q+ L5 j└── shared5 Z  T& ?6 \0 a. f. J
   ├── config.bld
+ V# c9 {4 j' J- ~; `! C* x   └── SystemCfg.h
$ p5 }' f9 a. i) h5 ^ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
8 t2 k  P+ h1 ^. w) [5 w4 C" Y9 k( m( b
./makefile$ G, p* `6 _: T. e* C

5 ]/ i$ o" N6 A1 C, r; l, F 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
) W' _6 u, P" d$ h' r% \0 g 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15; _7 K* V1 f& v8 R. T' [
3 ' I+ l, E2 a! u8 t. j
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' E: p/ C+ f. ^2 }0 P' J 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
1 Y3 o1 N) x9 i- ^; y3 v6 s" ? 6
# `3 o2 I8 g8 L7 P 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50% v! G% R& F7 _8 N- s
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
. M0 [- l1 y8 L; Y1 o 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
2 p+ a& Y7 a/ Y6 _9 E4 e10
' V5 R+ w6 z5 o( i11 export SYSLINK_INSTALL_DIR      \' z- T: c# X+ w/ D. f% @7 V( s2 r
12        IPC_INSTALL_DIR          \
2 `" Q8 ]/ n1 j% o13        BIOS_INSTALL_DIR         \
# g* F0 @$ {( G% Y: Y14        XDC_INSTALL_DIR          \- H2 K' |6 F9 O* ]' C2 b3 E  T
15        CGT_C674_ELF_INSTALL_DIR \0 H$ h; W* v( Z
16        CGT_ARM_PREFIX
4 F4 k/ I# k7 j1 p( U0 |17
# z+ u$ B6 g: u18 all:
8 ~' V2 z8 c" Z6 H- d% D19     make -C host all  U: D( w6 B: h
20     make -C dsp all
  w7 N$ ?7 B9 S4 I& f21 / Z1 A% c0 V; ?% I, g
22 clean::8 U; c8 F. d4 \9 X  C
23     make -C host clean
% Y# Y/ d9 l6 L  \24     make -C dsp clean4 B2 U" y1 G* G8 N6 g+ q" @
./dsp/makefile9 B/ Q, C5 J' E4 [

. R; W1 Y5 }- k, [3 E+ b; V; K9 l+ ` 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件8 d( V& L% ^! \, L+ x# d
2 objs = $(patsubst %.c,%.oe674,$(srcs))- W; O1 W+ j* i: J, t& ]1 f9 \' |
3 libs = configuro/linker.cmd
. E$ k1 A9 N+ ~; W% U0 S  v* U 4
* a) u% D: n/ } 5 all: configuro/linker.cmd  Z; s: ?: c! c! A
6     make server_dsp.xe6748 H) E1 ?9 S" J% j* P
7
/ _: k6 E! {+ S$ O' g2 o9 B 8 server_dsp.xe674: $(objs) $(libs), J  u" B0 j) ~, y
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
, C( q$ F# C# W  M: U1 n' J& e0 Y10
/ o' S& t* w* y+ t% Q1 D11 %.oe674: %.h7 U" t) ?& l* A# D+ a, h
12 %.oe674: %.c" E- \# J8 V. H% N' P
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
7 Z" ^: @/ G4 U+ P& C5 M14 + [. U5 _# C5 M
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld$ }6 V/ b6 u( L, x$ m. K
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \* F1 ]  ?* B* M" Y4 o1 I
17             xdc.tools.configuro -o configuro                        \( F! \8 A) u( j- m
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \# F( V/ R" v6 ]* H9 V. X' z
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \# v9 f% i- y( X! j( s
20             -r release Dsp.cfg
9 t; v* G7 Z# Z21 ) B' M9 f- ?+ \  Q, N1 R
22 clean::4 o' ]# l, J6 x1 ^0 Z" ~# G5 m
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
' n1 F9 R6 n" H: U: [6 |24
+ a* }" i. f% Z* ~  I/ }25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
# `8 R( t( P+ b2 f26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
; J! {- b1 A4 b3 E& N) W( x  u27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages9 |1 m' r/ f' _3 p& Y
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
8 f$ N% G' d6 o! c: c0 r, s: t# Y7 i29 5 S, h0 X$ {5 Q  `, b% ?# b
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
3 F- S  v& Y8 [1 i. }$ r) [31
) I0 q$ ~( D5 k3 F& c32 CC = $(CGTOOLS)/bin/cl6x -c                        
3 I4 q5 f* z) X) U# x% @33 AR = $(CGTOOLS)/bin/ar6x rq
( T& ]7 r: I+ L, `* l34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi3 x, d  _7 J" B5 d* b! h
35 ST = $(CGTOOLS)/bin/strip6x, X% b) h. ^+ b6 b# E
36
. B% b9 N2 u" h. b& e0 q* G: d0 c37 CPPFLAGS =
1 `; V2 [- t) ?  @0 e# Z38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)( Y8 P/ }; A' y: {- O9 [
39 7 K- \$ c. L  i* x. Q
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)0 n3 Q1 i, ]3 K6 t; y5 `4 ]+ U
41 1 r- G. q, I& t4 I( L/ T9 [
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     3 f8 j( d- a/ B  t; Y; T1 `
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
$ _8 b0 ~# M$ F( c./host/makefile
* k$ r8 R7 p6 n, j1 n+ s  r' u( d/ V2 Q; Q# t
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
. x$ n% i# r" Q  C( y 2 objs = $(patsubst %.c,%.ov5T,$(srcs))4 o/ @8 v2 e. [1 c: n
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
$ D7 t6 s& v. S 4
& m5 z$ L8 v8 m  n 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 ]; F/ q4 P( y5 b) S
6
, M! C! y. W& |3 ^7 {8 b 7 all:! P+ l5 t4 s. s( ^: K; D5 {# k
8     $(MAKE) app_host
  u# R+ m+ E. H: e. p/ ?& L 9
3 Q# m+ b& }" I: x0 J10 clean::" P' a5 t9 k+ k  z0 b8 h
11     rm *.ov5T* *.map app_host
6 |$ K# d0 h# g12 7 Z: H' u* x8 ~9 T& Z5 B# z) }
13 app_host(objs) $(libs)( r+ {: D/ H3 Y4 p  a5 B" B
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)" r' ]+ o6 i/ `* C4 ~7 H7 {
15   f  y1 Y# t' z3 u
16 %.ov5T: %.c9 U) d/ C1 |: v7 \
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<: C& M9 V4 e1 G# T; }- h9 [$ w6 Q
18
* B# K* a4 r+ U/ Y6 r6 X19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
: j$ E- l! X' Y* X8 ]20 AR = $(CGT_ARM_PREFIX)ar cr. ?5 n6 K- U( j& Q/ V* c
21 LD = $(CGT_ARM_PREFIX)gcc
' l* r2 d  w: P  Q  ~% \22 ' u% c) I2 d+ r! W: b& |5 S
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
, e3 s! n6 V& Z1 e. N) d* r$ \24            -Dxdc_target_types__=gnu/targets/arm/std.h
! K, R9 a, W( x" x" P5 _25
% L1 Y; k" V6 ^26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
  v; d( j; G1 P, V, P9 b27          -I $(SYSLINK_INSTALL_DIR)/packages                        \& I6 d9 P- o* g: Y
28          -I $(BIOS_INSTALL_DIR)/packages                           \( y2 X! ^' ]& e
29          -I $(IPC_INSTALL_DIR)/packages% C  D  B% Q3 L/ }- N
30
( N& N3 c( P2 s, j# h% B31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
2 w, {# d  Z  o) ?32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  E0 N" }3 y! U  a
编译工程" e6 @# `! X$ C4 T
. |5 u$ u0 G& j1 \( k. A* }: [5 @
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。# T, P& e& u" t* U$ C7 _% R

- X, U" D2 g* a8 I7 Z( A, N0 \+ r运行工程
  I- [& D/ F- J- B% X. Y. J7 z( C! S
. {& T; O, l/ p 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
; g1 q6 _/ [+ L0 C1 g% ]- n2 v5 v9 L- W. e
1. insmod syslink.ko                    # 加载 syslink 内核模块  K/ |! Q. b2 _
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序8 h, v0 ?$ \/ U' D: z! ^
3. arm_app                              # 运行 ARM 端程序
( a& h: m& Q/ I4. slaveloader shutdown DSP             # 停止 DSP 端程序
/ f  o  X" J, l) N3 } sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 ' a% E4 b6 z5 ]' t
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
8 U4 s5 ]0 [8 n
( R8 S  ^+ H- t7 V5 }1 U6 F9 ? 1 #!/bin/sh* i7 l7 C6 o4 T7 H3 P# c% X0 Y9 P
2 % `2 c# X* M: n: ^
3 set -x  _5 u4 A6 }' S
4 , ?- J" r- ]. `; n% N: [
5 insmod syslink.ko
6 h  K& `+ b, r) F 6
6 }0 O# a! o( M) Q2 G( u& T 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6744 S9 @0 J* |6 k1 W+ _2 N% ]
8
  |' f6 Q/ x6 J* y 9 ../host/app_host DSP! Z8 C. L' [' T2 j7 [7 g8 b; l% q
10 ( T, R6 {& Y  P; X$ c, ]* W
11 ./slaveloader shutdown DSP
) m4 _' u3 r) R* Q' l% Z; E$ i8 C& ~- ^) \/ c6 f% `4 y+ h- G
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05. J+ R. K( S( o: q( c: |! j
建立工程
: F) F- F4 }4 R: X. y$ u
2 l+ ^& f* z" A 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

* `4 U$ M/ S( o! h7 W# nslaveloader 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
3 P+ m; `# V% ?6 \# O0 O+ g1 V建立工程' ]9 r; `2 w8 K, r

& A1 c1 Y. I1 c* p 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
: g7 @/ ^; Y+ x* l8 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:40
' r1 W! _5 D3 S+ j; q" |& Y$ Dslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
8 l" x* ~0 z4 c; a- b5 N+ J
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-5 01:48 , Processed in 0.056291 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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