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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
' Y, o5 q- [4 V: \& x' Q9 |dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
, `$ {! S2 Q0 i# k4 s' k7 q& T7 V; H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?' H, Y; t9 Y2 C+ k
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
/ ~+ R; A; u5 H1 b2 o. f' h- g4 X. X1 o/ Y/ ?8 q- T
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。- f) g; @' r4 w/ I
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
: o2 L: S0 g7 D* w7 _8 s “清理”过的例程的源码如下:
+ O' p4 x# J) Q0 D: b" n4 e4 s
: w, {: W  B8 x1 d3 Z├── dsp1 |" w, W# j/ M" \, [$ p
│   ├── Dsp.cfg5 I7 @7 G9 D1 f6 V6 z, ~
│   ├── main_dsp.c$ T) W; z+ A" j& P
│   ├── Server.c
9 a' Y2 s2 Q) f; D! z% m│   └── Server.h- t) f8 C! W$ u$ z' y4 b
├── host; W( c" k" v# q* g8 p3 y8 V
│   ├── App.c
) \2 x. S9 Z* D& c│   ├── App.h4 p% |3 z8 K9 |* r0 e
│   └── main_host.c1 f3 N. [! p' l& I* k+ t
└── shared- q+ G: l, c) B2 U
   ├── config.bld$ M5 e/ J; l: {. b
   └── SystemCfg.h7 M( f: }' D+ o9 P6 O, {
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
0 w# m9 P# s( z1 o+ e! t% c1 e8 l5 S5 A7 N) ~( C
./makefile
" A/ ~* c; r7 s: L) x6 [8 n) T2 l- N. R+ e  V1 Q7 P7 V
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05+ H* ~7 J& `+ W8 q6 t2 x/ M
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
: j& d& B% |! ] 3 0 b, v3 L  B3 b5 H( |) c1 e
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi5 y. p+ |$ {8 E& r
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
# u7 b$ n, v; {0 k; W8 J 6
5 k0 A( _6 Z- T! s9 x$ X3 `7 c 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50  T! u+ Z+ A, T9 Y! Z% R( b: q
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
5 U  a. j8 s. ]" P, H! P9 [ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
& L) \! S" `/ w7 R/ u) r10
$ l: F2 f' ~+ S) D; I11 export SYSLINK_INSTALL_DIR      \
3 ^6 M; q; z4 S12        IPC_INSTALL_DIR          \' V9 [7 n* M, H8 l$ H! l6 A  F& R/ L
13        BIOS_INSTALL_DIR         \1 F5 \! M' d) L
14        XDC_INSTALL_DIR          \" ?1 l. \% {6 B0 m2 z
15        CGT_C674_ELF_INSTALL_DIR \2 g# S: `  w8 J0 o
16        CGT_ARM_PREFIX
, f* j2 ~5 A( [: `6 c( k# o17 " c) S- \. k8 `  Z
18 all:+ E& \2 B0 P. u1 X
19     make -C host all  E& c2 B% Q0 u2 E4 a3 J. ^
20     make -C dsp all+ L& }! T0 s8 R) ^5 m* {$ V7 j
21 + n' x7 g0 u0 R' u. W: [
22 clean::" D8 G- Y3 d1 w6 _, @+ F% w6 Y
23     make -C host clean8 X# S1 t; B. @2 {% M& p& t
24     make -C dsp clean
$ o1 _8 J8 J! ~9 n( O8 y! H: h, ~" F8 ?./dsp/makefile  ?7 t" K% L4 m# {- u
: H5 Z9 L5 R' h: k" ~
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件- c# ^  X% U$ c: d7 G! c: U
2 objs = $(patsubst %.c,%.oe674,$(srcs))
# }' G8 g% N: k' @$ G 3 libs = configuro/linker.cmd1 Y3 A$ n3 u& ?4 s# B6 O. c2 T
4 & }! m# n2 S# g  N
5 all: configuro/linker.cmd
) K8 e, w3 T1 \3 i# j# H$ r# s 6     make server_dsp.xe6742 F4 P; k( a" a
7
5 `5 F& `3 w8 m 8 server_dsp.xe674: $(objs) $(libs)/ g& d& q4 g7 y) b0 A, x% w
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)3 A. J$ |% j# H0 t$ s( T" m
10 0 V. `8 l3 I4 h* T
11 %.oe674: %.h+ V. x' C* R+ Y* J5 t
12 %.oe674: %.c
, C0 |+ b/ s- `5 w0 T: |, U13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<2 s) `  z" T# r; o1 Z. }
14 " {) f" `: O% S9 }& Z1 k
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld# a5 e, s) u! N8 p. a& e
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
7 P3 X7 }6 s0 R3 g  T! {6 |) m$ m17             xdc.tools.configuro -o configuro                        \1 v/ }9 V, f6 e4 ~9 l
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \3 P: c' Q: w/ ]- `  p# ~& c: p+ G! u
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
0 r  [5 F$ [% q7 Q9 g. M20             -r release Dsp.cfg
4 x/ a# V' `. V3 i) m) b; x21 1 E( @2 i+ f; Y2 b/ X/ m
22 clean::
, r) o8 X9 A, l23     rm -rf configuro *.oe674  *.map server_dsp.xe674
$ B$ C' q& |" w0 j' i! m24 3 x6 s' [& n7 F
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
1 m+ B8 \2 S5 h3 w: l26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages" {# k, \- R2 w" t( `
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
: E' j2 Q3 w4 r  F& h/ M: m28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages/ L3 F2 q  ~6 J( j) J9 N
29 . `+ _8 F7 _* ]1 }
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, \! _) b# S; U) [$ q( s7 b" B31 - J6 l& ~' m4 c8 X% z. u
32 CC = $(CGTOOLS)/bin/cl6x -c                         4 u7 V& \* u' ], o
33 AR = $(CGTOOLS)/bin/ar6x rq5 j6 `: L' j; Z
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi; z$ j% I3 [1 X) ~) X3 T
35 ST = $(CGTOOLS)/bin/strip6x
2 N& c5 |* @; }: W+ v" |36
0 c3 X* u3 _/ E& z* G1 J; \5 G  Z/ |' v37 CPPFLAGS =! W, ^" ]! z+ b, i
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
4 j; ?& X5 r" k  p# \39 ' v5 n) n5 Z& P/ t& x
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
4 m2 x9 M# j, p* |+ A# N" i41
/ L0 X# |* _$ j  [/ L42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     4 [! K+ C9 A  h0 y3 J
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序3 T. n( z- K) n* A& y! ^' _7 I
./host/makefile' f* ?, v+ d( Q. G$ z

6 N, c( S3 w  D  h" g. K" m 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
! ~  l- W1 [. s5 g4 o. U 2 objs = $(patsubst %.c,%.ov5T,$(srcs))# Q5 l! L- _, A6 u, H' ^6 Q% ?* Y
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug: ?$ D3 i- h+ E: b
4
& L5 ?- F; J6 f' ` 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))% T. A5 x, B% l
6 7 D9 L: a- j$ ?  U8 ?
7 all:6 h+ t' H+ g; {
8     $(MAKE) app_host
4 B+ F6 A6 m$ N' ~% f 9
1 ?  k6 i% _1 c4 ?10 clean::& R- x, S  B8 W
11     rm *.ov5T* *.map app_host* j3 d- g. v9 C& L7 E( r! j  C9 c& {
12 2 x: A% S9 F, l$ R7 a3 a& m
13 app_host(objs) $(libs)
- n8 K" z& i( ?- O% T  L14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+ m& R5 }7 H/ C- F; Q' Q15
( ]$ h5 ]* \: e2 ]+ h1 B  D  L/ u16 %.ov5T: %.c
4 J3 q$ Z9 c/ S  D17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
2 \1 U9 m# w. K% E$ I0 i18
9 A! N  B* a; k6 b2 e19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t$ z# D" V. Y+ q
20 AR = $(CGT_ARM_PREFIX)ar cr9 T) ]0 g' g; |. G- F' m
21 LD = $(CGT_ARM_PREFIX)gcc
* I% v  d6 w8 m. D2 A+ R+ c  @" E  w22
  h2 g: z# f% k) O23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \' K2 R6 s3 C+ j1 f
24            -Dxdc_target_types__=gnu/targets/arm/std.h+ s+ {5 d0 ?1 ^& i+ I+ Q
25
" c8 [  w3 @3 M) P26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径3 |/ f, P( E& m5 U$ B
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \6 r7 G' q* f& M; _1 X
28          -I $(BIOS_INSTALL_DIR)/packages                           \5 q% c  m3 b6 s) @6 D0 N# B
29          -I $(IPC_INSTALL_DIR)/packages
* W0 U* l& E( V$ Y( o) J' v) [30
4 \+ r% r# K( D( }31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
5 o( S' J  x( \4 B: m6 B32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
4 M( n# x: x6 n. J编译工程
- N6 {5 n, o& g, \. P" o# ?1 A$ _0 m' I
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
- X- }3 c- ]9 \5 |: \1 K
) t+ ]. J3 ~  \+ F* M2 l2 E& p运行工程
& B3 h: X8 n8 u9 e& @4 M1 H# v" ^, X
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
2 S$ G! z9 ~/ u0 Y: _  v# j
/ I. v2 d; t5 H1. insmod syslink.ko                    # 加载 syslink 内核模块6 H" W; E+ h# @9 ?; |4 z! O8 ^0 l/ \
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
  H. ^4 D4 Q$ u- i& k3 |3. arm_app                              # 运行 ARM 端程序# d( N8 Q8 Z4 P* ~6 }; e. k
4. slaveloader shutdown DSP             # 停止 DSP 端程序4 }+ D. U0 j* p$ N0 _$ z1 k
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
: i5 }; ~# M# ?+ S+ a% H5 e( { 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。" K- s8 @4 w3 X5 g  \& W% c+ @& s

. y8 Y" ]9 K% O0 t 1 #!/bin/sh
' x5 P' I; ~: Z( x* { 2 % [$ g$ B( C* C- g
3 set -x
6 G7 S& C3 s" X 4 * d5 X- F" j+ [) a  ~
5 insmod syslink.ko
3 U* v  L9 n$ J2 c: L 6 % U, G. e# }- g4 D" J0 e
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
5 B8 j* e2 G8 m3 a4 U0 i& u$ y 8 2 s1 h- q4 S+ f
9 ../host/app_host DSP8 U2 j% [  s8 ]* D# T+ f- p4 ]
10 8 H0 M( O8 Y+ s$ j* I$ F' m$ l! K
11 ./slaveloader shutdown DSP
  H4 q: c9 O# ]) g1 [  ?# B# m. \8 ~3 E
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
( z2 a) S8 o$ m' E% p: @: y+ y建立工程# |& i7 K" t8 l" L( N+ Q# _
  {: i0 r! J& p/ R
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
4 q# m. W7 w7 \/ 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
$ B4 {7 g  H/ I' }7 S, I5 E. H建立工程% F9 N! ~0 T# h* V" |$ x" x0 {! z

& i! x, Z1 _4 r& x 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

  q6 y7 b# w  D3 O/ ?: F6 i* U# C2 Vslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2070

积分

创龙

Rank: 8Rank: 8

积分
2070
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
, U6 N) |6 S; G7 h+ t- Dslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
. y9 o9 v& }9 S' i. h0 \2 ?
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:36 , Processed in 0.043685 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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