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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,* m/ h1 ~/ z- u7 y# n% S% D2 J
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
8 ?6 j3 K8 j" K/ X* c# L9 |( F' I0 `4 E  i( U5 n7 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
; F7 @2 w' Q2 {& T9 W$ L7 n* _
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
7 o5 I: \* `/ F2 t5 z
2 u) w. V! W0 z- I1 m+ ~0 @: | 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
  v) X3 L3 V4 d! V8 a+ c; c 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。. b( L. M* Z" y+ Q
 “清理”过的例程的源码如下:
0 ]) }0 T: e3 p& @" L7 f
9 O' X" @4 L. `! U├── dsp
$ R# O  C' P! k  t2 W" ~  ~: p5 c│   ├── Dsp.cfg4 t3 _; p! b8 H9 E' n; ?4 I
│   ├── main_dsp.c, f0 g" @2 C7 w( a# ~% j
│   ├── Server.c
# m% r$ l5 f1 q) D# s│   └── Server.h
8 J* Z& q( Z8 g, m' A8 h: n├── host
# R* ?) R5 h9 b" @4 B│   ├── App.c
7 ^; c! T0 @8 r$ G6 d│   ├── App.h
. @8 n  `& C& T$ g% J│   └── main_host.c( D0 [2 n3 |, A% I( e6 B: ?
└── shared- d. J  Z, a. b- a4 P2 {! w! X( `
   ├── config.bld5 r- V# J6 T+ N. {! k' f6 c
   └── SystemCfg.h
5 f  M( N9 V+ D! F% W" A  Y 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。2 K7 d  E, t7 M/ J1 Q$ k
+ i5 ]8 l* s$ ]5 B) ~) }
./makefile. m, h/ y  y* T$ j2 Q& n

1 L" Y% l3 g% z7 B( o 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_059 K0 d, U9 i, q& R, x* g
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
5 r2 i1 @; ?1 G- C- K9 Z  e, q 3
% V% F. Y: l2 _9 t+ ^9 g8 T 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi5 y) `5 z: Q2 K; ?! D/ q& M
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-' h8 R0 z' ~: U# {' W
6 - Q: q* j4 r; B9 B# y' ?1 N
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50' B( W3 L* h3 e5 O6 q7 s/ f
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
1 K6 g  Q6 ]: y% Z+ M; h* E 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
/ I  X4 {% W! ^8 p1 ?1 C10   ?8 G( {6 X, f+ M. h# v
11 export SYSLINK_INSTALL_DIR      \! ~# r% g2 d; @2 Z
12        IPC_INSTALL_DIR          \+ x9 I4 Q5 z! o# T" I5 e
13        BIOS_INSTALL_DIR         \& ?% ]* g2 I# ]* v3 W/ K* b/ I
14        XDC_INSTALL_DIR          \
, l2 u( l$ a& j' r15        CGT_C674_ELF_INSTALL_DIR \
& Q1 ^: r# t' w; [: Q' V5 B9 f# Y16        CGT_ARM_PREFIX
2 }) l0 C) o: u9 b" U  r17
: {: {" X; a. U2 y8 b18 all:
: |; r( u* r* b% Z+ I/ }2 b: e; R19     make -C host all: w% d2 ?- ]" J
20     make -C dsp all
7 w2 C- H' x6 R8 b4 b21 2 ^& `. g2 s8 \/ s+ H
22 clean::
3 W: V( t5 p  Y3 P) K23     make -C host clean5 Z0 m7 c, m& m) K9 P
24     make -C dsp clean
8 R3 X) G' O( b/ H./dsp/makefile
6 H2 N& a% m, O
; V/ n  S" w1 H; b. E! |4 H 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件& ]3 ^  `) g, q$ {9 {
2 objs = $(patsubst %.c,%.oe674,$(srcs))
. ^1 j% P* s- s- R& o. Q6 h 3 libs = configuro/linker.cmd
; W8 |- x4 S$ m2 u0 \ 4 3 L' Q, N9 u- S! P5 }8 w4 K% c# Y
5 all: configuro/linker.cmd% B: _+ V' L6 x. _! S6 }% w, o
6     make server_dsp.xe674
( a# b! |3 L% `% L/ {: `2 R 7 8 u1 ~4 }; A) `1 L+ F5 Y
8 server_dsp.xe674: $(objs) $(libs)
6 d  R# R9 p) e) k6 ~% D 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)( _+ I  M! W. h! L6 q
10 5 I# ]) _4 k1 P! F* J
11 %.oe674: %.h
6 A8 C  }, u+ s, {12 %.oe674: %.c4 O( P# J7 i- p( O( ~& Z
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<; M% I/ X% a" I& |; w0 a$ p+ D4 x" L
14 7 f/ j: K# ~+ J& _) a& _
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
, ]) z- U4 z5 d: V) l3 j16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
4 W! q0 `9 F- ~- O) _1 c1 Z& N17             xdc.tools.configuro -o configuro                        \' E3 a  R! |: h) p( z
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \+ a/ V/ v& j2 X
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \) Z% Y/ r* X. _" m
20             -r release Dsp.cfg
7 v8 m4 ~6 ]5 n4 s: O21
! f; s7 v/ F" [, d( M22 clean::
6 p/ l$ }( j2 t23     rm -rf configuro *.oe674  *.map server_dsp.xe674% {& f( |$ v+ k4 \  J
24
  q- J4 t* N, L7 Y1 ]$ @7 c25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages9 j( P' D6 U) ^! ]
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
) F2 N+ g5 a# C; i27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
0 l  }& V3 }  |3 b; t1 Q1 V) O& H28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
5 W( E- o# k+ L' m5 G7 s29
: D2 U6 @# G( u30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)4 a! c7 P9 o( X# V3 l5 b' Y$ W
31 ) ?; c  r2 m7 g( x: e
32 CC = $(CGTOOLS)/bin/cl6x -c                        
  {* i! N1 _3 k" [) n# B33 AR = $(CGTOOLS)/bin/ar6x rq) q2 L0 I! M; @2 Q
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi1 k* [6 Q% u3 t- C2 ]8 S
35 ST = $(CGTOOLS)/bin/strip6x; U+ T& Y( K# c6 K" `
36 " Y$ H7 W% L5 R' E/ [
37 CPPFLAGS =
4 B% ^  x- s, H! P3 O38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)/ |  _  a) K( K5 g, a5 a  m
39
: @# O. A5 g$ L5 j: P3 {40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)% ]: D/ o. v6 _/ Z* Q; [
41
" S/ y( g! z3 }42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
5 r. J' j3 l* ?$ E43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序6 n1 P- A8 r( h9 y6 Q
./host/makefile
' e) L& d$ V# s9 C; h" L% F5 ^1 x; N9 j: R
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件$ G2 \, e  ~+ J- R& p( n' |
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
$ ^( O6 M$ d1 F1 N3 o 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug" j! e& h% H2 K9 B
4   R' m+ x( @; L4 H; w- e
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))2 V" s9 R$ G" D$ [$ Q
6
2 o7 R  `& Q/ N6 U7 B 7 all:
1 J* t* t( w) ~5 {6 ?  B' \8 S/ \ 8     $(MAKE) app_host
$ d# {: A" f  B% w9 I; m- d 9 ! ^3 H5 @& \$ ^/ w6 |! B3 @; l
10 clean::3 Z+ e% J% a, Y6 H" t
11     rm *.ov5T* *.map app_host
$ _! ~7 _2 D/ C# D; ^' s+ }12
# J1 P3 e& y% ]6 w1 W13 app_host(objs) $(libs)% Z6 `9 G" ^( F# r4 p5 ^. ]( x
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)- e4 T3 P3 C! v" F! T# ?0 }
15
) l  L5 ]# m2 s4 W( _7 R. M# u- u16 %.ov5T: %.c
( R& R0 F% |( \- r2 D) o% L: g17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<$ U. ~8 |+ @' c; P$ u
18
7 {( y" G3 v1 [2 ^. D% P19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t5 Z; x+ P* M* h% U
20 AR = $(CGT_ARM_PREFIX)ar cr
. F* Y0 X; l: }# c7 a7 j21 LD = $(CGT_ARM_PREFIX)gcc
2 G8 N6 D& c; R  N0 E" D22
7 |* L. \8 |* z, g3 Y23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \4 K4 U/ @& s; y2 f6 w% h7 A
24            -Dxdc_target_types__=gnu/targets/arm/std.h
( S4 E- w( _9 J& z) |25
$ x( g5 Q# ]/ H5 T; W26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径1 D5 m2 p8 }% t+ v" L
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \# V4 Q+ d, O  p& ?- P
28          -I $(BIOS_INSTALL_DIR)/packages                           \1 u6 f+ _4 @2 c# x* [
29          -I $(IPC_INSTALL_DIR)/packages
3 v1 z, V2 i+ I9 g3 l30
- o( k# \2 Q+ b* v3 C31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map4 p, a, f* J6 f6 B
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
" v. m7 O* A9 n8 |- `6 `编译工程# N" m4 `7 q+ B/ }4 K5 q+ i7 D' @1 \

" ]! T, _( L; Y makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
2 j, Q5 i+ q% U3 Z! d6 B: p6 Y; R' O, U( T0 t
运行工程
1 R- H5 |% w4 s5 z# I" E+ Y
) H! m4 ?: m+ a$ Y2 B- K7 f! A7 g3 B 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。& h/ F0 V* z- w3 w0 L7 r6 n
( n* e4 ]/ t4 _' C" c4 |3 d2 g
1. insmod syslink.ko                    # 加载 syslink 内核模块
# l7 r3 ?& ^$ ]/ P2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序$ n9 |. l# Q5 m% @
3. arm_app                              # 运行 ARM 端程序
. [, n  H% r& b4 W; K# z' ^. T4. slaveloader shutdown DSP             # 停止 DSP 端程序
3 |" e  a* [& s0 [ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
$ Q0 |1 u% _' _# o6 B 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
3 c1 c/ S7 l! C( R, v. [# f$ [0 b% s# c. S: a
1 #!/bin/sh# b) F' m8 V. ?2 Q, i4 P% K
2 . A5 Z/ z7 ]$ w# [4 C; {
3 set -x" j" x  s% a# Y# e6 j
4
0 @4 U0 K% G6 ^( p; o+ ? 5 insmod syslink.ko
6 S5 U. R/ ]1 T% l$ n 6 ) V# b0 y5 R( U/ l0 [
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
5 @0 @3 w  X. W- @; a* a8 [ 8 8 f% G2 L- ?: @( H5 N9 D% _
9 ../host/app_host DSP
  d8 {+ u( X" k: b9 d10 1 D6 N% U& t# j
11 ./slaveloader shutdown DSP
, R1 e3 ]: L6 z, Q
5 a9 ~. S% r2 [" O& l/ m- n
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
+ z3 c& W0 R+ Q# U6 j建立工程
( K, A. ~; O( F2 v4 W
4 |5 T% W, r5 |+ _) O! y 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

: d; u4 d/ k3 P2 o' o4 n5 ~$ @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: Z7 z/ b+ U! v" k4 n. |" F
建立工程
+ ?! M/ R' q5 L* J( }1 T
; n: o0 w. K; i# \2 g 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
0 ?& h5 k! k9 v  \6 p. g* N
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2124

积分

创龙

Rank: 8Rank: 8

积分
2124
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:409 o* O9 w1 {# Q6 _
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
, l. b; A+ S, _6 p& y
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-3 23:40 , Processed in 0.045694 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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