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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
& v4 \1 k; p- X: Odsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
: u2 {2 M+ ^& b% Y) L* ~6 }- H3 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
& _. Z3 d4 o1 w! X: w6 v: _
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程9 X; t7 w% ~' T& J2 n, P* `2 ?  m
! ]5 F- A; u7 ?
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。# b0 S$ n& t0 z7 k
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
' O( |4 r0 s+ a! ?  F. A “清理”过的例程的源码如下:
& z. J- T) o7 T+ y, z' D( [3 b* o! D2 d$ A* v- f$ l
├── dsp$ @: L2 t  l+ x0 A; d! S
│   ├── Dsp.cfg
2 \; D2 R/ s+ g2 A# M# t│   ├── main_dsp.c
: S% r0 V. S9 T, ?+ Q- ^5 E# K8 x6 r│   ├── Server.c3 y! w: m8 P# o
│   └── Server.h9 z' M  {6 F- l
├── host& G0 W+ j0 C! F2 ~! @7 n
│   ├── App.c
6 D8 o% F) O% m0 a│   ├── App.h
- |" e, R1 p" g: f8 Y4 p│   └── main_host.c( ^5 Y  {! T" B4 T, I/ h
└── shared
& N8 T) X3 ?) r* e' P% X' ]) B/ I   ├── config.bld( e6 `3 r! X' }6 o
   └── SystemCfg.h
% c7 T/ [9 @' k2 J/ I 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。. J1 j; \2 q5 ^$ t

. }+ M0 V! B" d% d3 O9 X./makefile5 S6 Q1 e$ X7 \
: z. J8 ~: a, g" T" \
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
4 k( x! z8 x9 @3 t- i8 | 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
) y$ u9 T$ D" l1 d' W/ ~ 3
3 F9 Q9 C! c2 m  ^ 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
* v( b' N7 D' w: ?/ x( v( |7 \ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
  I. i/ ]$ d9 E1 n0 N7 c 6
6 [4 g. s+ ]2 ]% n 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50! q: K( s8 S9 v/ ]- w; n; x
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
; ^. @9 t1 ~: u7 i1 ~ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.49 o6 E3 @% k7 T
10
0 G8 B5 m# j7 Y/ X9 ~11 export SYSLINK_INSTALL_DIR      \
1 Z/ E8 y- j8 I" G/ Z* H( G% S12        IPC_INSTALL_DIR          \/ [# a! l' Q7 _2 i4 G' `
13        BIOS_INSTALL_DIR         \, J: H. e; n1 c4 p6 X* d
14        XDC_INSTALL_DIR          \
7 Q1 q  U6 m4 m( y  ~# [, z; {4 ?5 g15        CGT_C674_ELF_INSTALL_DIR \
) I& @- N& Q6 ?+ G$ F2 q( u1 b6 z16        CGT_ARM_PREFIX. J$ F& y( B3 `' u2 s' Y
17 : g0 M5 {  x5 Q( b
18 all:7 G3 {, X6 q: P9 k; f, y; s
19     make -C host all
9 H4 m; Z4 z9 B5 f/ N20     make -C dsp all- ?9 w; v) d' {1 x4 b
21
) J. l, }$ P1 z# k8 e( ]% U22 clean::
# _$ ]2 A; O0 A: m23     make -C host clean" q" N2 t/ Q3 Q8 [5 D5 Q! Z% @1 ?8 a
24     make -C dsp clean$ r2 A: B" o1 D+ y( c
./dsp/makefile$ `+ Z! b' w% a2 z. g& I5 l& D9 m, K

& H/ l; j+ m0 k  V1 _" @7 } 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件( x" a9 W& y6 u2 G7 `+ [5 X  F
2 objs = $(patsubst %.c,%.oe674,$(srcs))
# |. w  r; ~$ i4 C 3 libs = configuro/linker.cmd
  T2 {: n; z$ t( c 4 + I9 }4 A! f3 b: R
5 all: configuro/linker.cmd9 {) f& i5 X4 L  U
6     make server_dsp.xe674
$ U2 H' ^8 C& V# ~3 D/ q& g, `+ S 7 $ t  G. w+ S5 J9 E$ Z
8 server_dsp.xe674: $(objs) $(libs)4 T5 i8 S2 m: M9 f* R
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 p! d; n7 W' M( S: `
10 8 H' `; U$ P% p4 ]+ ^
11 %.oe674: %.h
$ x; \0 ]" Q5 z5 m4 G# q) D2 @7 `12 %.oe674: %.c6 u3 B8 }3 t" J
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<2 H( O% V5 \# Y2 o2 G
14 # c/ c/ G/ F6 [1 q
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld2 T0 o) v9 N$ o6 j. I/ |
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \0 J" m* z. L7 k# ?5 @# M
17             xdc.tools.configuro -o configuro                        \  ]8 J% \3 F9 W' t! c7 Y+ x
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \0 A8 n0 j" A# A5 ~2 V8 ?5 O) c; ~. ?% M
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \! d' P6 M2 _) s. _0 t3 J
20             -r release Dsp.cfg
& q2 Z6 v8 r* \$ n7 R21 # l8 P8 c0 ?9 S
22 clean::3 H0 @3 u, I. d3 i
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
1 @* V5 e9 b) d0 [& t24 # U1 A, y) J4 {' q) C$ f
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
. }+ i- p) i- J1 o2 ^( ^26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages1 [9 V3 F! x' y' e- n4 ~
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages' q2 m* P4 e& G3 |1 u1 t1 y
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
1 O6 W1 N/ `9 s* }29 $ z: V) j3 b& _, ^  x1 k
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
3 M. l& N/ u+ z- ^31
) H% k" G; J3 C9 k2 T32 CC = $(CGTOOLS)/bin/cl6x -c                        
4 H% t! a& o: X6 ^33 AR = $(CGTOOLS)/bin/ar6x rq, G" Q" f  f# t4 H8 I- z" k
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
6 q* K4 S9 y9 P/ S( s" P35 ST = $(CGTOOLS)/bin/strip6x
8 X& _, t0 Q6 E36 ; }' X7 Q4 T. x; I
37 CPPFLAGS =; z' c: b7 p. \0 F# ]$ L, e
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
6 n# u1 `5 C( D7 Z/ K39 ) C- `% N/ v* y
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
+ {6 V% u4 |- b41
/ i: d# F9 V. A42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ; G* r' X) l, V- {
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. o, t, l0 E* u' ~./host/makefile
) _( E) i7 D. m, s/ i
; d- J$ _, ^) A7 e  l+ Y; r4 I" Z* ]" c1 H 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件. W  U8 {' D8 |# q5 |8 P
2 objs = $(patsubst %.c,%.ov5T,$(srcs))& e% r4 J: R$ v8 J
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
, n/ F) M. z* g8 T' H2 T 4 4 V6 R) q8 {7 z, ~
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
3 n. w* L% D, T 6 , g5 t, s: L8 v6 C0 L7 H
7 all:
" V, V6 K: x1 f  j2 z  i1 v 8     $(MAKE) app_host) k/ H1 h* ^% N1 `5 l
9
3 V' [2 v# g$ F10 clean::# |2 Z/ j2 w: \; I
11     rm *.ov5T* *.map app_host
  ~/ E8 ^$ N( M$ Z- l12 8 E& v9 {& V5 a! a: ?3 b
13 app_host(objs) $(libs). ~$ E* E4 y0 }' Z
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
# W8 p3 P: @' _& c8 ?" z, A# R" I15 & E4 F- D$ y/ N6 m& }1 i% ~
16 %.ov5T: %.c1 G' P8 Y7 P8 m5 z5 O$ a$ L
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
" w: D7 ]3 f& G* N18 2 Q* c" r8 v  l2 U/ r( G& w
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t) v( ?, x' j8 u
20 AR = $(CGT_ARM_PREFIX)ar cr, {* R( R. b& g! e5 u
21 LD = $(CGT_ARM_PREFIX)gcc' J  W( Q9 J; B/ H; K  J  L
22 7 t; @8 d7 h) }3 }; G7 p% K
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \7 d. G7 e1 w/ F# [1 {
24            -Dxdc_target_types__=gnu/targets/arm/std.h2 X4 j# Y# C0 s
25
! e- ^- x  N/ P& }( O; G26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
" L5 `7 v8 c; u8 S$ v27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
9 K4 v$ c9 j! }: R# f; {) A; _28          -I $(BIOS_INSTALL_DIR)/packages                           \
) q- }) d# t8 N# ^( D29          -I $(IPC_INSTALL_DIR)/packages- M+ s+ m/ Y/ `& t  [
30
( u8 a: D# i& o7 d0 M31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
. J  R+ Z- K  O* D' U32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
6 ~- ?) e; k6 g0 q8 d% l编译工程
: o4 Q8 c* x( k3 ]* i
, I$ @& C; I6 ]& [: L! @- y  f; i$ y makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。3 g3 J9 |. d; h5 f* T) U
5 v, K0 v* @  d7 _2 y
运行工程
# Q+ N" R7 `6 s0 L& x; t2 }/ o5 I1 R% m! @" `2 x
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。. s# y6 t8 R; k4 D
: c' Q( h; \1 j
1. insmod syslink.ko                    # 加载 syslink 内核模块  ~/ Q5 ?0 h. \4 E8 S) ~9 I
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
5 e' J  I+ T  R$ b( e0 K3. arm_app                              # 运行 ARM 端程序0 s# q! ?  X2 @- I
4. slaveloader shutdown DSP             # 停止 DSP 端程序: X- N( u  h5 f1 g* d3 Z* e
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
9 ]9 s& P; f* _1 u  P- ` 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。& w- @$ x+ }/ u) n0 u0 k& S' `
. F: l1 M. U! D3 p. J8 P- ]
1 #!/bin/sh
$ k! o) |: l& U  t: \+ U0 { 2 . b/ _# G: P1 r# ^2 g, j4 Q
3 set -x
/ j4 w" M1 k! r6 ^5 v0 E 4 ! ]2 V: F6 H4 m8 b8 c
5 insmod syslink.ko! @1 H' k% g3 V" J( m& Z
6 # e" L- }& ?  t
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
9 b  I% y% B2 ?" h9 X# l# V 8 # i8 d! |( b. C  u' K* Z
9 ../host/app_host DSP
: m$ p  c5 g- U10 + v) Y% |% g8 X' Q
11 ./slaveloader shutdown DSP, H4 u& O" w: J* D0 J
( M- p: h: |5 A  V5 A9 [
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:056 e4 T/ V* J! d& m4 L9 g0 n
建立工程
# L) O9 z- D& A1 F5 ~) Q- |: R: c1 Q/ u* n7 }3 L: T
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

& ^% a( T0 ~/ d: jslaveloader 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
0 f0 r3 y. F& ^5 Z( F( _* O6 G: ^建立工程
4 y8 J0 X0 U* w9 w9 ~5 X( u% s- x8 h% r/ N& F, s9 V  T
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" J0 }; W8 E2 Q9 f* aslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:401 l+ |$ K, L: G
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

3 B  u# \2 {! I% W4 tdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 19:34 , Processed in 0.038925 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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