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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
6 C6 p( |. ]( N$ x( Ddsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
. J; z5 H, L! u& p! t3 ?- n4 C& u( B1 J
* l/ @9 }& R; c5 y8 Q) a+ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

113

帖子

2102

积分

创龙

Rank: 8Rank: 8

积分
2102
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40  q4 z! W& w* s5 C, C# i3 u
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
) v5 F8 U$ l5 l- f
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:052 x. x, r" K7 [6 Y+ J) N8 e
建立工程
( _+ s$ s5 g, p1 }" |; q  @& @- h  u* b
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
( |1 g& u( D* R. e7 [
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
) G0 Y9 e- ^4 l, |6 a建立工程4 ]2 n: E% N& J0 M. P7 o! O, o
: I  T7 n. d, K9 R! y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

' Y' O. R0 T  Kslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程8 j& Z* o4 ]7 N6 d8 s
& E4 D5 X5 b+ q! M2 }$ ]
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
' X$ n, f1 X" ~" ?$ K 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
- w/ T( i. p( M0 q! G0 p2 ^ “清理”过的例程的源码如下:
3 w! \# d) c  H+ s
4 _& W. R& F. ]2 Z" C- A# G, A  y├── dsp
9 _- Y( t) ]' \) o│   ├── Dsp.cfg+ z# \8 U" z9 v3 v/ x* E/ ~, d
│   ├── main_dsp.c1 q0 S* o1 v9 u
│   ├── Server.c! `8 e# a& Q" A& I, s
│   └── Server.h2 c9 F3 I* Z; A+ s% N" e0 P4 r7 L
├── host
" n, P; Z9 t* |) ]! S; Z│   ├── App.c2 |3 W9 i' w: l
│   ├── App.h
9 T8 T) v0 v0 k* A( M2 g# B│   └── main_host.c
& b3 b9 _" C' P+ w8 g└── shared
5 T  G" b2 ]* v2 w9 K   ├── config.bld  ]! y0 U2 E3 ^- [
   └── SystemCfg.h
& _: [9 w- U+ n+ }% E, e# w 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。, |& e, L; `# a2 k

: U; p8 }1 p& l$ y5 ]./makefile
" W  S- L$ \4 F" E1 G- i% e
" V- m; n) u2 p' u  ^ 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
* @- l' e' U, L; n 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
( r6 U' [! ^5 M6 f 3
% {0 ~# }+ a, g 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi. p$ a) Y- m5 z* G0 |
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-  d. c* G: N" m' X/ U/ f: e
6   V" i; |; ]( t8 _
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50& t( g5 t" Y5 X5 ]0 Y
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
3 n1 ]/ v9 s& z# R% x, p 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
: g0 Q6 Z1 T' M3 F6 _! p10 1 ^8 B% t* @( ~  M) c
11 export SYSLINK_INSTALL_DIR      \/ q( h  a7 B2 C! L3 r5 I% k( Q
12        IPC_INSTALL_DIR          \+ w, {8 w9 m* f; r6 C4 `
13        BIOS_INSTALL_DIR         \+ [; @! c  B" L  G# s% ?) U( Z, u7 W
14        XDC_INSTALL_DIR          \
$ ^) Y9 H0 d' Q1 }: P4 U( |5 ^15        CGT_C674_ELF_INSTALL_DIR \! [3 c9 S0 {: Q4 c% G( {) H
16        CGT_ARM_PREFIX2 p+ H2 X# ^" f2 U& {# a. v: e
17
/ p1 q7 E% L1 ^18 all:
7 D0 n/ ~5 y7 [/ O' y19     make -C host all
8 t. I4 E) X! L* i  e9 i20     make -C dsp all* L: R2 ^* d: q  P. M
21   v3 ~1 q. m, x2 D5 h+ d
22 clean::. H' O2 d  L: {0 r# V8 b$ G
23     make -C host clean
  [* |* b/ X; f# Q) i# Y24     make -C dsp clean6 o6 l8 f- E, L$ p+ E' g
./dsp/makefile
1 M3 S+ B  y" B# _( t& U6 K* F+ v! [. }: _3 @/ X) D
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
9 t+ ~, h* `: ~0 N/ D& v6 Y% p 2 objs = $(patsubst %.c,%.oe674,$(srcs))( J) M5 t" n/ l
3 libs = configuro/linker.cmd1 ?) M! J: o  v+ C1 q( U8 g
4 # O% W8 l: f$ k5 ^* v- l
5 all: configuro/linker.cmd
6 V) ~+ n4 H; O0 \8 B' }& y 6     make server_dsp.xe674% X; }: Q6 ~# n7 b+ {5 e
7 & N5 C! g8 Z/ r3 H& \6 r
8 server_dsp.xe674: $(objs) $(libs)
, N3 w) Z# T) T" R( P* Z! q 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)) F9 u" \" j4 h0 v  V, F" w/ s
10
5 e. t2 `" m& g+ J3 k8 y* Y11 %.oe674: %.h4 M- f: u/ e1 f0 Y- d
12 %.oe674: %.c$ D' ]2 V7 ~" W% Y7 K+ [
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<) S8 q9 A* P8 d/ e
14 6 y* W0 v1 ?5 Z' |- Y) P
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld/ @1 N6 g0 u# D6 G: q/ h6 I5 i9 j
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \/ n* Y# t$ m+ v3 Y" b5 ^; {
17             xdc.tools.configuro -o configuro                        \) A( N2 w3 c6 L% M1 T" c. h3 M
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \8 S2 C6 Z( m  |/ [, Q& k0 O
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
1 I$ W+ M1 c6 d* _20             -r release Dsp.cfg
, V1 s' F: Q9 p( u1 M  L21
! v; C% \  \# X22 clean::
& w2 d6 _; P$ Z1 g2 O23     rm -rf configuro *.oe674  *.map server_dsp.xe674; o: p# ]8 v8 C6 y8 [
24
1 ^8 \4 Q/ ^* K! p3 J8 u25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages/ i, [$ {, m; T1 P
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
6 H  V, g7 V# H8 L0 f. e) [8 z27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages. {& Y" r# a- T- Q1 i0 l& \( ^
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
- T$ P* _/ L, Y, y) }( f29
$ x" v% u' a  y+ ]. P& B30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
3 f9 i4 J- A$ f$ I31
. h+ F$ `; c* f9 d32 CC = $(CGTOOLS)/bin/cl6x -c                         $ Z; B9 I6 p/ `  v" B+ N
33 AR = $(CGTOOLS)/bin/ar6x rq
) {4 H  ~- j% S& Q2 g) v( m34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi( h, f8 J7 S. Z) T
35 ST = $(CGTOOLS)/bin/strip6x" W6 m9 H# h9 r
36 4 Q$ a  L+ ^0 g5 X3 F9 u
37 CPPFLAGS =. p; D! Q: w% x9 L' T# Y
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)1 s( k- G7 K& A2 ?( Y
39 8 t! M3 T( v1 e: F
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)& X6 z$ l/ @+ v5 G6 A# M2 x2 j3 S
41 ; }& k9 ~& U5 }8 n" Q, C, T
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
, k3 o1 u- f" u1 r5 Z' m43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
8 u3 z2 X3 k  ]7 m  X6 z! q./host/makefile+ M2 `6 e: E! v1 n  k- j9 J1 d# m" e
" E- D! n9 R' A, t: h7 \
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件4 u4 _8 |. {% W& U# C1 a
2 objs = $(patsubst %.c,%.ov5T,$(srcs))! H, r* Q$ R" U) ^) ^
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug0 k4 w) {3 `3 R6 \$ }
4
9 w: x" y# l5 I2 J 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
/ E1 k4 k+ q" N* E; T 6
, G, n  V+ e* l$ n0 H( P8 s 7 all:8 g* e, I" L- V: i
8     $(MAKE) app_host
/ ^( N4 J1 ]( Z 9
4 T/ _' `7 Q# f: S10 clean::
4 A( W9 D6 o) G( A11     rm *.ov5T* *.map app_host
% N+ Z& ^8 x, C% A12
) R  S5 [: R4 v( R+ N( X13 app_host(objs) $(libs). G: F( X+ R, a$ }4 @9 l" |0 w& n
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)7 a& P$ M: H% m+ h6 e6 [
15
- K' {% G9 J1 }. m8 ]16 %.ov5T: %.c  s9 |  {+ X5 E$ z* p
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
1 _" u1 w$ v/ X! E0 `18
+ I) d: v0 }& o: p) v: {% S6 ~& O6 L% P19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
# P; M! y5 H: Y6 O) Q: @20 AR = $(CGT_ARM_PREFIX)ar cr; _7 Q: Y( ~' ?7 A
21 LD = $(CGT_ARM_PREFIX)gcc3 s7 [$ ]9 ]5 K
22 6 U: d, B6 T" ~1 o0 |6 A3 d
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
( R4 M$ K! H6 Y- ?" K, X8 m24            -Dxdc_target_types__=gnu/targets/arm/std.h
" T8 c8 q/ l1 u+ ~7 q: Y25
1 L2 J: Y4 M9 a+ w5 f& Q. P) a5 z2 ]4 n26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径0 Z. I* ?' A. S
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
: H8 x" I2 L8 d# `$ N! G28          -I $(BIOS_INSTALL_DIR)/packages                           \
# \/ k. J' N* T- m/ n; l. b29          -I $(IPC_INSTALL_DIR)/packages
# Y* {4 {* w9 c! Z, T30
( j% X1 |- U( s, [( ^2 W31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
; F5 f& k$ A2 [5 u4 c. Y2 X32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
) @* Q6 u6 h9 x编译工程
. x( n7 [, w' o# V% z. P+ s+ b1 C+ T5 M2 Z, h/ x9 _6 i
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。: s3 Q' t, a+ _3 _. _. X0 a
& x) F/ l" D2 J" F
运行工程& ~+ n  {  d4 W  x6 f/ V% W
6 ]1 N; Q- W. C& w% {
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
& o+ H+ x% H- |+ `3 Q# E, m  d! w: `! G& _
1. insmod syslink.ko                    # 加载 syslink 内核模块# {+ h) t9 d: J4 ~) J  L8 f( s. c9 y
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
# ?7 W' [8 q: c# f  s& A3. arm_app                              # 运行 ARM 端程序8 y, v; A" ]1 I& ]6 J
4. slaveloader shutdown DSP             # 停止 DSP 端程序1 p' ?0 ]' _* ?  v4 H
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
' j; l* O: }. a* s 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/ I* w, b* l  `6 J3 p7 h0 J
1 R4 c1 _+ o1 M% H" R+ f  X0 S# T
1 #!/bin/sh" `' Q0 @1 w* T! I* F2 P
2
, I# v% h  d4 u  x- {( Y5 k4 z0 K 3 set -x
- O9 f- t4 b( ~+ g& T2 \ 4
$ W: X  C4 D8 Z8 }$ x( w 5 insmod syslink.ko
' Z" o+ n) F3 \3 t1 W# v 6 / h2 K! M7 J9 C! O2 l0 y& }
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
$ ^3 u7 O! K9 i4 R0 Y- Z1 X 8 % j8 g5 W# N0 P
9 ../host/app_host DSP
0 E# ~. \4 w( f: h( K( g; V10 % e; e- A) `; w3 ?/ e
11 ./slaveloader shutdown DSP
6 N8 a; n% ~( W% q; i# J( `& P/ Q6 S* v$ s6 H
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-6 05:24 , Processed in 0.047578 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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