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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,9 l, N, c' ~$ U/ S1 l
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。6 N% `. @$ E) v. ^" G
" s( i- @! r) ~/ p6 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
! U1 R# L& g  V6 M/ ]4 P8 K
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程5 d' I* |( G! E9 c& H# x
- q1 ^1 y3 k$ @% O, V' |, D, }
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
" `) ~1 P( h* p- @* k2 J# a8 H) E) f 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
, S( p, F: L% P “清理”过的例程的源码如下:
+ f% c" h# L* Y, S$ s. w% E3 O; s4 }; A* d  M/ M$ n$ a
├── dsp
7 e% E, p; L# O. |% s( C  f5 o│   ├── Dsp.cfg
. h  |, b8 E/ B- T: D5 m! u! [│   ├── main_dsp.c8 h3 m" o9 e6 V$ J7 C( ]0 `
│   ├── Server.c
9 l0 c  U6 c/ E4 e7 U│   └── Server.h
9 l; T: r  G1 o├── host
$ a, \# S( J' W0 _+ l& v+ k) o4 m│   ├── App.c9 T* E9 G/ J$ M" d. J
│   ├── App.h
! b  i5 v0 I  Z2 Y0 Q$ R/ X; a│   └── main_host.c) t# R. d) J1 D3 p3 E; _
└── shared
# p( S4 l  O# B5 b7 b7 G3 J- d   ├── config.bld  ^6 e4 R- A6 \" `4 T
   └── SystemCfg.h" s% J0 P. ~7 K  _1 M: x
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
& {: c+ @. R0 l4 K1 ?
. N8 Q4 S8 I8 R4 o2 i9 i./makefile$ b7 K: i2 P# K: |- `3 ^9 i" d

: `. Y7 _! a8 J' s 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05- N- l  a2 R: Q; w
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
! \7 |0 }% W2 b* y 3
& O8 p$ j# V" w* Z+ H 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
! W$ \0 R) a7 T; z/ J 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
& |& N4 B3 k6 U8 |6 g/ D% _ 6 ; @+ [$ C9 S- P/ l/ I5 ~
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50, j: V. ]- ^: s4 w5 W0 u
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
: o& A: s, B- |6 g/ \) \0 ?% \5 `( e 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
/ x- I1 ?* p8 A0 c  u10
/ c( }0 w2 D. v' K11 export SYSLINK_INSTALL_DIR      \
" g& n1 Z  x0 w  `( Y3 |12        IPC_INSTALL_DIR          \
, ]% \. C/ q$ g' U1 H13        BIOS_INSTALL_DIR         \
4 q) a) T$ T! n$ n14        XDC_INSTALL_DIR          \
9 f7 B$ T+ O* U: k0 M9 J' B' r15        CGT_C674_ELF_INSTALL_DIR \
! |7 I; _6 @3 _4 x5 q: y9 d16        CGT_ARM_PREFIX
) t" q" m8 c$ N7 f4 c6 T, h  r) A, H17 - b" @- N0 o5 Q& d, X6 M. ^
18 all:) V% t$ c0 G( q2 v% L0 z. X1 y- w
19     make -C host all
9 F5 \) J7 _! B3 t$ B( G  {( d20     make -C dsp all
2 L. I2 G: K7 \; g0 q2 \21
6 E- [+ U% J) [+ _' f3 {+ Z% [: p22 clean::+ c: \, b6 B% B7 L5 n
23     make -C host clean) I& t/ |8 R: ]8 f
24     make -C dsp clean
( x8 G' B( |: b2 A7 t; S0 S./dsp/makefile
% O' o8 y& n0 i# B! t
( j; @+ [6 r. j9 @7 _; I7 W 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
, x9 p% E  n. v- p 2 objs = $(patsubst %.c,%.oe674,$(srcs))% w; G4 b1 u* M2 `- ^
3 libs = configuro/linker.cmd
& k# [; l3 y* ^, L 4
# A9 }. ^2 f7 z9 q 5 all: configuro/linker.cmd
( A4 Y# I8 r  a* |8 z 6     make server_dsp.xe674
9 N; j1 K+ d% K9 P# p$ l 7 * j; _( j  d' Y" G) p1 y( c
8 server_dsp.xe674: $(objs) $(libs)
& h* W0 r7 O3 G( G$ I7 } 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
! Q& |! f) ?' h2 V10 ' X1 Q5 y& U- B, e' d4 w# d
11 %.oe674: %.h7 |/ v# s- o* n! T
12 %.oe674: %.c
% A, c2 ~! _+ J13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
2 N6 U2 S& F4 y4 G3 P" D14
6 Y; e: C/ u" [, ^15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
0 W) i8 C7 X  ]/ y+ l! m) l16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \, I! Q3 _2 |6 V. V
17             xdc.tools.configuro -o configuro                        \
3 r( C0 F- Q. Q3 n! q( X/ M18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
7 C( E' f. v8 p" W19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
; L: X- X+ V1 g! a20             -r release Dsp.cfg
0 @$ R* \: N# o# u21
% T# x5 g$ r: Y1 R. S$ i22 clean::
9 v, s6 m/ q% A+ Z1 U  W4 l. e23     rm -rf configuro *.oe674  *.map server_dsp.xe6741 r& X' e9 z) i" d( J
24
% I- @6 o% h" i7 P25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
; \, F4 E* G9 B! a( I26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
  o+ b5 J# t' P& U, a" S- p27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages$ F" H, d1 M/ h  W# E* @
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
& z! d$ E% H3 V/ k29
3 }, H- |4 A8 i2 F# P" Z30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
4 ]2 }# ^) U( ~1 {& n31
2 l$ v4 W7 N0 N! k1 }* K32 CC = $(CGTOOLS)/bin/cl6x -c                        
. I. o8 Q* k6 S$ ?0 j( b33 AR = $(CGTOOLS)/bin/ar6x rq9 r% ]' l) ]& {8 G8 I+ ]8 I) A9 E
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
/ g" G& W5 c3 Z+ B3 C35 ST = $(CGTOOLS)/bin/strip6x
* Z8 l/ i* h; X$ S; q36 1 V3 D$ r; ?1 q8 r9 {
37 CPPFLAGS =# M+ u. x! R1 A" s7 H+ d$ x
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
. `) p9 o) \- ]2 ^39 % `+ H/ E3 N& L  Y- G' E0 {
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)5 f6 }7 Z8 ]1 T
41
) G, b; K7 b+ }42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     + r, N5 ^9 c, A0 l6 S
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序1 A- e: }) l- x) ~* h5 k
./host/makefile
  k- U, A! J) O/ K
5 `* k) ?- p4 Q4 _) w& z/ A 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件) p0 I: a$ l6 J- S' Z: {/ A
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
* [8 O1 }) J: }1 g1 E) r# ` 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
( O9 A5 I* c, H& Y+ ~# z$ Q/ I 4
) F' K3 l2 W% h6 f5 ^1 w 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
; S' M1 L" T  v8 R0 @6 N) q 6
. x7 R" O) O/ e6 O 7 all:+ {$ ]" y) `! o. c8 V9 H  D3 N2 u2 g# O% v5 i
8     $(MAKE) app_host4 i  L3 Q, L: z" F+ I6 u% a
9 3 ~8 B6 j, d( b" [
10 clean::
6 p+ v8 N% q- h" U5 k5 u11     rm *.ov5T* *.map app_host
. C! i" c6 r* q7 |" g12
1 C8 Z: g+ n# k& Z0 q( R3 D, }13 app_host(objs) $(libs)
: w0 E' r2 A. f# }  r! J- V14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
' p/ \. U( p1 C% T! R6 p5 }15 7 c3 `- c1 q, q3 B/ f
16 %.ov5T: %.c
- ?8 g; R% ]3 V, x17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
5 p6 q* N' C- t- T8 S8 ?* \18 4 U; W' c9 S  G2 f2 d& x$ _
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
3 N6 a' Y7 X2 J1 K" A) E! @! n, P20 AR = $(CGT_ARM_PREFIX)ar cr
# \4 I9 Z, s; c: I" b21 LD = $(CGT_ARM_PREFIX)gcc" [1 v' F( u4 g5 ?' `- a+ |% D
22 6 I  W3 b2 y0 a4 n0 ?7 H# y
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
/ [+ J& r' F' b) f- p4 E4 q% m24            -Dxdc_target_types__=gnu/targets/arm/std.h
  b7 l+ a4 ]* }7 r7 l4 j25 7 y/ O- |- b4 }  G
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径/ }' ]$ B4 m6 v! C
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \( L0 i3 R# J+ Q! B
28          -I $(BIOS_INSTALL_DIR)/packages                           \5 T3 B( U. P) \
29          -I $(IPC_INSTALL_DIR)/packages
. a8 \5 u$ h! B6 r& }9 ~30
$ q; |9 F, N2 H/ B/ O) G31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map( q1 a8 y% F; x) A
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
) S8 ^, B7 g- h$ A$ |1 W编译工程
3 C! y% O: y; ]1 i% x7 M! z" h% t; x( p  f% s
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。  ^  C# o! V) K1 ?) w
, X! G! C1 S" B
运行工程- m) E0 h" N' V0 L* i

- {8 Z# I. c, `  S8 q+ ^( e6 D* U8 s 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。# S& I1 E& P. p% _1 D, c: Y( \' w

5 l5 N) _  h* M/ E1. insmod syslink.ko                    # 加载 syslink 内核模块
# a' p4 c  X, ~1 B" K2 M2 t2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
' R& f3 l* ^% [4 a; ^' R' ~3. arm_app                              # 运行 ARM 端程序
% w. y& c9 r0 s+ J7 q, L. q: h4. slaveloader shutdown DSP             # 停止 DSP 端程序
6 X# r* i: E5 M: m3 R+ p: [ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
+ u" Q& Y+ O2 j7 i 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
5 k" }5 Q4 B# t+ a8 n& {5 I5 I' ?, b2 r0 W) y9 v3 v& E
1 #!/bin/sh& i& M9 B9 A$ B* \% h
2 ) s* l& F8 D- w  h1 U6 |
3 set -x7 i" |/ y' e3 Y( I. V* L
4
+ n/ X" z& S' R9 } 5 insmod syslink.ko2 ^+ _3 P- r- x8 k# q- D8 A
6 0 x, l8 t+ D$ Z+ o& D) j
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674! C/ t9 f: p" G% b" ]+ `9 E$ s- _
8
% }& S; v! A6 h$ R' w. Y$ f/ L 9 ../host/app_host DSP
1 \+ [2 _) n3 C$ N+ y$ l) U! d3 k10
2 a5 ^2 @8 z+ d8 z11 ./slaveloader shutdown DSP- Q8 p2 m' ^8 t! P; s( Q9 Q
/ E  {3 G/ M( _
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05# j  ~' c3 `" D" }' L
建立工程
1 h) h; `: w3 M$ Q! e1 y& `. q4 T) ?0 P7 A
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" c  U4 m) ?& X3 z$ c8 Fslaveloader 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
$ W& H* ?* I7 B建立工程: Q1 w+ i, f4 j* B; A- Q
/ Q+ A3 T+ a) R0 H, ?
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

' s" K. V8 n$ Y' S4 ?" Q0 c' jslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2163

积分

创龙

Rank: 8Rank: 8

积分
2163
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
/ P9 c; M: A, n# q/ Kslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
" e6 y, g8 H! V6 p) F. V2 |$ _
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 07:07 , Processed in 0.049208 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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