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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8635|回复: 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 t4 s1 H8 p' t% c
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。- R5 X+ v3 X- f7 P( e

6 x7 K- b+ P% D; N( I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
- ~2 b4 N$ a* S) T% w5 O+ A& l2 E0 r8 h, N9 w" [
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。( Y/ I: J, W& G# _! u/ C
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
- @$ b$ z% n  g8 ~& v0 w, U “清理”过的例程的源码如下:' P6 ~: V# p/ u" Z3 U0 f" Z! n# m

- V) o5 ?3 Y' E6 W5 s├── dsp! p$ a( m4 C8 y& e# Z- \
│   ├── Dsp.cfg
5 l6 N6 f& A$ J# U& r│   ├── main_dsp.c4 k$ @" Z1 B7 l+ e8 v/ V+ }4 S
│   ├── Server.c/ F/ Y+ x6 d+ H. j* a  ?/ s
│   └── Server.h
6 R4 K  R5 P7 x├── host
& s- g1 I5 Y, y8 _│   ├── App.c
5 ^/ v7 `1 Z: Z  p. ?& k1 H│   ├── App.h
4 d7 N+ j) i; H% x8 }9 p* r, e, x: s│   └── main_host.c
' Y) c" y5 @) ~! i7 k7 v└── shared/ [- I$ K* K2 L0 v2 T
   ├── config.bld; L1 x8 }0 Y4 G5 Y; p, F
   └── SystemCfg.h% G- H- s* T9 n
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
; `- Y& O8 B6 y* ?, W# `6 x6 Y) d" |! Q
./makefile
" P: C' C. W6 a5 ?* s; a: @! f3 r5 `2 p
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
! e: W# G" u4 ]+ r# K 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_152 t: R% f1 E5 h5 @8 a
3 . p3 ^; U7 P8 D6 ^- c9 l
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi* j8 o! U$ c% E- Z  o0 M2 k
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
. t) J# T9 ]: `- [9 P 6
. a& L$ _" j8 K. X- q, ?+ F 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_502 F. g+ e3 o3 G# B& x
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_723 n$ W& T& F! z0 q  [$ k5 S+ S
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
$ r0 X% T8 k) |$ L6 p* r10
9 L5 o" _- W2 i+ P11 export SYSLINK_INSTALL_DIR      \, l5 \# ?8 J( n0 ~- S
12        IPC_INSTALL_DIR          \6 s( F8 n' x1 f8 t
13        BIOS_INSTALL_DIR         \' m- K8 c- L' h1 h
14        XDC_INSTALL_DIR          \
# p( I. ]) j! a4 y0 l7 r, ]/ w15        CGT_C674_ELF_INSTALL_DIR \
3 }, c/ i; r1 ]16        CGT_ARM_PREFIX/ R7 z7 ~" U* h7 N* ^; k: F; Z
17
/ A3 _4 |' g; w9 B( Z18 all:# i8 b8 j' k$ U5 A# a, r
19     make -C host all0 O4 w2 ?' G" C
20     make -C dsp all% i" e" q$ n$ S, o, M1 F+ _4 g
21 & z, Q* s: i  F% Q4 A& `
22 clean::( J) l# q5 J  G/ x  m
23     make -C host clean4 M% ~. o( O0 `9 j4 f
24     make -C dsp clean
1 r( g- E( L- S1 H. }# K1 Q# E+ W./dsp/makefile
- t7 C1 I% K" x, I# n8 l. U2 a4 d4 q- |, G" c; Z* Y5 j$ M
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
5 _$ t! L, V7 {% I- ^6 ^ 2 objs = $(patsubst %.c,%.oe674,$(srcs))
0 V# x  U% M* ]) x 3 libs = configuro/linker.cmd0 _# \6 [  ]8 ~. H6 `
4 7 \. ]) G7 a; t. v/ S9 ]
5 all: configuro/linker.cmd
: d. L- V7 ?9 c% G' z% m 6     make server_dsp.xe6745 U+ s/ r4 Z4 W
7 ( g: i; B' \! v% Q. M
8 server_dsp.xe674: $(objs) $(libs)( m- F, S2 P! y" |+ j
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)( t; k; V+ {1 L2 h1 r5 [) _# [
10 3 ]8 u1 x$ a4 u6 _" f9 q
11 %.oe674: %.h
( |/ C/ x4 t. e12 %.oe674: %.c" u5 B" p# G+ v1 O; s! ]2 `. F
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<* C4 m* p1 a0 M% i- `4 F
14 / z- E/ {' e3 o* v6 f2 T3 D
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld9 D* E% u! `0 b* b  d  l
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \# F& y" {0 f9 C+ D9 @2 u+ H
17             xdc.tools.configuro -o configuro                        \3 X$ W7 L6 g, e5 X% L& U
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \; F, X. ]2 f; e$ V1 \
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \+ C/ X( s, R! r& q9 O: Y% }
20             -r release Dsp.cfg: B4 K8 h: B1 q- d
21
3 V: Q2 e3 ]* F- m! {22 clean::6 g6 y* W8 l' ]2 X# O7 m
23     rm -rf configuro *.oe674  *.map server_dsp.xe674  |+ @6 n9 h6 P. p+ X) @- F
24 6 Z5 C# T$ m) A
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
5 g' T7 F1 U. q) @7 v26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
5 T4 d6 ^) [$ O% F7 L27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages2 S7 [0 c6 h1 \5 M: |
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
( Q& ^1 e' K7 J29 2 R% y7 L9 o, z
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)# Q6 E: u1 I. p  T7 `" f3 Z
31 0 z; \2 h( T6 A5 L5 n$ j' F
32 CC = $(CGTOOLS)/bin/cl6x -c                        
( H6 L# b. \0 n) X4 I' T33 AR = $(CGTOOLS)/bin/ar6x rq4 \& J9 k8 }* w+ _
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
& x! F. N% b- X4 n35 ST = $(CGTOOLS)/bin/strip6x& ^# Z( ]) O: _: U
36 2 G5 K* T# X5 u' A8 c1 ~; F+ u! j& H
37 CPPFLAGS =/ I* i: g' k9 _
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
3 F! r& K: g. y39 5 y# s+ ^8 ?. I4 ^
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
4 }" f3 {% Y, |  t) `6 e4 C- e1 J41 & x9 S6 [# c) a8 y5 d" T
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     & K) F' y& r( N9 k. o8 z
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ {9 S3 G$ V2 J8 k./host/makefile
0 c) F7 B6 l- [1 `) P
, o7 P3 J2 \/ \" \. {/ f 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
" g: e  ^/ U# J! C5 X6 u8 r 2 objs = $(patsubst %.c,%.ov5T,$(srcs))) s1 a: t$ v! }8 D* ?& j
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug0 G1 R% V# G0 B; s! e" y
4 ; ]* L. O* G4 k7 ^
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 b: u! h2 q: Z& F" X, D
6 / i3 a& ?; B6 o
7 all:
8 Z: J# N. |, F* v+ P' ~; Z 8     $(MAKE) app_host/ W+ |! W3 q# H8 n/ e6 N( k% m/ @
9
8 k* p. L" [0 f5 Z" B. D10 clean::# z6 W& P* T! G
11     rm *.ov5T* *.map app_host4 B% q& @  \% B1 j& l
12   a; f" E7 y- Q
13 app_host(objs) $(libs)+ L5 A7 V2 o% V0 `
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
2 @3 D' }- d# D( Z. t2 `15
, t0 A  Y% C3 G* P% X, C" Y4 Y, R16 %.ov5T: %.c
3 ^, b( N* [1 X17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<) j2 L" I+ C! M/ m& I
18 1 d  c1 I6 M# w6 A+ P0 h
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
) b) O0 m4 C( p" f20 AR = $(CGT_ARM_PREFIX)ar cr
% k  k' B% y1 \. z$ h/ `9 T21 LD = $(CGT_ARM_PREFIX)gcc
: S% }. X) J. o0 u+ v22
9 ]( G. b, K, K, V5 C+ A23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \( {+ e8 y% y- T$ D
24            -Dxdc_target_types__=gnu/targets/arm/std.h# P+ z! q- o8 r+ o7 s1 v; X6 n; n& F
25 8 c% V/ k# B7 N& h) D7 v" O
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
/ [, b8 R7 z" x4 {2 K27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
7 l. k) e, k& f9 h28          -I $(BIOS_INSTALL_DIR)/packages                           \
7 ^8 m' ?1 o% k29          -I $(IPC_INSTALL_DIR)/packages) l; R4 z+ `! t6 s" y
30
# B3 ]5 c6 E3 Q0 w31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map$ k# x7 i0 n5 x: p+ @
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
- r; j& }3 a# s+ U编译工程. m0 H: b* W! k" }* @8 U! e

7 H( r( B4 }  P4 Y% T% f makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。5 J7 Z8 v$ |- L

5 \9 |' j% \8 O8 X7 [运行工程+ s1 a2 t7 b) {* i" N( S

$ b- g: K) T2 v& Q& w 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。, ~% }+ w% e+ x& b

" F7 n/ H0 n9 `8 G  ^( S8 `1. insmod syslink.ko                    # 加载 syslink 内核模块  C9 d5 H1 R; t2 W. p
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序/ a/ A8 `7 k) _
3. arm_app                              # 运行 ARM 端程序
  u+ @; ^* ~, ]  S3 R# a7 l4. slaveloader shutdown DSP             # 停止 DSP 端程序
- z% n: `0 h  C- b# P, } sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 8 ]9 {2 s1 l8 W4 l
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
: V2 b: p8 P4 x9 B2 @9 x
  b* Y4 F. [% w8 A& ?* ? 1 #!/bin/sh6 o# ^; Z& Z. a6 V! J" A* E& k
2 : q2 f1 Z& J9 t: ^
3 set -x" O, U6 {! {7 f) V4 X
4 . _7 m. e7 j. p9 w
5 insmod syslink.ko
* F- k3 L5 F7 X4 F/ k7 O 6
) m. W6 p  _" W( P' u- I9 H' L 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
3 o! Q3 T, A8 [2 v 8
9 U0 ?9 H* `" W' g 9 ../host/app_host DSP
% h$ [& [8 I" t. K2 O10
2 N1 V# x! ^# D! \11 ./slaveloader shutdown DSP' c) x% ]# u5 _! S

3 @% Q, c6 t; R) m
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
) e+ d, F# {' o  `4 D建立工程7 U8 n3 K# O9 [/ Y( a; S8 F' T

# N( x9 ^! e) L& o 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" q; B$ r7 n4 \  bslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:053 c' k( n1 I- B  E9 p" X- q
建立工程6 o, i+ H; A6 K) I+ d& s3 |7 H, R

/ t: f% b4 `9 w! z! C, X 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
5 v8 O0 t, J' ~2 \) l8 V- T
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2172

积分

创龙

Rank: 8Rank: 8

积分
2172
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:408 [4 u! ^8 m$ B# N
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

. n: f, `6 J) L) y7 t( wdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 06:06 , Processed in 0.063360 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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