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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,7 ^$ {$ L# h- H" |5 B$ C+ Q
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。$ Q9 G: z# R5 b/ k7 l

/ M, u, u9 N8 ?& H2 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程( ]* U$ U+ [& w7 I

$ ~" Y6 X1 N8 \! Y- s: T: ?2 R 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。8 W0 h' L# n; J' {1 p/ N/ [
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
) I% i3 w. r' T6 k4 C' A+ v5 L8 @ “清理”过的例程的源码如下:8 g. g3 E4 J5 {: u
2 \3 W4 J5 W* A2 Y! Y! c
├── dsp
9 C, @" x/ i" V* M+ i│   ├── Dsp.cfg' k: j) m$ J! G
│   ├── main_dsp.c
6 I0 [& l: ]5 m3 C- y# E4 \8 [3 S" O  N. i│   ├── Server.c" D# R% v, W# T) V
│   └── Server.h, r8 L* h! E5 L) W! r; E8 C
├── host
2 k3 n/ V) }  D7 S│   ├── App.c5 m+ v* [& B) ?$ u, _- A9 c5 }% b
│   ├── App.h. x7 g* Y) R, B1 ~/ v0 l" j6 u
│   └── main_host.c
# `8 {( ~0 h2 j  {/ w6 g└── shared
. o3 A2 \( L% Y. F   ├── config.bld7 k& Q$ i0 g1 k
   └── SystemCfg.h
# l+ @- y- e" L5 x 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。7 {; t! P% k0 ?) I* G1 v$ \) e& h
3 Q  @4 n, W. D( A0 f
./makefile
3 G* i' r. C/ w) g' @- P) ?0 S( g3 U/ X. O2 E/ ^
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
5 z# U$ O# Z, ~$ v 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15! k. V5 E/ I" D2 z) _, h
3 % m2 _& N8 W. u9 ]+ Z/ E( p8 l
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi" z- m/ @, p8 t& a- N7 s2 M
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
' X& H; k# S' B2 ] 6 & x* x* x2 I6 n( ?
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50; A% l6 z3 ^5 t
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72" Q2 o6 @' k* b# p) \& Q0 ^
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.45 h# F% q% w' G+ n+ Y+ U4 ~
10 7 m# l2 ]4 ^# k7 @/ ]& b5 f
11 export SYSLINK_INSTALL_DIR      \
2 t! V' P/ w( o: q1 Z12        IPC_INSTALL_DIR          \
& Q& l$ P% a8 o13        BIOS_INSTALL_DIR         \* P% _5 R; N% s2 a1 U
14        XDC_INSTALL_DIR          \3 f& G3 W0 A& [
15        CGT_C674_ELF_INSTALL_DIR \3 P8 p. `! M+ v' R8 C+ `
16        CGT_ARM_PREFIX
1 d, X5 d  @) ~% t$ U( c17
7 k0 ~: f; N3 Q) v& L% c& B- g18 all:4 R( Y) ]$ r, p5 `7 }4 r8 h8 }
19     make -C host all9 |9 g# Y6 a: x
20     make -C dsp all
# E. F5 }) _1 L4 w; `' L3 ~( D21
9 l( X9 H+ C; O22 clean::
$ |$ z" L7 `/ e' I3 T, O23     make -C host clean
/ T3 G. i2 q% u9 f24     make -C dsp clean8 R" e4 J0 W# S' C# g- b, l, `
./dsp/makefile
, _$ Q7 Y* {( Z1 U+ i
# v9 N$ w5 t4 _" {3 o. E, O* h+ A 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件: f+ s1 `# H, O% Q/ {
2 objs = $(patsubst %.c,%.oe674,$(srcs))
8 e4 J6 N; k  ?2 ]/ ^. H# m 3 libs = configuro/linker.cmd
* m" k* z$ b" z# h9 z 4 6 G$ e% o: h& J7 \/ ^8 f
5 all: configuro/linker.cmd( K) R1 `$ u* [2 H/ h
6     make server_dsp.xe6741 M9 U8 l+ e2 g* S7 F3 e9 |
7
  Q( g: N( g! q! X 8 server_dsp.xe674: $(objs) $(libs)+ L5 n0 H4 W$ }
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
* H* L: _  Q; Y6 z) ~10 ( ]- d) ^' C: t3 U# G
11 %.oe674: %.h9 W( j) S0 ^  W2 ~* E3 d9 f7 `
12 %.oe674: %.c5 p2 N& Z' ?! p( h
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
" Q, S& s$ u, K14 * N" B" s1 ]; {+ f
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld6 y5 Z. W- H* F. i: w) `
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \6 {) h  `6 r/ M. Z  E
17             xdc.tools.configuro -o configuro                        \; Y6 e+ w8 B( D9 K# M; y4 R0 p: V
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \  Z" Z3 n9 C8 P
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \0 _1 }' T2 ^9 m; b1 Y' V1 j7 W# ~
20             -r release Dsp.cfg2 H* s" ]; d; R) R! f
21 ; O: T2 {5 u9 N8 h' b
22 clean::0 f! s' b1 e7 S) t& p0 Z+ i
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
# Y5 X6 @2 g$ q8 p9 ?7 M# `24
6 G6 E! K  Y' N4 _  E6 Q5 a25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages7 h- y8 E! s$ q2 G
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages3 O6 g/ z6 c' A0 \" ?2 R$ z
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
: ]3 [3 G$ b- f0 l8 M9 h4 q' |28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages( g! T/ G! A; {  |
29
  X1 J9 Y$ d! d  z: u% P. n30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
# e1 x  H( {9 U4 S) _5 c31
2 V* z0 |: j9 G+ g6 t% o32 CC = $(CGTOOLS)/bin/cl6x -c                        
0 G) c/ ~1 F1 \* {6 `8 T  I33 AR = $(CGTOOLS)/bin/ar6x rq9 i  Z6 |/ k. D% m
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
* J5 N4 ^* X' h, f35 ST = $(CGTOOLS)/bin/strip6x- i1 J$ N3 L; O4 x) _" L
36 5 x4 u, T8 V) I  _5 _% m
37 CPPFLAGS =
8 N, g6 u5 q% \38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
. u" o9 _3 u/ Q2 a6 U39
# t8 I, a+ g9 G40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
4 N1 |* P) S" i( R+ O# [, h- z41 4 P$ z7 b7 C4 K, M, v* o
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     - Z; n; V( n, ~# r0 o  X: I3 }
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
( D: P  R  k8 C, m9 Y3 E./host/makefile
+ H6 v5 R1 f9 P$ Z5 X$ T9 b7 m! J9 B- j2 ?5 N5 I
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
7 x% |+ u/ o3 f1 e. \2 F 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
! V2 d9 k5 c' ~; w! \# c 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
8 V; S- W( l$ W3 X" f" r3 x 4 ! [" a2 u  f  D. l, y' n' V4 P
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
5 C  ]* q3 A6 D, F! D 6
5 ~6 s$ v5 S  I  G% b/ G 7 all:
  s& S- z. T7 x# a 8     $(MAKE) app_host
0 Q' D5 {4 ]1 p 9   ^6 z! o0 Q/ R/ @/ e. c
10 clean::. b6 C' u+ G/ o+ `- y. `1 u: {: e
11     rm *.ov5T* *.map app_host) K3 W# u4 K1 f# d( A3 j8 F& w( L
12
0 w8 i) s4 M8 r6 [13 app_host(objs) $(libs)
; }, k" Y3 a" Y7 ^0 ?. M14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS), f4 a  E9 N; I- c+ `
15 " K* `/ `1 h4 q+ N3 H
16 %.ov5T: %.c/ g/ n) L) l8 G1 S2 C
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<. g. M8 P0 `; u# S8 b* ]/ ^' }$ T
18
( M4 B- z. f3 S- _) N19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
- M3 ~% b% l4 {! ?; n. _: n20 AR = $(CGT_ARM_PREFIX)ar cr( ~9 j8 D; c: a! p  R
21 LD = $(CGT_ARM_PREFIX)gcc6 P9 p# W% e/ |
22 : c* A6 |4 }0 T8 O  v
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \+ B, N3 s1 w! `8 [( J* Y( G
24            -Dxdc_target_types__=gnu/targets/arm/std.h& z* t+ w; p8 f+ `. _
25
/ ?( b) H9 N% H# i% ^+ V: ]3 V: Z26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
- u# m$ h/ U6 M' Q6 V9 `27          -I $(SYSLINK_INSTALL_DIR)/packages                        \( |( t+ F( G3 l5 H  a7 u4 a% N$ ~- v
28          -I $(BIOS_INSTALL_DIR)/packages                           \
, c' V0 I: I0 l( \. z9 E29          -I $(IPC_INSTALL_DIR)/packages
$ E3 P! `2 v. m3 a30 ' j0 G3 O& X4 Y
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map) ?$ R  C+ E( c! H2 e
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
, a4 {( U4 O  q: r1 v. l编译工程/ C! Q  N+ C0 C; K; g. _: C. h

* D2 |+ l, I* \( \& I: O% @ makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。' Q; Y; U, Z! @+ _( C9 a5 K9 n3 p

9 O: E! \! u2 r& H# f, G% ]  x运行工程8 _, \  L' @  B9 N

) N( C) o% t: Y 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
9 k  e( C8 J& o* ?8 U' R& E* N2 i& y! J4 P/ i& q) |# D
1. insmod syslink.ko                    # 加载 syslink 内核模块
0 ~7 Z. `, `  S6 y- u9 _2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序9 t. ?1 Z+ A! C( c+ z3 y: O( j
3. arm_app                              # 运行 ARM 端程序
% j2 W& a/ Y/ H# m: I4. slaveloader shutdown DSP             # 停止 DSP 端程序
+ V% A) j- ^# |9 \- Y* @" V5 a sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
( \7 d2 _$ _) B0 d/ Q+ D9 p 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
0 [& X: `$ Z& I" T# B) g( @/ V4 w" h" n+ O$ y
1 #!/bin/sh0 X: u' S3 k& S" x
2
/ `! }7 ~+ W* g1 J0 \ 3 set -x: F( x9 j# J, j; u- y3 d2 ?
4
3 a2 u( p( L: O* v! Q1 E( a 5 insmod syslink.ko0 ^7 e. Y: N7 j. B" m
6
7 L, {$ y/ D0 v8 K# e 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674/ O! L3 [, U% v( q6 Q
8 1 u& C9 S: U- N: B
9 ../host/app_host DSP
( _2 W6 ?7 b6 k* ~10 8 x( p: O1 p& W7 h
11 ./slaveloader shutdown DSP
9 L* p+ b- A/ N4 [+ L9 m6 W9 r. ]( C1 s( ?) j8 S7 E
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:057 i+ W  i$ U- G! o* L6 d
建立工程
4 l6 B9 s' K- a& t5 i" @
2 w: Y% T4 `! g 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

4 D/ r5 Q9 V, r  L! V4 ^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
7 P" R1 a( f) c2 A# A# o, L) ^) |% w. J9 y( A建立工程
4 y. h/ c( C2 k% x: s5 m1 O, p: l; V6 P
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
. j. \( x, b4 b$ z& j  y7 Y+ J
slaveloader 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
# n8 B8 J' _) G, m/ P. cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

+ J3 G4 o, ?( W; C5 ^. g4 @dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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