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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,0 ^& F# u( Q- S5 q& p9 B* y
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。0 K6 h6 \2 w& X# \6 U) [
( R7 v* u) ?% p( g3 R. p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
7 q+ G1 T( e0 f3 ], }4 u' d" G7 o$ @# L8 e
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。& l/ j8 W& O* r5 Z* d! ~* T
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。+ o" C; c! H! e4 i+ J
 “清理”过的例程的源码如下:
( S# G) T. {( l1 X2 \4 J2 E; ^8 a( b! Z" i- v
├── dsp
8 C- G, G9 `* h$ E3 w& y2 p│   ├── Dsp.cfg
. H/ }. N. `" M│   ├── main_dsp.c
, Z- u; [: r# ?# d0 h│   ├── Server.c
8 s8 F% [$ V% R& z6 ^" t  l' s│   └── Server.h
+ X* k# G" ^" P5 ~1 k5 v├── host' Q! J3 R  b$ O3 b  |2 [7 z# x
│   ├── App.c- [  c; {  \9 N: t0 U" J$ c1 ~
│   ├── App.h) r$ O" t& W/ c& x
│   └── main_host.c1 }8 v" ~* H6 _3 F3 @! A% M3 G
└── shared' a  O# m% y: j6 O
   ├── config.bld' I, E" W3 u: \" C5 K
   └── SystemCfg.h4 T5 J& ]- J7 ]5 [, h
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
" u, P3 v' O+ r1 U+ f2 w2 K; F& G( d/ ~9 J* o1 w0 e. t
./makefile
& m" V& q7 H" x: H. Z6 [; Q  t; h: ^/ q4 ?6 d7 g+ t
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
9 {% D! d" v2 S5 ~3 X 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15& Y/ V& V% o4 Z, |6 ]
3 ; u+ G$ i$ E3 E1 U, |0 \
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
+ G" H) ^& q6 C: E 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
2 F) `+ y) I) k7 h6 L 6
0 y+ ?+ k, R% y& Y 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_502 W& j. H& j2 n/ K( y( q* H
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72: K+ w! `1 z6 J" b1 ?6 c
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4& k. O  F: q# u5 w  m) ?- Z
10 9 E+ c5 e, H7 t, ~" t- n$ r6 u
11 export SYSLINK_INSTALL_DIR      \
2 X) r: l4 U9 ]+ Z12        IPC_INSTALL_DIR          \1 k! D" Y% S0 [. J$ a+ N1 Q8 l
13        BIOS_INSTALL_DIR         \
9 X) G. M$ `' V0 F14        XDC_INSTALL_DIR          \
; ?& x2 Z- X  C1 I  ^% p3 C, c- y. f15        CGT_C674_ELF_INSTALL_DIR \- H( ]# L' a3 J& y" g+ _
16        CGT_ARM_PREFIX
2 D5 Y( F6 {* t17 ( Z; M/ J3 t  c) j3 T
18 all:. j2 u, S8 o0 U2 X) D3 U$ |
19     make -C host all% K3 S9 f4 B! U! [: h7 F/ P
20     make -C dsp all3 S/ G5 p+ C! x- p9 P4 Q; l! a, `
21
* X) S( Z( d' F9 o4 \; i8 u# y22 clean::- z/ i, c4 r7 |2 t, f. \
23     make -C host clean
0 x, G& f8 E1 y24     make -C dsp clean
( k- P' J) ~  d3 H! a6 s./dsp/makefile9 p3 o, O. X* D! E6 ?
  a; ^% S# C3 C9 U: L$ t
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
3 j, ?2 }- {4 a0 H) ?- k 2 objs = $(patsubst %.c,%.oe674,$(srcs))- q7 j. Z  B  A. b# @
3 libs = configuro/linker.cmd" R' {% j0 m* L9 m0 p; ^% j
4
# W  a! j& @5 b0 S( y2 f; `7 V 5 all: configuro/linker.cmd
% Q) Z* P* t+ A 6     make server_dsp.xe674) I/ |, B8 l6 R& R: ]4 z
7
* p; W5 ^4 `' _4 c% C% e1 Z 8 server_dsp.xe674: $(objs) $(libs)
  r7 n8 h& k+ Q2 ]& v 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
6 r9 j& @: `# O" H10 3 b. r3 B1 H) b' |
11 %.oe674: %.h
. x, `# F8 H3 U5 c4 U12 %.oe674: %.c& |: b% [1 G) J" l6 ?0 o- i# [
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
' ]+ `3 M& G2 e# ^14
* R/ w2 z# x, t8 B' ~15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld0 c* a& a6 g9 |4 b3 [. f
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
( u8 D1 L+ R4 E% a% r/ K' [17             xdc.tools.configuro -o configuro                        \4 |& I* O1 [8 H: D4 p
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
. Q! [6 l$ d+ Q, C2 M8 @/ C19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \# a& A! q/ ?8 \* Z5 ~) E
20             -r release Dsp.cfg
1 J$ b/ N" S* f- [1 u. `21 , c5 N% O$ K! q
22 clean::* R/ j  e0 ?, i1 D7 z+ `: r
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
0 j+ K: s1 p* }9 A% k( ]2 `24 $ l/ d8 F$ z/ b7 s2 d
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages1 J" q8 o% c6 ?3 Y3 x
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
( t! x* l) x) V" K- b0 R8 x27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages; Q- N1 H8 z2 [5 u" S
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
7 Z2 O1 h! S2 H" A; T( N2 ]% n! Q, T29 3 k6 j0 G$ G% R8 f9 m& \# {
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
9 m# w6 ^  b* U31
% j6 [; w: n: @3 O  z. V32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 Z6 \& S$ x1 b% s# H0 h1 q4 Q33 AR = $(CGTOOLS)/bin/ar6x rq: f! j" q( A% p4 c$ ]
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
. G2 H1 {- [/ t  N7 w35 ST = $(CGTOOLS)/bin/strip6x4 E+ a3 P3 s! f' k
36 : O0 i2 G1 Q" N" \: l& j
37 CPPFLAGS =
0 b8 \. a( ], b4 A38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
- G6 D5 k, P9 r/ P8 _39 , \3 X  v, r( z, p
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
% h" T! D/ o2 ~41 $ D' }6 u0 Q4 C$ S. S( p
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     9 w4 A- z: v5 ?! z) q# r4 T
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
' N7 Q# y) v, g$ {- l./host/makefile2 ~' r8 U& G* }7 N/ G% O
9 v' C8 |) X1 H, ^$ [$ p6 v
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件9 |0 a% X4 ^$ u5 t8 d9 ^
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
3 i( [7 m. ]- s- ~ 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug, ]5 [# Q2 K7 O! g
4 - O3 r7 G+ U  b) e
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
! K. j% e1 d( q0 v+ R# x 6
  J+ M5 a$ h/ \  o  A1 t 7 all:
& V) s9 H, G/ z0 P8 y9 b5 Y 8     $(MAKE) app_host9 t$ i$ U$ c5 R+ I" X# ~( E
9 1 X9 g# U* k+ T% w
10 clean::
( m  E4 |- t. l) v& u8 K! d9 B  o11     rm *.ov5T* *.map app_host
  J# n* ~7 H1 T12
5 k- a  N6 I5 m) N6 b13 app_host(objs) $(libs)
0 M- k$ r, m- |6 I8 Z14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)& Z0 e! G% F8 ]. z
15
/ b) O5 c7 g) ]+ h$ o16 %.ov5T: %.c, u' g# G2 s0 I: g" h+ W* ?, @
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<. O7 R$ h9 b+ a2 U
18
+ U; m! r/ N) R* i0 j, S19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
& P1 H! G+ O2 a& b/ ?20 AR = $(CGT_ARM_PREFIX)ar cr
4 e( M3 ~% T% b21 LD = $(CGT_ARM_PREFIX)gcc
. t: {1 X: [# Q! J- w/ `* n22
" j4 z- [' S- c& p* y* v  W* g23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
5 K% }7 [7 ~5 B' U& Q6 z) ^24            -Dxdc_target_types__=gnu/targets/arm/std.h  J; ^" g- D8 J2 ]# g( F
25
% ^( J- e+ X' @6 X+ l" @26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径7 _6 D7 U3 ?3 V  f5 B
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
! m! n1 d2 j7 z8 n8 X28          -I $(BIOS_INSTALL_DIR)/packages                           \
. z; f" P: e+ t1 w9 j29          -I $(IPC_INSTALL_DIR)/packages
# H! h$ Z- ~& Q' L30
9 l# c2 g5 u: X7 s31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map  D2 J) d9 x, R6 w, N/ o% [
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序8 {& y) i& D4 s3 r# }
编译工程
: P5 r( N6 k0 C; |* s) Y
& N  L5 m* V, @ makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。8 S% n: ^0 r( o' k9 T7 F

# g6 G; w5 s; ^! R运行工程
+ |; j; \, r3 ?7 y. a2 h% H8 ?+ D& P' U% N  x( ^5 k
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
6 ]0 Z* N) R8 C. D' o; b9 r. W/ t/ v3 u2 L/ L" d
1. insmod syslink.ko                    # 加载 syslink 内核模块
4 R6 c' ~4 P( V# r9 l( ]9 u2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序8 t0 j! ?9 K! S$ O  w" B3 h
3. arm_app                              # 运行 ARM 端程序
2 `+ {1 {6 ]7 N( ?7 v' p4. slaveloader shutdown DSP             # 停止 DSP 端程序
8 I0 o1 v) Q( _$ R5 O sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
; J; ]6 T7 d; Y" K! \ 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
& z* c; s# d* [
, W. T' b. Y# @2 f" Y 1 #!/bin/sh! `- l& X7 W2 M* }
2 6 a# P1 g: m5 N% G% M2 p
3 set -x
  `1 N: j& A7 o2 v1 L3 T 4 % H1 t9 _  t2 Q( Z9 |) ]1 {
5 insmod syslink.ko0 O. `( F7 w5 F5 z/ M
6
; {  B' M$ v# S/ R2 H( P 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6749 K# v  Z. z0 s( c% P* n# x- R. ?
8 - N; ]7 }! H, T( U3 H
9 ../host/app_host DSP: j3 r3 w' F, X8 {3 J  w
10
  A: A/ Q$ h0 y6 C11 ./slaveloader shutdown DSP
( _0 t5 v7 D9 }2 Q% g+ A3 _7 s' A
3 n# R* J& \! j/ f: e! o. Y
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:051 M( G# k+ j' b+ w5 _* Y! e
建立工程2 h: ^9 g! k, c
' h6 B) f5 y0 @( `+ x
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
. O; J" J0 Z2 q1 Q& D% V
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& ]* e; f" f! X! s  t* }9 F# W; m
建立工程
, L5 i1 G, \' E+ i$ Y! _( }; `$ B
7 ~% V: |" w8 A+ Z; b" S+ @1 W9 t 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" W3 ^6 S% i! ^5 z# I& @slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2196

积分

创龙

Rank: 8Rank: 8

积分
2196
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
5 e5 i5 \& ~, a1 rslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

2 a* m& u5 m4 \3 @- D$ Xdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 09:23 , Processed in 0.049376 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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