怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,2 @9 x7 z+ x* b6 A
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。! Y  W$ B3 b" l4 G
0 w$ z* [  }) A  M0 D9 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
/ I, Q& d+ M2 K3 Y+ x0 E' k
5 c/ ?4 G7 f8 m5 f  E8 j; b0 ^ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。2 F  W5 B. V- `/ o
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。- `7 V" H! M/ F, N  y6 q
 “清理”过的例程的源码如下:
* l* n. `0 G' R! b5 U" x+ a, l' b% g7 H7 |2 ]$ d
├── dsp
6 Z* [2 s2 G. c4 b8 A! G│   ├── Dsp.cfg
. }8 \+ q1 t' J' u/ {8 `│   ├── main_dsp.c) F1 ^; t# \* g( b9 W. o8 Y1 [
│   ├── Server.c
( c. T$ {# H, U- c5 M% \│   └── Server.h5 v* b  }' b( W- O" ^9 |
├── host) u! g5 ?  k! l1 O
│   ├── App.c) l" X6 U! h* F8 }/ _6 x
│   ├── App.h: L! p% P! V2 ?; `0 I+ i4 f
│   └── main_host.c
0 _3 b2 _5 ]2 x0 `/ v└── shared
4 ?& F( h% N$ e0 M# L2 d1 O   ├── config.bld
6 ^, j7 }5 }7 n   └── SystemCfg.h
6 u" @! H1 j" D8 s4 _) O  P 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。8 k* u  \- h: N& a9 x
  ]2 o( X3 |7 V- C4 B( U
./makefile
5 z* v4 j% F# P# U# d. h
% h, C; k" S$ K2 c* r5 f* S 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05) D4 w( I+ t  I2 s9 L
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
5 Q1 [" a3 e2 ` 3 0 m8 |* \( j  p5 R- f
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi$ Z$ [. Q7 n( z9 ^6 E
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-9 e! n0 k3 A) n; I: S+ d/ I
6 1 P" a6 @+ Z% ]4 ]1 a% s) i
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50! [2 d8 Q$ i+ {
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72) f+ k4 j5 E  a- [- u/ ^0 N
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
* a, Q; c( z' i% Y10 # {6 O- X6 w( R% m9 c
11 export SYSLINK_INSTALL_DIR      \! \3 ?1 F# ?) J4 J( L3 x& \# b
12        IPC_INSTALL_DIR          \
9 M$ z/ ?4 U. h( |& E' k" ~  |13        BIOS_INSTALL_DIR         \
% Y1 s- o- r# {0 _" S; E4 n14        XDC_INSTALL_DIR          \' g* t- }& M% U' ]
15        CGT_C674_ELF_INSTALL_DIR \; z5 c. a* c' r7 @
16        CGT_ARM_PREFIX
8 }8 L5 j3 ?0 A7 X) E; f4 x17 6 h4 a* B* p- _* H2 g& D
18 all:
7 D* _& n4 A. O* F. _" O1 c, ?' v19     make -C host all
. y' B2 S' ]! U  R' r- R) M20     make -C dsp all2 U, V# L) [1 L* [8 b
21
6 d! H* Z& _1 c22 clean::
# G! h3 @5 C! E: j# n5 q23     make -C host clean0 N" H4 ?7 J& F' _( y' W4 c
24     make -C dsp clean5 S7 a/ C6 {# I4 F6 J- Z% x+ n' z# Y
./dsp/makefile
2 F. |. D$ F+ _5 V
+ [; |+ A/ o: _5 o 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件, J1 H& I+ C' [9 ~; d
2 objs = $(patsubst %.c,%.oe674,$(srcs))
7 i/ K) C# U0 W 3 libs = configuro/linker.cmd
. [" I, a1 @1 d; T8 A( L& o 4 & E: [4 J" u7 ]) v1 q" r- T7 n$ @
5 all: configuro/linker.cmd4 U, b; h; M9 D( }
6     make server_dsp.xe674" M: X4 M% S$ r& t: p
7
2 ?) U5 F2 |( a8 e6 r/ N0 q 8 server_dsp.xe674: $(objs) $(libs)5 B# Q6 F9 U& a$ g3 ]) h
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)% Z5 {( l' g: m' {6 A  e) V
10 6 J$ F9 E/ G* N, t5 ]1 W. E6 q
11 %.oe674: %.h
* m1 {- q! w0 c& L& `12 %.oe674: %.c
' k# L1 D/ I/ B8 z5 S0 ?2 m$ L13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<2 b/ _- ^4 W3 n9 ^' f5 B, U
14 , z' p& t4 H+ |! ^! J/ l* C: b
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
/ `5 O3 d$ P9 U9 `/ e: W4 f: ]16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \9 P; O+ Y: Y/ m- ?- t8 u% ^6 F
17             xdc.tools.configuro -o configuro                        \+ r# Y2 P% `* x9 k$ Z
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
. Q+ k, G4 p7 _. q2 A* {19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
" J' v# i) D3 `20             -r release Dsp.cfg8 e3 H5 |( g- S$ ]8 D2 x) F
21
+ o5 ?6 t' h% m- b22 clean::- U+ L( o; Y! `% Q& U) M
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
: _- l7 P  [  ]" C24
2 M1 P6 k4 q  J1 `% k& e  G6 b) f; C+ H25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
* t- j( @+ K8 F; s. k+ V26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
  ~7 A7 h, X5 F# S$ k0 ~27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages; q, V2 t5 z& K3 i* n
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
; `' V! l- B* [+ Y; `. Y9 V' J$ }29
3 T7 N& c3 h' D30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
) h! p: A: q' a. l31 0 n. N7 U7 U7 i' }+ I
32 CC = $(CGTOOLS)/bin/cl6x -c                         & M! B( B- o( m+ Q1 u7 `4 r$ J
33 AR = $(CGTOOLS)/bin/ar6x rq  h* F8 u" T: M- q6 f" I
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi+ r) b5 V4 k( M! P. J8 S5 A
35 ST = $(CGTOOLS)/bin/strip6x$ _$ i% x# G, c% }: T
36
2 Y& C# e% y% A" E0 Z4 z37 CPPFLAGS =
; C* o0 v- `$ S4 n: h( ?+ T- n38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)" j6 v  _3 Z$ B" h# M# z' V
39
! L( t& l3 S; \6 O8 R40 COMPILER_OPTS = $(shell cat configuro/compiler.opt): U( k6 E6 N  x, x
41
( k) X1 ^) K. q. V! `42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     5 Q5 }2 m9 S3 v7 v/ m5 c
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
# b( {: H; {, }! M; ?$ V& J./host/makefile
  w4 \# f& `1 [6 w+ P4 W2 s7 `, `: M! f# [7 x
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件: T7 C. ]  q9 J  E) O3 v( k6 E
2 objs = $(patsubst %.c,%.ov5T,$(srcs))+ t( j! G( K1 L1 B* h: S
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug7 f  o+ U' J! t! ?
4
7 z; @- j& G1 I# E3 C, j& I0 q 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))- c3 L  n3 s7 |
6 1 l: p$ h. C  t' `1 h; p" X) \0 y; s/ z4 d
7 all:
5 q6 W0 ~, r# L7 N- Q. @ 8     $(MAKE) app_host
) v4 E1 |8 U' M7 C: y2 w6 U 9 ! w$ g' z- D* A$ P+ k
10 clean::" E: z8 E! Y7 M# W3 ^# _* H3 Z9 d
11     rm *.ov5T* *.map app_host
: a+ f. r3 s6 `% F5 H- h9 j12 3 Z4 _; G1 ^+ X7 Z* i
13 app_host(objs) $(libs)
9 b( ~) a/ o- D) t  D9 {, Z/ j14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)& {% S9 \& D) X/ n
15
! f/ k$ U" J1 A  |9 o16 %.ov5T: %.c& [$ W% B# X& O, a! U# Z2 ?
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
' t: c$ D  o" R18
3 ?& W3 ~: R  U0 e$ x19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
% M4 T; a9 ^3 U" n5 u20 AR = $(CGT_ARM_PREFIX)ar cr
! H7 v% e4 s' O5 q. ^8 a9 X+ I" e21 LD = $(CGT_ARM_PREFIX)gcc
" c$ ]1 V1 r# a  P( x3 _6 J* v22
1 ]0 ~% g" W( ~: W3 \9 n) T, Q- [23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
* e- w: l6 }& z' T" A8 Q& p9 {' l24            -Dxdc_target_types__=gnu/targets/arm/std.h
  k8 g7 M6 a+ W& r+ M25 : z/ V8 R1 A" I6 ?8 n7 `$ k2 V
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
1 B' Q" [4 s, B, G5 \27          -I $(SYSLINK_INSTALL_DIR)/packages                        \: P( Z5 t9 f2 m8 f% Z
28          -I $(BIOS_INSTALL_DIR)/packages                           \
, Z) J2 a. E7 M& W29          -I $(IPC_INSTALL_DIR)/packages
6 x8 x% A( h1 }4 w  \9 [0 ]$ v( o30 1 F; i. H8 ^7 {: N
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
+ Z. H. P4 T. R- l8 K+ U- j% A) t1 s32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序* ^/ m  T2 G+ p; J0 V1 z+ G
编译工程& I( t( ?" E! h6 I. S  Y6 h3 |7 o
( ?' M4 d8 g7 L* {' ^
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
+ w0 `0 n" T0 P* R8 j8 G5 t6 k0 o, O  X  _
运行工程
( J) ^+ J, d" o7 i% o) C) ~  r2 d- V5 A4 G( a
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。; ~# ^! ^" H, ?5 }

* Q+ F' J4 w& U5 k1. insmod syslink.ko                    # 加载 syslink 内核模块0 f( ^: q: F( W+ X6 V
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
  R6 k% Q; C/ i; R2 ~3. arm_app                              # 运行 ARM 端程序
6 o  B9 n9 M# u% f7 u* W+ i4. slaveloader shutdown DSP             # 停止 DSP 端程序
" O1 x+ A; U4 z' l% ` sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
8 d; |7 i* c1 E( p 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。6 Q. |. c4 l; J" {" n

0 _2 {, V0 O! }  \* F 1 #!/bin/sh
- P" l9 [1 v5 X. j' c! o 2 + K& i; g7 W8 x5 E8 h- M+ f; r9 f
3 set -x
- l% ?9 W+ h7 @) `  E3 } 4 # z4 o- B  A1 d+ t
5 insmod syslink.ko
- u+ P# N/ \2 X6 `$ e 6
  Y# M' }' I% \9 b8 B' j: l- [ 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
5 q# @9 z9 {$ p 8 3 i1 I( a; U) ]( y" F
9 ../host/app_host DSP( ^" ^6 z- B5 e8 N- p$ e. G
10 + P' L( g- k0 a7 W7 K/ H
11 ./slaveloader shutdown DSP" t/ Q; L0 V1 x# W% z: m

7 z! M+ q$ k( G5 t: B, H
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
* P2 Q& A- k# q2 p, s, O建立工程
, Y! Z  _  x! u4 w3 b- X+ @; T" X) L# {. u9 I
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% T: u) @0 N4 I
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: X+ f' r, S: X8 L9 L
建立工程
) y( Q- l+ S; B" X4 q; W6 P- n8 H: u, V3 S5 R
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
( s: I) Q: R" \" S4 r9 u; A
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2190

积分

创龙

Rank: 8Rank: 8

积分
2190
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
1 E( X4 W6 @, @7 j. Hslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

4 R3 R& j+ Q2 }dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 05:25 , Processed in 0.049949 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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