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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,3 O& g5 v% P7 S# v
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。9 S2 U, n$ @. D% w; m+ W( E  N
* x, @" g8 ]/ Z6 O2 C* T8 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
+ h) j" S6 M& w* o7 ^% n- [' z+ Q
+ j( S. h0 ?3 f0 D 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
+ i2 t  ]" I1 z8 Y7 b 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
+ w' b/ z/ X& s “清理”过的例程的源码如下:" G5 t; p+ @' Y6 m2 ~! j8 t2 X
, q8 ?$ ]$ n1 a5 u. h8 @
├── dsp
  c, w; M2 e8 Y3 d9 f6 Q│   ├── Dsp.cfg. I% ?- i/ q7 h, G) `( }; O9 p
│   ├── main_dsp.c
; {8 {- h" ~3 C│   ├── Server.c
+ b: M. L# J. k' f│   └── Server.h
; ]6 D% o: n5 [; e: U8 j├── host' R5 e6 _2 i; r  g7 i$ d
│   ├── App.c
, ~$ M8 P# Z$ [: ~1 o% r5 ]( D│   ├── App.h
4 {2 `' \1 ?/ M" ~/ |│   └── main_host.c
: R) E/ o, e5 w2 B└── shared
6 K) S+ [2 Y' g: h   ├── config.bld
: {- F6 ?* k5 G2 ~% j) Q0 q   └── SystemCfg.h
/ R# v6 N- |) A( y! B 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。7 ^( u% R% o' S- N# x# V  o. Z
, y$ C6 v- }% L) L6 _4 @
./makefile
) A4 d# l: J; y0 s# v
* W6 C' V6 e$ Q( \ 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05/ N7 n' h$ ?. p) @" t% S5 n( p
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15  {* c+ u  D! O" y; D
3
) d+ K) a9 p: E. c6 X$ P 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi' g! U: h& _9 p; W: K
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
7 L2 Q2 }9 ?7 ?6 {, h# U" l; G4 D 6 5 V+ O: ^8 B4 [# ?, B* [
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
4 n" t" C) {' ?- M/ a1 f. ~' p( v; Q 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72* F; J. I. H1 p3 n$ `
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4& S$ P) e# ^7 T5 r; Z
10
+ t! P5 i/ M& n5 z2 C- f11 export SYSLINK_INSTALL_DIR      \: q4 _. `7 x5 }! r
12        IPC_INSTALL_DIR          \9 E! J# W* \' D; k9 I4 u  i. K  F$ ?
13        BIOS_INSTALL_DIR         \
' K. Z' Z, u" ]+ @1 y9 G) S& r1 o/ Y14        XDC_INSTALL_DIR          \+ f& r1 s; o6 }
15        CGT_C674_ELF_INSTALL_DIR \
: _% ]( c- u, |16        CGT_ARM_PREFIX, R: Y' n5 }( Q6 A
17
; K$ P3 B: Q' u" E18 all:) }6 D9 n! b& F* u
19     make -C host all
) |. j% W9 {' ^! r1 C20     make -C dsp all
$ v9 B4 A: x' A. a21
  |( j8 i* Z, D7 E/ A: ^22 clean::
- O- h  b1 ?" h& o23     make -C host clean) X/ x% K% ~7 X4 p5 O
24     make -C dsp clean1 \8 e8 ~, S, L8 S; |4 P0 C
./dsp/makefile
1 e4 R, T" ?& J
  x$ z4 I" Y6 y& ?9 Q$ y2 m 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
6 ^4 c8 B" M0 X2 f 2 objs = $(patsubst %.c,%.oe674,$(srcs))
$ I: A* }: \+ O% m5 L  Q# \ 3 libs = configuro/linker.cmd" q: `0 X# O7 I  p9 U
4
; _! `6 i" e' r8 a" k. K$ D3 R! e: W 5 all: configuro/linker.cmd6 C) Y; ^/ _" H8 P
6     make server_dsp.xe674
" P1 _. H# m3 ]8 x3 z 7
! q, R( B- Y% U0 x, ^0 M 8 server_dsp.xe674: $(objs) $(libs)$ L6 }, y9 o3 R! c2 n
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 I3 ?5 W% l1 {: V
10 5 W; {$ [: ~! d+ k
11 %.oe674: %.h
7 v/ S; H: ~  f" {8 O4 N, N! s12 %.oe674: %.c$ G4 L- D* N) A+ l8 T- D
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<, L7 C3 M8 t  j7 x3 {/ x
14
/ }$ K7 N% c* F# t15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
+ N3 C4 M# N! w+ o5 j7 s$ _# i, k16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
, n1 e6 z' p/ i) j17             xdc.tools.configuro -o configuro                        \$ k' o' b- W- l4 R% y" K
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
: E! {6 K6 b  W% _9 N6 [, t19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \4 M* o: Z3 j& M3 d. q
20             -r release Dsp.cfg3 a( F, ~% m! ^0 Z
21
7 G" i0 L0 @: i) b22 clean::
4 o8 {/ W  g4 G8 P3 Y1 ]9 P  d6 x2 d23     rm -rf configuro *.oe674  *.map server_dsp.xe674
  B5 n* w8 H" t24
3 b# L0 Y$ ]% V! l( @; W. f25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages( S, f" m" n6 e
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages2 r& r+ W; k+ I8 @2 y  y  e
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
" D( Q* M, J/ U2 q  k4 r% o28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
) ?2 e9 [/ R( ~5 p7 T) ?! ?; K4 ^29
, j2 D8 t4 \3 t. w; M30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
/ o0 O3 Q1 I8 m+ ]2 X! X  _* I0 @31 9 x- g, {5 T+ N  u
32 CC = $(CGTOOLS)/bin/cl6x -c                         ' K  b! K$ \: s' C3 ], b7 |7 e
33 AR = $(CGTOOLS)/bin/ar6x rq
8 P( X9 y# m! x+ S/ ~2 `34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
9 h) J$ P* L2 p; `4 U4 {+ k35 ST = $(CGTOOLS)/bin/strip6x! c+ D2 ]2 m! K4 y/ o
36 5 u, s) i$ m6 S) X4 z( f7 e
37 CPPFLAGS =0 c$ a, y' _& v0 g, }+ ?0 `* a0 f
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)' [# f) {  A  N
39 0 U; d. j  \& P- E# X, x' {
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
  o- \0 ^4 a: E7 u% _; W( X5 b41
1 ~& M; Q+ B0 U3 |& t0 P42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
' Z5 Z1 B' u/ f4 \43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  I2 y7 X& G0 j
./host/makefile3 o% V. F+ Q+ c, F" K9 w6 J( o
9 S+ z- `6 q1 x9 o! }# @
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
0 ^/ c! Y' n4 F/ r0 Z+ @2 V' _2 } 2 objs = $(patsubst %.c,%.ov5T,$(srcs))6 i; T( Y; l$ o
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
0 Y" v& y5 E" n 4
  g% a" o, Y3 m( m! h! L- i 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
+ U' E) C/ a% D: [; l: Q5 K 6 7 n& ~; }7 e5 q; I% u9 _+ {$ W
7 all:2 h  n4 D( P4 O3 R' s2 ]" R
8     $(MAKE) app_host
# C1 J4 c# `! W, t4 W, u2 t 9
9 D2 W7 Y4 Z1 e, U7 U" w/ l- H10 clean::+ @( u! A! B' Z
11     rm *.ov5T* *.map app_host
2 W7 y" f1 D% W- _  w! D% v12
0 F2 @3 B8 V6 S! E$ ?8 v9 F) O! ^  x13 app_host(objs) $(libs)$ t$ L: c, ^9 i! g/ m
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
* ], w$ V: ?6 t- ^: }8 p15 . F5 W, N" I* w6 O5 C
16 %.ov5T: %.c: B7 J! b1 L$ k3 O! O. z" O: q* V5 [
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
: T  ~6 v4 D6 I( t3 m, `  B: u# W18   @: A( A5 P* x$ h8 l& ^* ?
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
" d7 s5 T2 @% {20 AR = $(CGT_ARM_PREFIX)ar cr$ O9 |. F9 \# P/ ]
21 LD = $(CGT_ARM_PREFIX)gcc
8 M! l* B& v) m! ^5 g22
/ q! N) ~$ ?# `( I23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
1 j0 G" U0 b2 P6 h1 C24            -Dxdc_target_types__=gnu/targets/arm/std.h' ]% s/ d+ y0 ~+ Z
25 8 `2 j. i/ x3 m- Q) ^+ ^
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
' _- I/ ^: S+ W4 N0 f27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
( A9 c# C9 r/ R% I1 \  M' i* M28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ X% O1 J( `4 o4 a29          -I $(IPC_INSTALL_DIR)/packages3 i6 l( f4 o* E4 }0 c
30
! L& R" t* t5 n: q31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map7 P1 |# H& V% ^: ^& m6 g5 a) w
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序! E* O: s4 `" ]/ }2 v
编译工程
6 x0 k' E+ L6 W! m  E( q$ k4 K5 I9 @! ^. v- c# U
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。  g8 A7 L! G! g5 G

0 d( q$ w# b3 v8 n运行工程. o3 B; U% x1 Q6 `7 W. x

! l3 N. F9 i( O6 _. L, Y) Q 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
3 H3 b/ u, p$ H7 F) w7 v1 {% B% t# N8 T9 u# C! {) Q
1. insmod syslink.ko                    # 加载 syslink 内核模块
2 ^  f, W' l3 s2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序/ i6 S6 A+ J  B" {
3. arm_app                              # 运行 ARM 端程序- f5 B0 Q& c5 S
4. slaveloader shutdown DSP             # 停止 DSP 端程序
, U7 f, I1 q3 ]* S% [ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 ! \  d* T  a$ J3 z
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。8 J$ r( c) z, i. S  V
- [8 G3 H& {+ L2 [8 p
1 #!/bin/sh
3 U7 O4 y+ v* G  ?2 v5 F 2 8 O2 r7 f( K) r! S
3 set -x5 M  J; q- d* f0 q- ^" t
4 1 L8 D- }# [2 e1 F5 L6 k
5 insmod syslink.ko  }) C4 u; t: B; P
6
7 H. g6 ^* _/ t5 `  U 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674# h% L4 {. |7 d
8 ! b2 g% o+ ^: L; c" W9 M* u7 G- Q
9 ../host/app_host DSP
0 K6 G, R3 t: k9 B( l10
  \, g; H1 z) Q$ ]* I: H9 D( h; l11 ./slaveloader shutdown DSP- j1 c1 s2 ?) R- @
/ x$ i% c$ B/ z, D/ [
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05( i' D! E4 |) P7 S; x3 C
建立工程
! p2 w- ?. }- I7 p/ o% t1 Q, v, H& q/ }( z( Y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" J/ I3 h' h& ^4 Uslaveloader 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) e) Q& G/ w: E: c/ G. _
建立工程6 s* o$ i) R4 `" t' Q4 R

: d' ?( c3 m$ b: L" j3 L; k 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
' H9 l# ?7 p3 h6 U$ ~
slaveloader 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; B. o2 ]5 N8 y% m
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

  _" z' r; \# _+ adsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 05:36 , Processed in 0.045426 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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