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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
# l* G2 u% ]  l7 `0 n/ ^dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。9 G5 f9 `8 o# l7 U6 a; _) v" H
$ }0 t) ^2 ~3 F+ T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程- K/ l8 v  O3 T% X: ^" _; w  P

; C6 F9 F- S( l& u' F4 U 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
  ]8 I7 N8 i& @8 i& f( s1 R4 \7 K 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。5 _( B( L# \& B
 “清理”过的例程的源码如下:
# N) B9 V! }! U2 a& r
! M: d3 h) e. G7 n0 F├── dsp+ [# I3 d$ S6 {; B. n
│   ├── Dsp.cfg% e1 ]) q7 g  T
│   ├── main_dsp.c5 M; U0 U% `, X9 I3 {
│   ├── Server.c
, S! x+ e7 K6 f; M│   └── Server.h
" Q" ~) S" R7 ?├── host; B0 ~7 t% P+ _9 M" |
│   ├── App.c
2 G7 {0 U7 j1 s( k' w│   ├── App.h. r6 c4 I; z5 @" I  c( A
│   └── main_host.c( f+ Q4 T; Z2 x1 N$ S. h" M; B
└── shared
, x% T$ o* m* k' `% g  T9 ~. L; d   ├── config.bld3 }7 m$ P+ h1 r7 `7 ~/ D' j
   └── SystemCfg.h
7 O5 Y" ^+ Y* W5 W: v 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
% _2 w# @4 F: v5 S% Z# F2 V' m+ Q; ?/ _* S' U
./makefile
, n- R+ u2 w% U& x
5 m! l3 H" X( } 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05- R9 w' |; }. C; V
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15/ x* g* z0 {# _& e; A  i
3 2 L6 L6 P3 @/ a6 ^' s" G& ]
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
4 f! D; `1 T" ^1 \ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-+ B3 ?8 D, U( `1 w, O$ v1 V
6 & p1 }0 c' f, G6 e- M! R  Q+ a
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
1 H9 x# t5 X8 I7 n 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
2 ^, \  I% E5 N, r  [ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.48 y( R. X: S3 G
10
) K5 p- p1 a$ Q1 Z4 |11 export SYSLINK_INSTALL_DIR      \( t" u  @$ k1 \2 ~' ^' P, v* j
12        IPC_INSTALL_DIR          \5 A5 I* J& H6 S: x6 W  h0 L' V# q
13        BIOS_INSTALL_DIR         \
) ^" o& U; b+ `# Z9 X14        XDC_INSTALL_DIR          \
6 Q  k; p- q& {# W8 ~0 P% j15        CGT_C674_ELF_INSTALL_DIR \  Y5 M1 ^8 V& j5 i( c) P1 n" d
16        CGT_ARM_PREFIX# k+ v  s7 }+ d
17 4 x4 I6 F# ~  {) E  Z% V  o
18 all:
5 s/ _: h2 R6 B6 m* N& J* f19     make -C host all
' W) P  Z4 e5 |% z5 C6 K20     make -C dsp all
5 Y/ K4 _/ `6 p8 p  u21 5 o) @, s  I$ g8 F
22 clean::% @1 J/ ]  f6 E0 T* W9 ]/ d
23     make -C host clean
5 y5 E$ O, N/ r" l! ]  }1 p24     make -C dsp clean
9 N: s: I& W6 i) r8 N9 G./dsp/makefile
" x- [: c+ Y' |: m& L
+ v# w1 N; s" v0 y  J% H5 U 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
6 U% R' h2 j& u8 o4 x 2 objs = $(patsubst %.c,%.oe674,$(srcs))2 _! Q6 T" e  N- D+ r
3 libs = configuro/linker.cmd/ i7 |4 m( z2 h9 d
4 8 ?, r0 r5 X( S+ @7 d
5 all: configuro/linker.cmd) Q/ M) M! r& ^3 K7 u6 s/ }) O
6     make server_dsp.xe674
5 }1 I# ]; i. V+ p9 { 7
0 v( p9 T4 ^# | 8 server_dsp.xe674: $(objs) $(libs)
9 h- t, m& k9 D( P6 i3 U0 q 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)& b' O2 I; T2 p+ {) e- Y1 z. r
10 5 [1 ]% `, y$ {* ]8 x8 @# e
11 %.oe674: %.h
5 h& J1 C3 P" A3 c4 @; E12 %.oe674: %.c
2 F: d( Z8 o: I. ~13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
9 Q1 T! P- Y5 r3 D( u7 a14 , v0 l. }% N3 X. h9 H0 }7 ?
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
' T) a4 [& D4 e: g16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \- a& M7 D3 Q- D4 m" N( t
17             xdc.tools.configuro -o configuro                        \
5 R( Y* X* _- |# x8 D) m1 q# W18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
, K5 E+ b* A' @9 y/ I9 h# {! P19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \1 T. F1 T3 Z' K; f; ?0 C* F
20             -r release Dsp.cfg
) y8 Y/ }# e" J  \) V21
$ B$ h: o5 C  c( m+ E% S/ E22 clean::
9 ~/ _, X$ {  ?% P8 g23     rm -rf configuro *.oe674  *.map server_dsp.xe674
1 a' D9 n) L9 n9 v24 3 z1 M: Q, E3 A
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
" y. M0 m9 W  Z26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
# L9 A9 h3 s, k. R9 m$ D27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages- i/ s4 J, ~. f( _2 Z" a: ?. z
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages' a" h2 Z- m2 o2 K! |
29
) w3 K" L8 [# V30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)) Y8 y) @1 p! j$ G) `8 d. u
31 0 ~5 r6 r* t" k5 [9 \
32 CC = $(CGTOOLS)/bin/cl6x -c                         ! U) L) Y, p- R) F; G$ I2 C5 d
33 AR = $(CGTOOLS)/bin/ar6x rq
! B; V+ }% O. g# D# C! h* d) g. a34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi# N: S0 x2 p/ O8 E3 Y
35 ST = $(CGTOOLS)/bin/strip6x
1 j' r' @0 @* I# ~5 z36
9 B: s6 H. q1 f/ }% P37 CPPFLAGS =$ f. _4 d# e" |! l" E5 {
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)# R  A* ]1 g. S- R. j
39
+ p: R, L6 e+ W! k9 E; d40 COMPILER_OPTS = $(shell cat configuro/compiler.opt). a# j% U) g( o# [
41 ) x  V# ^: G# Y# l% E
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     2 R4 k' t# z! E$ v% J" i
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
" }* `2 p- }' S& E& e./host/makefile
: p2 S* R: Q3 b4 Q& l. Q8 {8 {3 P
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
/ f: Z0 U4 u+ K* M$ k9 F0 ^6 Y 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
+ c, s  Y$ f, j; Y/ Z6 k0 g8 n 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug/ m* c: N# S6 f8 c/ m
4
8 x4 P7 \" Y4 u% Z$ ?* B$ b 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))' e$ p7 w! ~* `  _
6 6 B( Q* f: b& c3 z6 V
7 all:
7 T. W* z5 _% v1 t' U% e7 C 8     $(MAKE) app_host8 V  ?9 ^% |8 M! i) B% [
9 # ?( r. p# w, z# G
10 clean::
2 h9 U1 R+ r( w; e% j  f9 _/ Q11     rm *.ov5T* *.map app_host
* K$ b8 |: j' g5 A12
: f$ Y) P& S7 s1 \) h13 app_host(objs) $(libs)
! I, s, N* c4 Y5 ]$ E14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
# \" ~- S, R4 \1 c15
4 ]+ _% N+ O9 S  ?# E7 i16 %.ov5T: %.c; ~# U7 Y$ X+ D8 O+ G% z6 q$ r
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
8 w1 S1 @5 v7 r  G& O18 2 w; u1 e# q, }) F( U
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t7 @5 ]  H  `/ r5 a& ~
20 AR = $(CGT_ARM_PREFIX)ar cr7 \8 @+ |% E( p* k3 O- x$ k) w2 a
21 LD = $(CGT_ARM_PREFIX)gcc4 x% D3 m, Y! R! F- _
22 8 h) A! G7 t* _; t; Z/ Y2 f6 w9 j2 O
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \+ E! V2 o9 {. ]
24            -Dxdc_target_types__=gnu/targets/arm/std.h
; `: o8 r+ N0 _& l1 {0 A9 e25 ( ^! G6 j9 N" Z/ l  `8 ]- e" z
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径" i3 E1 z) ~1 P: A2 Q( S! L. D
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \# T/ g9 O1 k- c$ a6 Z
28          -I $(BIOS_INSTALL_DIR)/packages                           \
, b1 U6 \2 _1 F/ O% z/ E  E, L; C29          -I $(IPC_INSTALL_DIR)/packages0 W1 L4 W' S( ^# s0 l2 ^
30 " i  P' e* L( v- X/ j0 H* x
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map7 U( L% x, F% y4 L
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& }- K4 v: \5 B# X' Z
编译工程
. G8 L5 z. r' D) a2 H/ z" N
# g8 S7 A: o- b4 R- \$ C/ C! Z4 h makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。8 @4 L; |: q. v. x% r! g
+ Y  o5 e- {. u0 g) d7 [( `  g
运行工程
: Y' ~1 G# c2 c1 x' C  G" b( @0 p% L
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。9 a& u: R- \1 }9 ]' c& z% u/ E

4 i3 b4 C$ K% U  X1 p1. insmod syslink.ko                    # 加载 syslink 内核模块
) G# i  C  q, b" L# L( W2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序3 \7 e+ \# m9 ?+ W+ ~* c
3. arm_app                              # 运行 ARM 端程序
4 l0 Q- @& X: T+ r" O) _4. slaveloader shutdown DSP             # 停止 DSP 端程序
6 ~  G% B7 H" Q: @+ O& h& ~0 ~ sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
$ x$ w- ^/ q: ^' U. Q" I 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。( q, l5 t3 q  `5 D/ f) P4 ~) ]

9 t4 ^7 A8 K0 }+ G  L6 S% v 1 #!/bin/sh
! q2 E! f$ \7 h& Q/ ] 2
- g; i' |& _3 W! R, A. h 3 set -x, ~# M; m) ?/ a) B, ]
4
( n1 k5 _$ v. q- m: k  K# @) E 5 insmod syslink.ko
" [- b& D7 a3 y7 [ 6
( g" Z1 b$ f# L. t; Z  c 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
! o' Q2 G6 k* p8 s; u: W( d2 v 8
8 W6 x0 j: t( S% t3 d! } 9 ../host/app_host DSP
+ J( J! G: V+ t10 ; g8 E3 l0 o0 i( n2 X& i( A
11 ./slaveloader shutdown DSP
$ _5 E# u# t5 h; Z: p2 k/ Z# g* w/ g- D% {9 r3 I9 s6 T0 D
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
2 |7 B+ E3 R3 b, U建立工程
$ N& G, V" Z2 u* }: Z1 B1 S& _+ s" T0 T5 J  c% w- f
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
' a; r  r9 @' h! P  h0 t% k
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' Q) @9 d* O) R% G$ ?2 a
建立工程# {% J& p* s$ s% }

* F- j& h. [& ?& o! ^ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" v6 V" [, J, oslaveloader 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
) p  C8 k# V8 Lslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

  _  M  m4 y$ }' kdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 12:13 , Processed in 0.049034 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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