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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,5 V0 y( ?/ u3 [, q1 y/ U( H
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。8 t& S0 A4 F5 c/ d% k& E9 v: A
# L: U" A. J9 t, `, Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
4 N) x9 s2 ^2 U( }; j) K
/ L! E1 T- l; v 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
; K' Z3 d$ u+ D7 H 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。3 J( J; W5 @" b+ W
 “清理”过的例程的源码如下:0 @, N6 X) o5 g

. ^* f6 L% t5 c, g! d1 ?├── dsp
8 c/ [2 |- r: d% ^# E│   ├── Dsp.cfg
& S; p, ~! |" Q% N5 W' q& w! z│   ├── main_dsp.c5 u# O) F' A  J6 G( Z4 h: W* H
│   ├── Server.c
6 }9 s% O! k( _* T+ m│   └── Server.h
& N9 n( L0 {1 @  S, u  q├── host
* x. X: ]& B/ s% L9 y% ~* o6 n! a│   ├── App.c
$ {( ^9 ?0 H; D7 S1 k3 u0 [) X4 [& F│   ├── App.h
) y% K/ T/ V5 a$ w│   └── main_host.c
* o* I, [. m+ V% }└── shared9 B7 g6 Z" I% `# T3 N4 k( d
   ├── config.bld4 X8 ~% j6 L& H
   └── SystemCfg.h
/ T' t0 J1 E. ?; _+ Q 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。8 G* n3 W9 W1 \1 X# O# z

. G& h9 l! F% b1 I2 }5 X- B./makefile
3 H4 F- l) Z: Q: h5 y* n/ q/ J! t) m$ g
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
# Y1 ~: D- p, x  Z5 t: N 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15" a3 U' l8 J2 p. j3 E2 L3 @( X
3 5 r% j4 M# X9 k& {) q
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' k2 y$ D! F; M1 s 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
, k: r2 b7 ?: F! D 6
' R2 L) O0 w8 K0 a  D- z 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
  {' [( i4 m# s' W- |8 d 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
2 Y5 @/ ]$ S( Z  s9 g& o" F 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4% r8 W0 p& ~9 s% Q+ c, _
10
3 S( N4 j9 I/ z  E; o11 export SYSLINK_INSTALL_DIR      \, W2 d* r. t, u
12        IPC_INSTALL_DIR          \
8 N+ i0 U( }. n$ Y9 r) r: P13        BIOS_INSTALL_DIR         \! Y2 Q, d6 n% c0 J6 |" Z
14        XDC_INSTALL_DIR          \( s1 Q% M+ z# n% ^* p6 n
15        CGT_C674_ELF_INSTALL_DIR \
3 I2 v0 K6 V+ ?) V/ U  n16        CGT_ARM_PREFIX
" C* b; i; S$ {! W/ ]17
1 ?& y/ J; b& N6 j& v9 |18 all:* z+ S: l, i1 N% I+ \3 N3 x
19     make -C host all
, M+ m# w' G, A2 P  q20     make -C dsp all
# p9 j/ ^0 A0 \: H1 ~5 S! I21
# z# N' K( q( \5 |22 clean::
+ i* V! v; o/ F6 D23     make -C host clean
  y* E  q6 F5 d, u3 j24     make -C dsp clean
$ p1 n, g3 z7 ^$ d/ `& [$ D, s./dsp/makefile
9 {6 U' Y5 S2 P3 s1 V3 i4 x1 k: ?. A5 z: C8 D
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
0 f3 i8 |8 Z& m& }6 W1 ~* }+ _ 2 objs = $(patsubst %.c,%.oe674,$(srcs)); J2 A. J* H6 R" w6 w& U5 ]8 F9 m
3 libs = configuro/linker.cmd
+ O; E( g- K( b5 L% G$ T 4
: s5 e2 T6 n" Q 5 all: configuro/linker.cmd) C6 Y: E. u7 C! l1 I. X
6     make server_dsp.xe674- m" S( q" i$ g% L
7 $ W  D2 F3 F$ Q- X; A4 ~
8 server_dsp.xe674: $(objs) $(libs)
+ R) O; t+ P2 m) v1 D$ |/ h  i4 y 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
4 o; P. ]% L- B; Q10 + q0 y9 f( k; s* z
11 %.oe674: %.h
) g: G- \' `9 q5 _12 %.oe674: %.c1 P- s; N, b2 ~; V6 Q3 I% E
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<) m5 K, n' q! `" B
14 # h) ]0 T2 L" j/ l
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
5 q8 y$ W  h" w! D16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
$ y' \- Q/ ?/ j17             xdc.tools.configuro -o configuro                        \
: i- o$ j) d7 W! X8 Q3 ]18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \! l2 G1 C( y) C* n, K+ R
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \& \! ]+ z) e0 B* H' ?1 i/ w' h# z
20             -r release Dsp.cfg5 R3 N& `/ R( x, j
21 1 ?! Q' u: E* c0 @" [7 g( P
22 clean::
5 M7 q' _6 }/ C23     rm -rf configuro *.oe674  *.map server_dsp.xe674
; E/ z* T6 l' A. V! Q( h24
7 n8 D& G, T6 p8 r- v+ L+ J25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages7 s/ D0 H$ w$ S8 `; F& y
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages' `4 k0 Q/ ?/ p4 ]; t
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages8 G7 R" `: Y7 }, E' J; i8 I! ?
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages* N! c$ i" F+ R% H. L- J
29 4 c+ I1 N" j9 V+ J0 O9 j- q. V
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
: G% o0 |- N8 u$ s5 R6 {6 p5 C5 Q31
& r$ n, B. @5 [) J# y; A32 CC = $(CGTOOLS)/bin/cl6x -c                        
  t1 r3 F- R3 i, u; m8 z33 AR = $(CGTOOLS)/bin/ar6x rq
, M3 E0 w& S5 O& m1 m( X$ e9 m34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi/ h5 ~: ?& J4 M
35 ST = $(CGTOOLS)/bin/strip6x" h) I, V" b2 G
36
/ V# u/ X" U7 r3 |37 CPPFLAGS =
& Y  g, F! N3 W& X. {38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)" Q  ]* G  Z: }, J* o+ c; }
39
- [+ _, N9 U% E( S8 F. `5 U9 O40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)* O7 D) V, F! s# ]. R+ ~
41 " v  D6 G: u1 G2 i1 z
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ' l/ a2 _1 [1 }! D4 x! W
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
% H  q4 W' }# t& w8 n./host/makefile1 `: r: x5 W7 `5 c9 c
# S& F: x$ v) P  c1 o
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件+ ]5 g3 F2 s) d( r3 Z
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
0 M5 q& k$ a. E- O! @/ v% V 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
! K8 n9 f( F1 s 4
' Z/ X4 u1 f/ w# }4 X4 b 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 J9 P' m3 o& `' X6 @1 X, I: S+ m
6
: p( k4 Q9 k$ R, E 7 all:* j  N# O( P) @$ O, j
8     $(MAKE) app_host# W* I* _+ Z2 J: v( C- f
9
& J1 @# G" H9 K9 `6 |. L/ g10 clean::
2 Q5 r6 X" z  M. H3 f* j+ c11     rm *.ov5T* *.map app_host" s# K! c$ \! k
12 3 ~8 a! {7 n  d! G. O# z, u- T
13 app_host(objs) $(libs)2 [  C  |" U& H$ D! Q/ M+ D
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
/ D! r, v! |' z6 t! u; K" @' L15
6 U2 e8 n- s* _* z16 %.ov5T: %.c
- Q) \4 y# j( D/ p/ @17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<( V7 a( y; F! H' f. r
18 - K. l& l. ^9 j
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t) Q( u1 \- c7 p) [9 U
20 AR = $(CGT_ARM_PREFIX)ar cr
5 }7 }6 \0 R; o, X- o6 a. B21 LD = $(CGT_ARM_PREFIX)gcc; T. \& \# H, V9 Q9 V$ L  O$ T
22 0 r" M/ v3 y" e  C7 u' h+ Y
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
9 w  t8 |  z+ N! ~  H24            -Dxdc_target_types__=gnu/targets/arm/std.h/ \/ I& \' P( [9 d7 C: f- |
25 0 J# Z% @* X/ r) B+ R% r! @. ^
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径3 z1 U, G2 x' b  J
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
7 {; H. H  }  x7 S0 q% c' H' h28          -I $(BIOS_INSTALL_DIR)/packages                           \/ Y$ H$ V0 N  B3 b
29          -I $(IPC_INSTALL_DIR)/packages, M7 V% `; k, Z1 P" D8 H
30
" S# |" I0 K: f- z$ M( `- R! K! `31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map% A: {: m. `- {5 \; [) _6 o6 C) f2 [
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ r6 m( ~3 o& q4 W% W% ~. u. `. z编译工程3 T! Q: g5 P; M

  [+ I7 c, q, Q$ G; x: t makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。3 f. o* z$ Y- K+ G2 f

2 p1 J* @5 J, G6 _运行工程
% r5 p, \0 v. ]+ j/ `3 Q  s; v4 P1 w8 p
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
9 D* W, I6 z$ Q: D* u) C' S2 [
1. insmod syslink.ko                    # 加载 syslink 内核模块
9 {( H/ F- o& e2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
, L* y1 S6 F. W. F8 ?1 D3. arm_app                              # 运行 ARM 端程序% `% j3 }1 Q1 t' _2 p+ `% D) P
4. slaveloader shutdown DSP             # 停止 DSP 端程序8 p4 ?( B0 H2 M" x1 b- f
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 % z$ d" }* A* p: q
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。2 ^$ F0 y/ l8 b! s- G3 G/ n* m4 {
9 J5 O4 x1 x& l' K: b3 ]
1 #!/bin/sh
, v# `  ~& Y) j' @. T3 ^2 ^ 2
; ?9 `2 v6 X( F+ G1 t- C2 W 3 set -x) U+ `& W* P' C: S8 H0 |& w# H; S
4 3 l, P' a: F* J4 ^) H9 a, A! f  j
5 insmod syslink.ko% h7 y; P* R: W5 J) z4 O
6
) D7 @" T, E& g% W, v 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
3 \9 U) h+ t; d5 j3 }( ]  R. j: \ 8
. _; U1 r. e7 b5 c! }: K$ P 9 ../host/app_host DSP
- s" C# D5 [6 k' I4 T10 ( f- @9 K$ [" G% a7 |( l6 `
11 ./slaveloader shutdown DSP
! g/ Z& P4 [* N6 U7 J' B
5 h4 U1 |- \  l. U. G4 I- a% U- O
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:053 p3 _- h- W! s+ u9 e) y  o9 p9 ~9 a
建立工程0 A0 M) f* ~/ W8 x3 I9 \, {
$ f  j; i: a& Z  |
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

& Y8 V. I. ]1 v0 j: Q* d. V6 L% q9 k) Hslaveloader 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- z0 G$ A2 A' i
建立工程
$ n8 @$ Q! v) j* c, ^; V! C8 k  @
8 H3 G6 d$ Z- h& Z5 s 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

3 T2 H2 e' w! l( x3 bslaveloader 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:40
# O0 Y$ w/ `0 m5 Q  _slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
7 n# h, P; r0 n9 {! Q
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 06:59 , Processed in 0.041929 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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