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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,# W  K8 P/ d; g$ n! \
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
" G$ i2 K( H- Q8 Y: o+ Z
. A2 H9 r1 l: l4 Q& R2 l3 A4 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
  f" A, F, H: \- U2 ?1 J6 E# e6 e+ Y; l' b
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。, ^' L; _% k* `3 v
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。, {9 s& }1 E5 o  c) V* ?
 “清理”过的例程的源码如下:" E0 k3 ^. {2 y5 x

+ Z2 r& V" ?7 N$ g6 n├── dsp1 |& d- {% k8 Q; ^; v* P# e
│   ├── Dsp.cfg* L- @! h9 b& o
│   ├── main_dsp.c1 ^0 a) h0 z: I( u) V% n9 d; A
│   ├── Server.c- B- V8 }9 p' F* o" r1 q
│   └── Server.h
1 j0 c- ]; I$ J2 P0 z├── host
' N. f! m7 |) d│   ├── App.c$ Y7 C0 I( K0 h- K. Z
│   ├── App.h
0 y8 f8 Z# j& m. |" z│   └── main_host.c
7 j/ K( l& O, N└── shared
" X, C0 T7 P; ^   ├── config.bld8 q7 s0 K1 ^" J. y4 z
   └── SystemCfg.h
+ e7 y8 i, @$ r$ {. Q 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。3 w2 V' @1 |1 b6 C+ ~% b" J
8 P9 S+ N! u! G* Y$ F4 r- K7 @
./makefile: W5 ?% C* p" z+ B5 w5 r
0 r, W$ z) B; X+ g& X
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
7 s7 S" _0 O. g$ @  v; `1 ? 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15# a1 }! s! K9 E; ~4 R8 c: Q# U
3 ! r, O! Z) \: E% W1 v5 r
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
$ t- i+ x1 I  |% ^: K; h 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
. `$ z' |. j4 ^8 S 6
4 e- P+ d& x# F6 a 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_505 y7 _  ]# d+ }, h: E0 N" l0 P
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
+ F9 d9 L. f& `6 p9 o+ r8 [6 c 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4" m0 b$ ^# G& j7 M$ l
10 % T$ v; G7 x( t. r- D% U) R
11 export SYSLINK_INSTALL_DIR      \
5 F; u. v$ G" m! Y% U12        IPC_INSTALL_DIR          \
+ \$ e6 {- |- `4 @13        BIOS_INSTALL_DIR         \8 N0 j* s' K  ~& D
14        XDC_INSTALL_DIR          \: x  B# {' Z$ Z' H
15        CGT_C674_ELF_INSTALL_DIR \/ K2 P2 Z$ {; d% h4 K1 I+ U3 p7 \
16        CGT_ARM_PREFIX# Y) _  r* Z. A, a
17
, u# S9 q* [0 y# u4 p" k) D) e18 all:
5 l+ ^  W( v+ U19     make -C host all
8 x8 H7 d( B. U0 X3 O4 E7 ~% }20     make -C dsp all
0 o$ J0 @1 t$ U% ^; }) L2 E21
5 A; i7 |0 T- z+ L$ d1 g" s22 clean::
7 S( L/ Q  F2 B3 t' I23     make -C host clean
# l5 J  v. u. ~24     make -C dsp clean$ ]" o* @6 v2 d: `% P
./dsp/makefile, |3 s. Y1 U& W; f
, ^! N( M; \) ^0 |) B
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件1 V# v% A/ W0 u$ L) z0 F9 L
2 objs = $(patsubst %.c,%.oe674,$(srcs))' P. f! F3 C7 ]* [
3 libs = configuro/linker.cmd' z! b' c  s! X( |  S' J
4
0 v3 e# m# v$ B% E  T& O" B3 K 5 all: configuro/linker.cmd
1 z7 g  Y3 e* l 6     make server_dsp.xe674- |; C0 L4 W: B3 E, C/ j  Y
7 * I" K) P" T2 h) [
8 server_dsp.xe674: $(objs) $(libs)
+ D3 [2 t; B* I1 S$ ?2 ?* ]( A# [ 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
1 W! e" k6 l8 a10
- {% D  \3 B/ z11 %.oe674: %.h
. Z% f) p% A9 b5 U$ i& O12 %.oe674: %.c
9 X) f+ l: N8 ~13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
/ n0 c6 U8 F+ \, j14
3 R8 V' ~9 p; L* j15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld# [8 A! N" M! w  V0 h. m9 i
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \' l  s1 U$ q3 b. V5 P% z5 r% ~
17             xdc.tools.configuro -o configuro                        \7 a5 s* }% N9 @# W$ O% q" F
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
3 h& f3 ]2 e) d2 O* @19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
9 s' r3 b3 {6 X. q; [  i& P20             -r release Dsp.cfg
  b! S; M2 O+ y' Y) E21
% A6 b* P/ Y/ {# B) h% r22 clean::
+ c% a+ W" X3 v, ^( J23     rm -rf configuro *.oe674  *.map server_dsp.xe674$ L( l0 x5 ^9 R) n
24 3 c( S" Z2 Q! f$ q$ }; X
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages" q+ q; l+ c! V9 s
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages* i9 y1 }  h/ }& r+ N
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
9 |" s3 e* p+ _% \; C9 C5 i28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
) m2 c" e6 u1 ]6 G% j29
9 K% I8 V) x7 B/ y30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
' c% r8 g  M9 t" w31 8 S" J2 j+ N6 t0 h
32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 E1 D* R( L! K* O) D33 AR = $(CGTOOLS)/bin/ar6x rq
1 u3 E: Y& E, I) D, P2 `6 |34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
' M0 R5 Q$ L4 F; V/ \8 R  Z35 ST = $(CGTOOLS)/bin/strip6x7 n  J, O8 j7 R3 |) p2 b! C
36 ) S1 g2 s7 o* }2 d/ D, h
37 CPPFLAGS =* Z6 @6 k2 |0 O  o
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)* j& n! s7 p3 d: Y  ~3 d
39
8 M4 j8 M; F( J7 B* N2 I) D40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
: U" }: L2 w4 l41
1 f4 v  u- u: _42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
# b/ k& Z) l. f+ S8 Q, h43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
% j3 k8 ^1 P  X) b9 q7 j./host/makefile6 h7 R# E" s& S: Z& C
5 d9 X+ i. C5 v2 b
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件" T) m! P# i4 z$ R6 e% x! a: }
2 objs = $(patsubst %.c,%.ov5T,$(srcs))( Y8 |$ [. Y- d+ z0 A2 B3 M$ P
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug. ^' \  q5 L% z4 s! X3 l
4
! ]* J! q, {7 S7 Z' ]% m 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
1 R& G  W6 J& n 6
8 `/ ?! u8 `, t! m 7 all:, g' K2 G( z/ e( z' c
8     $(MAKE) app_host
( ^$ r7 H9 }5 W! ]7 L2 s$ J. I& T/ N 9
2 k% J/ s0 ?* ?( J10 clean::% @$ H! e3 `# s; j9 {
11     rm *.ov5T* *.map app_host
% b- N% e) i& R8 p) P12
) N1 ?1 Q) m) N1 @! r& |13 app_host(objs) $(libs). _0 M1 B9 U4 P, P" i$ v
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS): R- G( g2 y; I: k1 ~! l- s
15 ( I7 M4 ^: r2 Q  H7 @
16 %.ov5T: %.c
& \; x! C) ~" N  G3 _1 I17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $</ A5 n. }; J9 i4 s" T
18
( u$ H  Q3 n/ q1 z19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t4 M- ?/ g' w" l! g
20 AR = $(CGT_ARM_PREFIX)ar cr% H* [& N: y/ C- v& P
21 LD = $(CGT_ARM_PREFIX)gcc- g) J0 `% I  y# O: p  z  O
22
1 r  Z3 k& Y) D; g" o, H! L( O23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \$ l% u4 x! V% M) H0 o0 ]# L
24            -Dxdc_target_types__=gnu/targets/arm/std.h
+ T. L( @( ]7 x25
2 d; f% I# W: S) l, R5 m7 c26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
& H% T, H5 m( S/ @27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
! g8 [# ]6 L$ p/ o* @. b9 a28          -I $(BIOS_INSTALL_DIR)/packages                           \2 r7 x9 V% I- r: e) K/ h
29          -I $(IPC_INSTALL_DIR)/packages% S' A$ @) ]5 [: V/ o# V, z1 b
30
' S3 M& y1 {4 U31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map3 L5 g. p7 D: T% O, h
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序8 ?; u$ Y  j! L! i. x% o$ l- w/ \
编译工程* a$ @: V* W1 o! G1 j% o

% g3 C& |* x0 L" G. v/ ~ makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
- |  L9 g; N9 x9 _1 I# @2 M3 K$ Z" A# t  C
运行工程; @3 t/ L- P, @$ b6 h8 p- U
- t: N' k# @7 l8 d
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
8 V; ]: T5 g6 R  L3 e. U1 i
: `' D: `+ A$ U7 W, \! \7 [2 Q1. insmod syslink.ko                    # 加载 syslink 内核模块
% ]; E3 W( }7 u& b$ x- p/ ?2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序0 f2 B1 s2 _# b& [. z7 I1 t
3. arm_app                              # 运行 ARM 端程序6 y' _9 C& r% j
4. slaveloader shutdown DSP             # 停止 DSP 端程序
; G2 ~( Z3 D5 t! z sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 0 L7 N# t) L/ p$ ^$ Y1 k$ G
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。4 A; D8 l! f% v
7 u- g  t5 Z) O
1 #!/bin/sh9 B3 D4 ?- y& q8 Y. S$ G$ s
2
' U5 ]* V; V0 i6 ]4 e 3 set -x/ K0 [4 M) ?. A% F) }5 i  u. R
4
6 Z, z8 c) O& s! A: o( x 5 insmod syslink.ko
5 T: T- W' i' ` 6
/ M3 m  L, o' X3 G7 T* p; O$ m' | 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6740 v/ _" A) s! q
8 * d2 R* J8 X0 V
9 ../host/app_host DSP8 ?! @  Y* d$ Z3 ]3 K# f
10 / Z0 `9 w7 A8 t) o
11 ./slaveloader shutdown DSP! |* A1 z  J9 D7 `  x8 B

# t% A/ _) @6 q0 a
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:051 W1 F6 I% g) c  [/ l
建立工程
+ _4 J9 r8 Y8 Q$ w
6 }' e$ f" R# S2 ?# L 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
8 a- h7 P- }2 R0 O# X" C9 @% C2 Y
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:058 _, U) m3 o% i1 }. `6 \
建立工程
0 H" B" m9 I% y/ o8 {  Z6 P, p1 l1 V: s4 S, Z4 P- X
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
6 p, C% g7 _; i0 A, v
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2027

积分

创龙

Rank: 8Rank: 8

积分
2027
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
5 x; L% c( R5 R3 S( J5 [1 Islaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
  X: G. P( h' V
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-8 08:45 , Processed in 0.045098 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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