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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,1 g& g+ J* ]4 o5 D7 y  v# t4 G
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。5 T" Y6 Y4 [! k, f" P6 E6 o/ L

8 d! t8 D, m' \" I% w& X# A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程& @5 J$ p1 e/ m' e( n9 |. B

" B: x' g: ]' U 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
1 S% z0 o5 R5 S" k2 c# E8 k- R 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。- v2 J' T9 ?& i8 [& _
 “清理”过的例程的源码如下:
0 b% b, n" C6 ]- B1 Q" f/ s/ Y$ O# P' Y
├── dsp
- o0 Q9 B' s$ @  f) F6 c/ v: a│   ├── Dsp.cfg
. F! T0 K! O7 B" W1 f│   ├── main_dsp.c
$ l& `/ n# S# z5 N+ W9 [│   ├── Server.c) O8 L# K4 E- z' x- a; H! e8 r! k! x
│   └── Server.h
  U6 S; h8 c  D, v+ v( y! E├── host' G, F6 Z2 k5 z, `0 {
│   ├── App.c
0 @+ {5 E# V8 F, C3 z│   ├── App.h
4 ^6 _" b! G7 r- n/ u; Z│   └── main_host.c
2 G1 M) m& Y: P7 z, S└── shared
& ~& X0 _0 v7 u: w5 k   ├── config.bld5 @; Q2 {- \9 B9 N
   └── SystemCfg.h, @- K+ r" L' A2 q# I; V
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。% v6 }6 }+ Y' N' y1 a1 G, G* v
2 y. A/ Z6 z6 k& f
./makefile
: U; {/ F0 |) r6 M, L3 N
/ S2 g$ @2 V# Q" A1 b 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_052 `4 Z' A" G8 A7 a3 e- Y
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_153 A/ x4 n' `. F9 |' q
3
9 a& O" ?- b0 H  V/ l 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
# y/ G  k; \- E9 u 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
2 q# |9 m( u7 b3 g/ Q. }7 K0 K 6
% C) d# J$ e" Q" ^0 B; H 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50; z/ D2 \2 @2 }( _- D; V
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
2 T+ v: l: b+ J8 C: q" B 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
6 z7 [. B' o% K: m. x10 ( Q+ ^9 t. k* e# k8 k: S
11 export SYSLINK_INSTALL_DIR      \7 i, w4 b9 T! R9 R0 ]6 j# e
12        IPC_INSTALL_DIR          \) p$ F- f) N( x, V# H6 G; U
13        BIOS_INSTALL_DIR         \1 u& p2 P# p) @% f0 e
14        XDC_INSTALL_DIR          \: f! R/ o6 L  Z5 `2 J8 Y
15        CGT_C674_ELF_INSTALL_DIR \
- d5 t! Y! E2 V1 s/ d, ?16        CGT_ARM_PREFIX
+ Q3 ?/ F$ s4 n, W+ U17
4 O1 s0 X. X  l1 T+ t- h$ c18 all:7 ?' I) e; X! H) E7 A: t) n/ g
19     make -C host all! F6 r) |+ _* N+ g+ q# O. d
20     make -C dsp all3 L6 w% n- N6 V
21
! {. N: o6 |5 M22 clean::. L' @, P7 \3 X+ k, t( x
23     make -C host clean% I- {$ N$ q' d1 O. b
24     make -C dsp clean
* O" x# l  H$ f) F./dsp/makefile
  n# V0 j& g; m0 V2 R. P. Z8 @  H: d
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件9 ^" z! A* v" e- ^% F$ [* [1 }
2 objs = $(patsubst %.c,%.oe674,$(srcs))
5 ?6 e% u8 Z  I+ w 3 libs = configuro/linker.cmd& l3 c; y# }; B
4 5 p5 s8 ^' w- I4 e
5 all: configuro/linker.cmd! w. Y0 H! {2 E& @( ^6 ~
6     make server_dsp.xe674
! @4 [$ w* O* F, x, M0 G. D; B' s 7
8 j1 c  P( [( E& w; L 8 server_dsp.xe674: $(objs) $(libs)# y' t+ x* b3 o
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)0 }2 ^9 l+ n" l, Z( v
10
' v' ~6 d+ j: I4 R. E1 o7 C11 %.oe674: %.h: {6 F; E: j  U( t' A
12 %.oe674: %.c
& @7 ^+ m" U8 n! S2 W13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<1 o/ L) h. ^4 d6 q; j1 N
14 0 t, E$ w% T- v
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
0 K9 @: S/ b9 n1 F16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
, @/ Q* s: ^; W' [( P# W. m' U! M17             xdc.tools.configuro -o configuro                        \
- [" Y8 j) G. t+ T18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \% x( b1 Y1 C$ n, h
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
/ t$ `1 V7 y7 @) l20             -r release Dsp.cfg8 A6 X/ P8 S" O1 ?; f+ t- {2 c
21 5 i6 @' u7 c% l$ O; Q
22 clean::
  F: b5 N1 {& c23     rm -rf configuro *.oe674  *.map server_dsp.xe6740 T$ [, A3 _# g5 [
24 ; F5 [! Y) R# Q* }7 R+ Z/ y3 \- ]
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
6 F$ P2 m: |% D2 Y26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages8 A! k4 X) o" |6 g
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
. w6 e$ O- p$ K2 i: \1 |, p# p28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
4 e9 Z- I8 Y3 P$ l1 w( b; e29
1 M) ]6 @. l9 j1 P30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
. k$ G! g, r9 x; c31 ( W) B- c5 y$ ]$ e. p
32 CC = $(CGTOOLS)/bin/cl6x -c                        
- f- V6 ], d( Q5 Q$ [33 AR = $(CGTOOLS)/bin/ar6x rq
6 Q, T# |* n7 v& ?- U0 |0 U34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi) S" r, W) K4 j; T7 D/ G, O7 v
35 ST = $(CGTOOLS)/bin/strip6x
" E7 g3 f4 `3 i" h36 ; o- ^' s3 y) f$ i8 a
37 CPPFLAGS =
2 P2 q, y: i/ q( Q. c- C' s5 z38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
% K+ D8 U* q" Y& ^# E- T$ C1 j39 " L( T. y) h5 V$ Y
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)* H1 `- z; u4 h% f. w( ~
41 - W9 g& Q" d' ]0 A% V% a* b
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     0 ~$ V4 [+ \2 O# t- V( n  r
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
1 l7 S  @0 b- b( G! q* ?& ]./host/makefile
. J1 \2 n- `6 w) P2 z1 b" D+ d
: N! u" u+ A9 l# n& q0 O2 [ 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
, U; p# N+ K* |* t- s" v  R2 C 2 objs = $(patsubst %.c,%.ov5T,$(srcs)): r3 m& i  X5 q6 d
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
/ U- }4 ~) Y' k' M( h; j 4
* t0 S7 D* ]( c 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
( i0 i& Y2 J/ G& q8 B 6
" a% N& R( E6 k3 l+ T8 q$ W 7 all:/ W, p5 t$ o! L( Z' p
8     $(MAKE) app_host. c8 s' s# J" V) ^! Y$ j! t; `
9 2 x! T) I) h4 T7 X! W
10 clean::
& n% W/ O5 h% q9 A! i6 c11     rm *.ov5T* *.map app_host
% ^+ X5 k( z7 O: {; Z  c- W12
; e$ U, H4 S' ^% a! V$ A4 l$ ]3 R/ P13 app_host(objs) $(libs)
- ~# Q( I0 b7 _8 _14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
! p; V% {) Q) g7 R" I/ X15 0 t1 |4 g( v4 D* @7 a, H
16 %.ov5T: %.c
6 y; `9 o" b0 A$ y2 j5 Y+ N: _8 T17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
2 q3 n3 w. f! {6 F18 ) s5 u' o5 ?/ _8 f
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t( ^' P6 Y/ M8 ?4 a+ G2 ^: S* Q
20 AR = $(CGT_ARM_PREFIX)ar cr
9 Q* G4 o7 Z& P! W21 LD = $(CGT_ARM_PREFIX)gcc1 b. D6 A8 B1 y- R1 E/ P
22 ) j/ z* z0 F, J+ C- ?1 B* e
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \  F/ ], v( k# f  C# w& P
24            -Dxdc_target_types__=gnu/targets/arm/std.h5 M7 L7 _4 U& _& n/ Z7 E
25
6 w1 h" T& S/ Y0 B7 o# F2 W: w26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
6 q& n2 P. F% d& T. p" @27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
3 I# [# K+ v/ N9 V4 Y28          -I $(BIOS_INSTALL_DIR)/packages                           \
& v) _; k- c! b& M, I3 v29          -I $(IPC_INSTALL_DIR)/packages
3 _- o  x. d! e& C0 a% v: O( {/ o* t" D30 # ^; p  j3 `4 d# x! B/ Q7 e
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
3 g& S% s2 g* N. N2 \( r% T32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序2 l8 d" S% w9 p% ?( T  N& A- e
编译工程
- J& b  i8 i+ u' I* Y* k3 a& C8 u! Z# w, C# ]2 _
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
3 X! n! X( x- ?0 ]- t
, W  E" x6 G( e运行工程) r( R! s: l3 Z" T6 [

* X+ L4 M  M6 k% T0 G 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。0 I* x5 u. V* U  b
5 ?6 n2 ]+ E6 h) D
1. insmod syslink.ko                    # 加载 syslink 内核模块
" B. ^: e, F  H) c" |2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
. p, L0 E3 q8 V! x/ n: G; D4 M2 l8 s3. arm_app                              # 运行 ARM 端程序
1 y0 [  F! T" c$ T1 z4. slaveloader shutdown DSP             # 停止 DSP 端程序" o& K! H, Z7 f; D
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 # p9 J5 a6 W: l% X, [, j
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
2 t1 o) N2 A- u0 ]  u4 o
# z4 X  T) N- E- I5 T# j. w% _ 1 #!/bin/sh
' ^6 \, L  Q! @ 2
% s& o. o& ~* m( r 3 set -x
, ^8 R' r; z: ~( f/ G+ c, U 4
% J/ \# b& c  q" g# Z5 t  o& P& E 5 insmod syslink.ko; u' ^( M% C( y  }( f$ X7 T
6
& {; a6 {; P, c( T5 e6 Z 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
( `9 Q+ ^/ W! Z* @ 8 ) m/ T( Z3 C5 v
9 ../host/app_host DSP
3 G: w. |+ Z% n' X" I10
5 J: X5 J. s' K2 b* f, i3 E8 c9 d3 N11 ./slaveloader shutdown DSP
: D9 o2 u4 j2 }7 k- n! j3 f( E  v/ K7 S: u' O
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
3 o3 b6 l. y# |建立工程
( u; Q4 a  O4 b- B3 E) F8 w7 ~  h* }/ n" N1 I
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
" J. F5 }* u% l
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
6 a- g) u$ p" E' K0 H建立工程3 c! a$ @3 q0 l/ F- U% h! J3 r

6 F2 t7 b1 X4 a% p6 c8 V 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

6 |* n) ]) U# }7 O) Cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2102

积分

创龙

Rank: 8Rank: 8

积分
2102
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
4 u3 |3 F. w8 S* H! Q' aslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
0 o; G+ \6 p' k; R
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-6 05:24 , Processed in 0.042872 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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