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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
# c! v3 B' M3 W4 [" N. ?* k( g! odsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
8 f+ z/ N: g! M9 O8 K0 x% e% }
" ^" Q$ f0 y8 z. _6 ?; s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程' o, L) K9 F, z( q5 P6 M
: P, {8 k; X9 M6 \% C
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。# S& z0 q8 |) `6 ^7 ~
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。% o9 [& A5 Y* E/ Z2 u
 “清理”过的例程的源码如下:: ~. m2 w6 W: v3 a' v9 A  P' ^

% O( P+ ^4 N( l, g. w├── dsp
2 N/ H+ t7 b8 D% a  G* K. g6 p│   ├── Dsp.cfg7 u* S3 D! g& ^: p) h% J) A
│   ├── main_dsp.c! z  D! t. X/ Y9 ^# |9 V" y$ U& T2 y' Y
│   ├── Server.c
/ V4 c* r9 ?% N/ p│   └── Server.h# a  U8 i* w; F3 P' x( @1 v/ C* o( x
├── host% n6 q+ G: F7 t. D
│   ├── App.c
- |4 I8 ^0 v5 a* |; _│   ├── App.h, {$ R* C, a5 Q4 q5 M6 o
│   └── main_host.c# x* |3 k" s/ Z3 y
└── shared0 T; B/ l: Z' Y1 N1 N+ g3 Q$ W
   ├── config.bld. o6 p6 J. A, I: A$ z. f) N& Q
   └── SystemCfg.h' D1 L( U4 Y$ k3 h1 X% g
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。  d$ N3 A3 t/ c; R

# X) p2 V( v# I5 V3 n./makefile
, A7 W' y1 X5 D! b$ m1 v+ H3 N" Y3 O
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
2 s! s4 ^& h5 |$ b$ p/ M 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15: O* @0 ]4 e( k+ \8 c/ K
3
- N, t5 Z  D& D" y 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi) R3 _. p+ ^3 ]6 ]7 G" |+ z) Q: e) e9 P
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-, J3 Z' r' ~# \  b
6
" U: b6 h/ Q, K$ }# O+ F5 j' b  y( m6 p 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_504 U3 B  X( w7 y1 I, n) N
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_723 T! V% b8 k7 p' L
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
3 h: F. M  J# E- ]7 K+ F; g10 5 H, G9 W3 q/ A. n+ ]
11 export SYSLINK_INSTALL_DIR      \
  [0 n- \, G7 w% e8 H0 G12        IPC_INSTALL_DIR          \+ q- F1 V2 X" a7 j4 Y9 `: ]- b
13        BIOS_INSTALL_DIR         \
3 j  o8 b) w4 E% B/ k; Z% k# [2 Q' ]0 V14        XDC_INSTALL_DIR          \
, ~9 T3 _: H6 P3 t15        CGT_C674_ELF_INSTALL_DIR \3 U3 F) A& V: B
16        CGT_ARM_PREFIX
; p7 R: |" U/ O" g0 W8 X17
* C3 N7 ~* }* ]! v0 K18 all:4 Q- ^; D- u/ C' H# Q
19     make -C host all1 X$ o* K$ x  s. f
20     make -C dsp all
/ f. J2 E$ n0 o/ M$ X21
2 d- a& E* B' ~1 [22 clean::
# R+ b: m. ?, E: N' N0 C$ Z) ^23     make -C host clean  k' `4 Y& x. l4 K
24     make -C dsp clean% ~2 z& R, u; C0 `
./dsp/makefile
, w$ ?, N8 f$ J7 Z2 A0 c! M3 }+ k! S. V3 g  n! h3 v
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
0 P" C0 q9 B# _6 C/ [+ l 2 objs = $(patsubst %.c,%.oe674,$(srcs))
4 e" V2 B) @- f4 Z# n$ \: E6 e 3 libs = configuro/linker.cmd& a1 z' w/ Y& N4 C4 v5 {
4 4 E9 g% Z$ Q2 F
5 all: configuro/linker.cmd
' O% N& L; B: T' x. e 6     make server_dsp.xe674
. B# d' M' r( [% _  M/ @% d, d+ ~ 7 % ?* h% y8 r( ^# a4 D4 f
8 server_dsp.xe674: $(objs) $(libs)
7 [5 _. W7 X  t! s( A 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
" v' `& Z0 }5 f7 J9 J! a; T; W10
/ z# J$ F, P1 A: ~; R* x) |11 %.oe674: %.h
: E% |" I- s) v. J" o* V12 %.oe674: %.c2 u8 f& Z$ c$ @3 W' b/ U
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<5 x2 ]( a* H/ w
14 2 n* D2 P% ?/ |
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
) t5 i+ q$ |4 L" \3 m0 b5 C# e16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \5 x' }! L% D+ t
17             xdc.tools.configuro -o configuro                        \+ P- K- x! |: A5 b/ z
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \2 g8 V5 e6 r; i& C
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
# i" r  j+ |* j20             -r release Dsp.cfg
, y& Z* v6 M0 M7 P21
) |- N/ O/ ]* t8 {+ ]: A3 |22 clean::
5 y% m* S& ^% g4 o3 v% A9 F23     rm -rf configuro *.oe674  *.map server_dsp.xe674
8 n" Q, {  C7 M24 3 X/ ~9 _9 N8 I
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages4 N: w+ n" Q, b, s. B
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages& n4 B. m* q* R, l
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
/ Y% n& r/ k- y5 G' ~28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages% g+ }* [' ]  _. A9 M2 l9 U% W; D4 q
29 ' s6 \5 i/ n2 m! t! c! A8 G
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)3 N( t. a7 k4 Z( O5 I1 R- M( d
31 - ]  e, C" B" K  f* X
32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 J5 _: h! O2 P4 ]4 T33 AR = $(CGTOOLS)/bin/ar6x rq
/ Z" {+ j! t  D; y% n. X34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi/ U* J  ?- L4 G2 N
35 ST = $(CGTOOLS)/bin/strip6x
8 a6 z, t  s* q' X7 j; f9 x36
0 @$ J  c  M2 W/ L8 N7 g- x37 CPPFLAGS =. G( h5 l. Q6 v
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)1 N1 L2 U- _* @- `
39 5 l& G8 ?" w) w, P! R
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
: Y, @4 m. v" J! W, g41
8 v& K6 ]4 S: o) W4 {7 L, H42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
. W) @! p+ M: p9 p43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
' G8 t8 k. W" l) F% C+ B3 S, C./host/makefile* g: A" u( }3 U9 z! Z
8 C6 s0 V% `9 e$ ]# k1 Q( l
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件0 g1 F: f5 ^. E7 K, o) X9 ~) i
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
4 p$ p8 |, j4 m; |5 R2 J 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
8 e6 Q$ U4 F# K  r  y 4 9 s% n, t% d) g3 e& y$ ]- x
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
% y5 x' Z/ Q! L( M! c5 h/ o' h 6
: p- a5 n* W% `: l4 Z4 v  O 7 all:6 w; R% h8 W% |3 W
8     $(MAKE) app_host
: x5 q; y- H, l/ E- B7 r 9 ' r- Z+ l. D, t5 l9 s
10 clean::
! k- L) C5 o* F# F4 y9 v: x, P11     rm *.ov5T* *.map app_host! X9 M2 C4 A" Q6 B1 }7 W* ~7 y
12
5 g7 X# N( I& ^, n! z( w" i2 V13 app_host(objs) $(libs), Q) s+ V" [9 ^4 [
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)4 n8 L! W/ z/ D6 g) Y4 c1 U- D; o- c
15 1 r% N+ r- L/ d! D1 K
16 %.ov5T: %.c
+ h" m: b6 X- X* C, _17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<& r5 i" H* }  z) C. z- z' S8 M6 N
18
  x6 B2 @6 }5 ^# b1 P19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
8 n! t  T1 P( @4 h, ?20 AR = $(CGT_ARM_PREFIX)ar cr
8 J" h# P2 M9 c0 u. l1 u/ B21 LD = $(CGT_ARM_PREFIX)gcc! K$ ^2 ]) a, `& K
22 ! o% H4 D2 J9 T: W7 q& w0 D, _& C* S
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
2 m# a# A1 Z6 {2 K% J6 A+ g24            -Dxdc_target_types__=gnu/targets/arm/std.h
3 h0 d; J& X( q" \$ k9 P9 s9 x25 ( s6 u* q) c# n: U
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径2 k6 ]9 z/ \8 v7 f& M9 F. o
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
+ h" [; k" J  q: }28          -I $(BIOS_INSTALL_DIR)/packages                           \: V4 }" h  @/ r. ^$ r# b, O
29          -I $(IPC_INSTALL_DIR)/packages
1 J9 {; E6 L3 W! ^. J30
8 o! U; T; ~8 Z& ^6 o* B31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map6 a& Y( w8 y7 _0 E4 E2 ]1 U
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
& m( M; Y4 w6 k2 |% n' _+ K编译工程
" x8 J) b. n$ m( F- l! L
* L2 @' x  K! `* D/ b0 V, } makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
* T8 a3 d$ r% U/ J6 ^+ p- ~& {# k1 f6 K% O. f
运行工程
3 p/ O6 {- }- L8 ~/ T9 a
  L( R8 O# t! A# B3 j6 M! j% e) f& z5 A 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。# L, f: w' d5 o4 H0 S" Y3 a  t) B4 ^

. B0 ~/ ]& E! H$ r1. insmod syslink.ko                    # 加载 syslink 内核模块1 N$ Q# z, A9 h
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序* L* J. w+ D. x  X
3. arm_app                              # 运行 ARM 端程序* K! t$ Q, p: }) d
4. slaveloader shutdown DSP             # 停止 DSP 端程序" y% s) h* c$ c; s6 F  P8 r( `
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
% E' o3 `# w& {3 v8 X0 v0 t* h 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。( l0 \* d: `" x" D

+ x0 p& M9 b8 W$ ]6 k, ]! M- S* K8 r 1 #!/bin/sh
: W" D) F5 G: E' \& {5 g7 P 2
, W9 Z: l( U9 v% N' U 3 set -x/ O  c" ]: N- j/ b
4 7 B' D$ j: p, ^" M( N1 i
5 insmod syslink.ko
  c5 ~) W2 j* g! \6 D4 M 6
/ [1 F- ]+ S3 \, C6 q) Q$ [! ^ 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
" j: P% Z4 ]) V2 a& G# w 8
2 b! D0 ~3 k3 F4 X( C8 k4 Q 9 ../host/app_host DSP
" G0 v9 O) A8 q2 P/ I10
- ^0 t4 ?2 I/ |7 J$ E11 ./slaveloader shutdown DSP
0 o! G! w5 V2 [! h
3 b$ c+ t. ]) c! l& h; E
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
. s$ N: @4 C# |1 r' j4 U4 M( G/ R建立工程
3 j: c4 d: I) n+ z* {" z4 i# I1 A2 U
7 i2 _5 ^4 I$ O" X/ c 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
. {- ^( X& q$ |; k& Z
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
0 B' t. ?3 K8 i; f3 P) ~  W建立工程  l* j  k/ [- j) I0 {$ p  v/ ^
7 c7 X+ U1 O) S  k2 F  z
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

4 x4 t! S" C- y$ yslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
0 \# U8 u9 |: Y3 rslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
) v  _, |9 [. G# g1 T5 r2 K
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 06:37 , Processed in 0.042518 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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