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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
. {* }  u' q; x) v9 Ddsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
$ B1 y( L% D/ k
3 _9 J" ~+ j( J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?5 w* @7 g; g8 e: o
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
  b8 Y$ l6 V, W. X9 `. {9 E
5 [* B  w3 ~  s6 S( R 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。! U2 Q: {% z' w
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
3 R6 v0 P3 v' G# q& f3 z* z( b “清理”过的例程的源码如下:
; m- J, t4 e) E4 _0 b1 i0 N( Q/ s! A4 |6 h+ g$ n, D% H
├── dsp4 c0 V: O6 t8 X' Y7 _# M8 `
│   ├── Dsp.cfg( R) {* H: k) s7 o3 y7 r0 r& `
│   ├── main_dsp.c8 }/ n* c& }0 b! y$ _
│   ├── Server.c2 S! r' F; D2 R) H# A* Z
│   └── Server.h! ]+ U, R3 }. m' n6 \% W; S6 |3 @
├── host
: n2 a5 d0 g8 j  ^│   ├── App.c
8 A6 j4 Q+ @$ ]. W. |3 h* B, j) n0 [│   ├── App.h# o8 R4 O" p* q/ x$ E
│   └── main_host.c
' ~/ S4 ?' P' `└── shared7 i! o. B* ~3 o. i: [- v- Q
   ├── config.bld
) O: d3 E; a' ?) a$ Z   └── SystemCfg.h. J2 ~4 n% l7 p4 U( I
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。6 i9 u( t, m  {$ z* G( J/ D% K

: V3 b- G# u( F/ {1 ?9 C./makefile$ j) i. s' O. l' `/ Q9 j6 o
9 Q# M6 @; V5 ^0 M  z
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_050 y6 ^# }' Z: W* J
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15" b4 a3 P( S" u
3 / t( i+ ?6 }2 m7 H& a, E
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' d2 r. t6 ~5 y: B 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
/ E; O- r8 [2 h5 Z& \" b0 A 6
; {9 {  I: d1 a5 l; v2 K 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_507 d" x9 t6 T" V/ w( r7 s% }$ }
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
2 ~7 D/ K$ q! q* V! L' m$ \ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
2 a; i; ]% o& N; |) B, ?# Y10 - v3 _& I+ F2 N) t, e7 _0 k0 _
11 export SYSLINK_INSTALL_DIR      \
# B: F+ w6 R1 c0 s) ~/ e/ Z12        IPC_INSTALL_DIR          \. H  c0 a% E3 M
13        BIOS_INSTALL_DIR         \6 A2 ^/ H) |" A: m
14        XDC_INSTALL_DIR          \
  e! v% D5 {9 ~/ j' d8 Z- a: c15        CGT_C674_ELF_INSTALL_DIR \
( x% n+ ?: k) b; F1 }16        CGT_ARM_PREFIX: v/ n) |, u  ]4 h$ Y
17
) m# k: ]6 [5 u8 A, K" v* Q8 s1 G18 all:
9 L: j8 a: r0 k- ~+ q$ `  i19     make -C host all3 {7 ?7 g: _4 o: Q7 b- c
20     make -C dsp all
% @! r3 f* e1 L1 Z21 * o0 h3 V/ h4 F
22 clean::
5 p' g; I- }. X7 ^' l+ ^3 Q23     make -C host clean
& S6 n4 k/ h! C1 d9 z0 |4 g$ A! a24     make -C dsp clean
# a* P% A3 o0 z+ S# w7 W$ k./dsp/makefile" t9 J! W; r7 M  l1 v4 D# T
' e1 l# g) T+ Y5 q0 y; b
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
, D- {! z) H. o. N' o. { 2 objs = $(patsubst %.c,%.oe674,$(srcs))7 S& R! U2 @( j: @3 A
3 libs = configuro/linker.cmd
5 j/ M4 \& L% w  K% h0 n+ r! q 4
7 M; k. I, z0 }7 x5 R" q6 t 5 all: configuro/linker.cmd4 W: D& O- f! K" t) N
6     make server_dsp.xe6740 }; V# A0 O2 }6 l. l9 x
7
, ^, {8 J5 [  Z# v  A0 U, _ 8 server_dsp.xe674: $(objs) $(libs)
$ i9 x" y4 l" u! |5 _) R/ G8 w 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+ ?) ?; k. i$ G: N  _! t10 % M+ N0 i6 q( y/ l. j: u
11 %.oe674: %.h
* u4 i; o/ [: I12 %.oe674: %.c' h$ V, |% m. f  h0 }9 o2 Y/ R4 a
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<1 i$ `, B: ^8 |* b$ y" d/ m
14 . o6 e: Q" p0 n, L- ]& V
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld* q* \# v. E* @/ s  c- |" M
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
( q; [0 n3 \5 @: \/ G! z! q  v- u17             xdc.tools.configuro -o configuro                        \7 h9 K0 D& a7 I2 V2 G, Z9 v4 z
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \- M5 F' N! h7 G- y3 @
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \  o8 a9 r8 `3 C% V8 Q9 u% J
20             -r release Dsp.cfg2 b! r' t4 W1 f7 w# e; c
21
0 G7 \) B: l% t# R22 clean::( }2 n' G4 q; d
23     rm -rf configuro *.oe674  *.map server_dsp.xe6749 c3 ]5 \: a+ ]
24
( }. n, P6 s) M3 }" e% U, @$ G25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages' j2 X, h, g$ [8 u" w( K# I9 ?1 o
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
5 E% ~0 l' z& M27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages; C) K2 x8 V; L* g
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
' y2 @' s  ~1 U' X. J# W2 J( {  |) ^29
: E2 U/ F6 A% U30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
7 k5 I9 A  }  |' e4 q( z31 . h5 u( h) ~6 Q. ?0 ?+ {. a
32 CC = $(CGTOOLS)/bin/cl6x -c                         ( ^* v% H+ L8 |8 |/ b
33 AR = $(CGTOOLS)/bin/ar6x rq
9 B5 q5 q" D$ d7 t! d34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi: i& [/ o% j' [5 g0 L. \" j! J
35 ST = $(CGTOOLS)/bin/strip6x
- {  R' [) J* G! t9 o$ _: X  a36
5 }9 ?2 W4 c8 g5 g$ {37 CPPFLAGS =8 k7 z' x! `6 O+ M4 @
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)1 d5 Y! u* H% v3 n+ o
39
1 ?  T6 h* _( L( H; P. ^40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)" f! c( M- I' l" O0 q7 r3 i
41
0 @) ^. c3 C3 O! ?& o8 _  n: f( m42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
, N# f: w6 z6 a5 W, u( B% {* Y43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
  D+ a; ?" ~( c1 M3 o1 P. Q./host/makefile
& E9 J. ?# c% S
( b8 W- q- O0 w3 P" { 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件. e; l! m7 L1 [1 q. W( e, B
2 objs = $(patsubst %.c,%.ov5T,$(srcs))5 a/ w! ~! k& A! \
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
" G" H9 G! C$ w/ d7 V! i: B  ^ 4
3 @% L+ d7 y5 s: T 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
$ {0 w& _6 B. I  v- a2 d 6
6 B1 |. g; d8 j- j6 e- Q1 x. k  O 7 all:+ O) v3 t9 T; ~  q7 }( a
8     $(MAKE) app_host
: o& k1 W* m$ E 9
, ]) r5 k* z# U" n. D10 clean::
3 e1 a; T0 m4 W/ k6 ?. f6 a11     rm *.ov5T* *.map app_host
7 C. {% d; v) `12 5 \$ f( S0 t' n, Z* e; U
13 app_host(objs) $(libs)
1 n# ^! |" b' s8 z4 D3 {2 Q# `4 S( a14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)" ]  L# \2 t' M# D; A. h
15 / T" A" a* R: w* W. n1 v# o
16 %.ov5T: %.c5 T7 n2 l1 f" z- {
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
. J- z! K: U1 |3 P, H18
8 A# o' Q7 E8 Z' j1 J19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t( W5 [( O4 W- Q8 L5 M6 m8 b5 q
20 AR = $(CGT_ARM_PREFIX)ar cr
0 V; g2 @5 B; z9 S* V; Q1 m21 LD = $(CGT_ARM_PREFIX)gcc
1 q2 A  D4 i! m  F" x& m8 m5 @22
" E1 p9 @) A( q$ F23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \9 ]( P. p) f% I) B/ k
24            -Dxdc_target_types__=gnu/targets/arm/std.h5 ~2 R7 U/ w: h8 i! r* ]
25 6 x" o  T8 u! |
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
( `4 T; l# W8 E, z27          -I $(SYSLINK_INSTALL_DIR)/packages                        \; J( ^/ K3 Y3 s5 A( B
28          -I $(BIOS_INSTALL_DIR)/packages                           \
7 S  l1 b8 l' Z) X& p29          -I $(IPC_INSTALL_DIR)/packages
! a; c* o3 t) h* z4 n  H  o30 ) s! \4 }6 ~/ H4 ?
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. p8 S' ?5 E  v4 x1 O, E  p
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序2 c# e2 N8 U* \8 t0 y& r
编译工程/ s7 F; V9 k5 G) ]5 @( {- w4 r) A
& U4 k9 y! M( }; `6 E% \5 J9 ?
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
! v2 D8 D0 {+ @1 W/ @0 i7 V( _" ]' z% p/ ?9 o, d( t5 \
运行工程
' s% t3 v! N. Y7 @4 v: \
2 I, }9 }$ z; Z9 [ 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。( I  K4 y- c9 K( }% Z6 ^* @% y

8 S) q. U5 f5 {, N1 j0 v1. insmod syslink.ko                    # 加载 syslink 内核模块
2 r2 j$ k: T$ j* `/ n2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
+ k6 [5 N& q9 j( b* o4 U0 ~1 f$ R  V3. arm_app                              # 运行 ARM 端程序1 e! C4 W/ i& P" G
4. slaveloader shutdown DSP             # 停止 DSP 端程序
0 m( D% _8 I% n sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
' D3 E0 m: A. |' ^/ k 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。6 A- {& C" z" y& s7 c2 m

8 f" }, X5 }- g* E8 Z& m8 D5 w7 R! i 1 #!/bin/sh) Z/ i1 l+ g2 W6 ?
2 3 F3 a" x2 K, R7 V1 h4 q
3 set -x% _0 L+ Y9 |- O) Y/ i
4
! c. O" j3 y% `' q 5 insmod syslink.ko3 Y+ U& _6 x6 X0 ]: d
6 / A8 m  \9 x- o0 v3 ^$ [! N
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674) p# m* [9 m% g9 ?
8 % N& a- ?; y+ U3 S; D$ v
9 ../host/app_host DSP% D% u9 z4 ?# f9 ^- l
10 ' a4 `$ S9 T2 P0 T% V4 j& m8 L$ X
11 ./slaveloader shutdown DSP% S( n5 s. Y5 w& y/ n6 C0 D

3 V" ^7 f0 V: q  D" Z# g, _& r6 T
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
5 l0 z$ j2 ]1 L. P4 X1 \0 e% b1 y3 ]% t建立工程
& y3 ?* O6 `$ ?2 s; ?- ?- p9 W: K5 X& |8 p5 k) Z, J0 E3 E' Y: R0 V- p
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

' W3 _5 [# s/ e$ b9 Y: xslaveloader 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' Q3 h5 y. q! W" K
建立工程& {- ~1 `1 S/ F( G; f; N5 I! W

: ~: |+ k0 D5 Z9 Y! L0 u' ~ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

% e/ x" y9 i/ ?! \) y; mslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2137

积分

创龙

Rank: 8Rank: 8

积分
2137
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
/ {# w& j2 [  Oslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
8 c  ~* X/ C/ N# ?4 W
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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