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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,; e. n  _& o+ n% w
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
* h3 c  M- v4 A( S- {3 A; I) K; v2 }% ?8 Z5 P" F% S# ^  f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程) F$ T; d  v. ~6 g

1 P4 P4 n0 P8 S0 [# y 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
- O+ H, o. k( \ 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
4 M7 d( y0 P, ]  D- n: N “清理”过的例程的源码如下:
% W, f& s5 E8 y3 `0 p8 I
- s# m6 ?! K2 \$ _! ?' Z7 ]" k├── dsp
- h0 C, H3 v5 w0 b2 E│   ├── Dsp.cfg  F& B3 n% r! i" C0 T& n) _
│   ├── main_dsp.c6 v7 @( [5 \; {  Y! [  k# W
│   ├── Server.c
, l5 z+ C+ d2 D& t- ^1 s│   └── Server.h
# f, ~6 U6 N7 ~: T├── host
2 \$ G. }5 A6 |& B1 ]% S* b5 D& @) `│   ├── App.c
! E' f. j3 k6 i7 T+ O  h5 O│   ├── App.h
7 p" ^" w+ U1 e9 ~' \# v2 z│   └── main_host.c
9 r6 N) v- |2 ~8 x2 c) ^/ I└── shared
% Q) N! ~: m5 F/ V. O% {# }$ Q   ├── config.bld( J) m' Q3 y7 F
   └── SystemCfg.h+ S* `5 P3 v- l2 D3 }% r
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。) G$ \8 X5 }; q; @
" x( K# Z, \8 ?6 n
./makefile2 v0 a. ]$ B4 B

" Y( f& L1 s) V! ?7 B2 m 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
) `+ D' Y( M/ |7 W 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15% t6 ~  |/ H* t8 l) `
3 2 U) d& X& Q3 }, \# U
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi! U% q+ c& P" Y$ V! a
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
6 `+ ]9 c- c1 }" r3 u" G 6
/ y+ l* a( H& F) K: |+ v; H# w& l 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_507 h' I8 |1 L1 B- p2 z; Z
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72: L# b( n* i* L& K, G
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4; u+ G; D* O: Y  w% \) p/ Y- C# W
10 8 W( a  U' X' a# e, `1 b0 ]7 [. a
11 export SYSLINK_INSTALL_DIR      \
0 D  x  B% t" G/ r12        IPC_INSTALL_DIR          \
/ L5 p5 T8 s- ?3 T6 K& K: e2 `13        BIOS_INSTALL_DIR         \0 Y* F/ g8 e: I! R3 v; n2 s
14        XDC_INSTALL_DIR          \, E; S! M6 f( N0 p6 M; |' u" F
15        CGT_C674_ELF_INSTALL_DIR \( `0 A5 r2 i' W
16        CGT_ARM_PREFIX# E; ~5 e+ N: R
17
! O: Q) h6 P: S* ^- E* B. Y8 S18 all:
% ~1 }1 @' K; r, g  g( c0 J3 @. |. R& Q19     make -C host all' `3 R% [, h4 ]* k3 e! ^2 K5 j
20     make -C dsp all/ J- M, |& U. j. H1 ~
21 : M+ y3 K& v5 I- ~" n# o& u4 y
22 clean::$ k7 K; n! w% Q' Y
23     make -C host clean6 S9 I) }5 D  H5 D% E3 @
24     make -C dsp clean
  w3 z2 J6 W' x2 j. J./dsp/makefile1 c( x! C9 {- q( p. F$ l
( v7 L" l# S( W
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
" s" x1 S# E6 y  U2 b0 O+ } 2 objs = $(patsubst %.c,%.oe674,$(srcs))4 W- n& @" i6 ~. |7 K0 y7 p: S' ^
3 libs = configuro/linker.cmd
1 s7 u' l1 S; u5 \- r7 {. u 4 % s; W" m  N6 L& C: _7 U
5 all: configuro/linker.cmd
, I- Z5 m% e! r$ @; @/ K8 N* r' _ 6     make server_dsp.xe674
6 F/ S0 A3 B* a8 e/ k4 M+ \ 7 & O+ }* U! x! ~4 i( Q/ ~7 r% S
8 server_dsp.xe674: $(objs) $(libs)
$ K  \2 t! t% E0 M' _& ^: D8 P 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)9 u9 K8 f- O2 ?) \% I
10
" _, {) J- w0 z0 b/ s) H% [11 %.oe674: %.h7 W' o3 R: |/ D/ H+ _. G* a
12 %.oe674: %.c( K( ?( B0 q! E9 _  E3 a. x- F
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
- u) s5 S# _7 S14 ; U5 e5 \7 U4 X7 m- ?5 W& d
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
3 s- V) E5 E8 [% y# s  s16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
& Q% g# Z$ f! O. s$ x1 o: O17             xdc.tools.configuro -o configuro                        \
* j5 ~1 N% F' U% f- T6 X- C& Q7 n18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \8 c& \: l3 V0 y4 s! r* m, d% G
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
* i( p) {3 o2 P! p; l3 n, o20             -r release Dsp.cfg! L: y$ `5 O# O# ~' |
21
! m3 ?1 I# O& i' l+ f, z- L22 clean::
: z' O# t4 {1 h: k$ B' [( N$ v& I( n23     rm -rf configuro *.oe674  *.map server_dsp.xe674
# X: L  q$ z! H% m) R24 3 f7 @, m* X" f" c. k
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages( d) l6 p) b: e  ~7 N
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
5 S% e; b  ]4 `) e27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
! s$ B, h4 t, A8 D* J28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages* i, Z3 \) S6 X: A' h* O
29 - Z  i: ~" T8 L! C& }: z
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
# o! Z/ Y  y' l# Q# L" T31
$ s, \6 N3 S) T, A. Z' l32 CC = $(CGTOOLS)/bin/cl6x -c                         8 [3 R  @+ i8 n: P
33 AR = $(CGTOOLS)/bin/ar6x rq
5 a& R+ e4 t% H3 E3 Y" c34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
' n* H' T+ E8 o- {" m35 ST = $(CGTOOLS)/bin/strip6x, o8 {) n. ^; L4 d4 C4 Q
36
* c$ Y1 `) y  O- H. k6 U: D# S) \8 [37 CPPFLAGS =
+ y& i- O8 `0 p7 \2 g. F38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
+ L& a/ s2 C- A, h8 P- J39
1 \6 T! ^! m; r& A( i: z40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
* m# l& d2 f9 h4 \" O& L41 ( Q6 |6 O! S5 [9 T# ?* a* I
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     & ]7 L; s9 }. k2 U2 v( _
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序6 X% P$ d8 Q4 N. M9 T! A
./host/makefile
3 s$ L3 r/ M( E- Z- M: J" B. }0 S
: r7 Y* Q( q2 }! Z" K9 `7 O8 w, R 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件& H1 W  f3 B( o$ Q5 A
2 objs = $(patsubst %.c,%.ov5T,$(srcs))8 d/ @/ @! D& @% z2 a3 H
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
% w; A, t1 r7 m& X7 ^$ F 4 & D6 |- i9 r( k" _
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))' m" `) _$ F* X, g- F
6
+ p9 l$ l1 @- d9 |6 X6 E 7 all:) L9 s; S) z4 f# l# U3 U
8     $(MAKE) app_host
' {: m. g# S" Q$ W' F  n3 s; @ 9
" W5 v  O) P3 Q6 Q2 Y10 clean::
+ |* |$ j4 M* ]% x6 B9 Y7 X7 A11     rm *.ov5T* *.map app_host: A7 N; P: o0 A
12
# f5 v7 T* \0 D  N! Q7 P3 ?, o% ~13 app_host(objs) $(libs)
. l) O2 R$ A9 w, C6 x7 a14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)$ [; p! L2 L8 s( T
15
$ g. n9 T. _8 K# \) A# d: O5 K16 %.ov5T: %.c
' [4 I) b% P+ Z9 j17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<6 P% G' {4 k) y( K* B2 T* ?
18
9 S  O, v; Q# h& \: a6 t) Q* |19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t5 d: C9 t  {( d. B! k* k: z" I  v
20 AR = $(CGT_ARM_PREFIX)ar cr
# ^  V" z' U1 i) f# ^3 M/ S21 LD = $(CGT_ARM_PREFIX)gcc
0 W2 `/ Z" Y: i' T. n22 7 n4 o& [- Q: [1 |* |+ Z, }
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \0 V( T) ^! O- m5 |2 p2 t) z& C. p
24            -Dxdc_target_types__=gnu/targets/arm/std.h
8 q  `# O$ F9 z25
0 P4 J% F# J' u. n2 u  q1 `26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
8 H9 d/ Y; N4 H/ s5 U2 w, M27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
4 p4 }2 f# b! x; h1 `; k1 v" P28          -I $(BIOS_INSTALL_DIR)/packages                           \# a3 v/ `  s, K' i8 ]; ^5 \8 `
29          -I $(IPC_INSTALL_DIR)/packages
# x+ J, J7 c1 U' `* t3 a5 {0 ^30
$ r. F4 m& c7 s& U) z5 ~31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map% E; n6 l# L$ E
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
; r; j3 \5 z" D) k  R编译工程
: Z2 p- \% s" V; Y5 m' P
- Y- Y4 E  G: e9 G# L+ S6 V makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
9 a4 i* [( {  H$ Q2 N; [7 V
3 [/ \/ B: \, ~1 S2 b1 e0 p; Z2 s运行工程6 y2 \7 _4 s: l  J8 n
* f0 E, c: k0 y4 Z. l
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。% X; f* n# V3 x9 a* ]4 ^( P
  a5 j3 r3 A* j! R
1. insmod syslink.ko                    # 加载 syslink 内核模块
) P, V5 _+ k& H, g+ U4 S# u2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序2 R* q' n/ w2 A3 W" B" @
3. arm_app                              # 运行 ARM 端程序
1 |. h$ ]  L2 T4. slaveloader shutdown DSP             # 停止 DSP 端程序
  ^4 u& U. S) f, e6 t" Y9 U# H; p sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
" ]3 V- |3 `, m; J# m 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
6 L$ y5 m$ F- B- w; t6 A3 ]9 M! e5 ]
2 A% Y5 Q. g' M! l! b 1 #!/bin/sh0 s! ^& S! S+ j  y& F3 B
2 / Z6 ?# A; q- \) ^* q
3 set -x* N) Y( ~) l/ z' t
4
9 X: S2 E$ I1 W/ h: [! S% i. o 5 insmod syslink.ko) H. }% }5 h6 u1 `0 I# ^
6 4 a1 f3 ^" A/ G, c7 q+ \
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
' I7 N2 Z) o2 U$ E8 O0 i* M 8
2 s$ c; o4 {9 z5 J 9 ../host/app_host DSP
. i+ I! T, z0 r4 N* b0 U& l10 - Q$ x8 J5 t/ f" i, x* o# t& R; b
11 ./slaveloader shutdown DSP1 @( `5 y) u5 i
) F& @3 l1 m1 K+ o: w
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
" g* S9 ^: R6 S2 B! k) E建立工程
. R- p8 }4 i$ z4 H6 t: H$ j, J5 O- h- F+ m" g8 M8 `+ y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
" Y  b6 Y6 m# _6 k/ D
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
$ V# e9 [. f" N" ~" @3 u建立工程
3 f' {) j0 |7 D0 t/ g4 n( Y6 ]- ]* w- V: B$ E9 [  X+ P0 C
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" Y' [; z  L& pslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40' _8 M% U* R- Q2 a) o0 ]
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

5 `& j6 r$ X! s( d( Z. F+ P6 Xdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 01:16 , Processed in 0.042038 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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