怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
- m7 i7 f( Y# D4 J  A' C3 Y$ ldsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。/ l- r, k' s0 u* f, U5 [
$ f$ K) `  ]  r2 g+ T4 T. ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程; H8 Y( B; u; j. d; W

& z0 e8 [9 s6 h7 B& i( b4 R, a- G 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。, s' _$ c2 M( }4 L) [5 g% N2 v
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。! f1 A4 |# P; H5 ]
 “清理”过的例程的源码如下:
* ]8 [$ _7 N; ]6 a" [% O1 ]3 j. \7 q$ k, x% y2 u! y4 G, g
├── dsp! T; s9 A9 ~. g6 b( n8 r6 z
│   ├── Dsp.cfg9 z8 ?: {1 P1 R' k3 c  \& |
│   ├── main_dsp.c+ ~: D" Z8 q7 z) `$ Y6 f
│   ├── Server.c
+ F& }9 o( m( V4 S& S" }3 i│   └── Server.h
1 M4 r2 q1 o/ D. z7 l$ z. k( j' y├── host0 u! A* Q, }  ^8 L, S7 L! {% W' {
│   ├── App.c
6 ?. n+ N# p0 O0 }│   ├── App.h
! t% t  ?1 S7 E, C. v* x│   └── main_host.c
4 g8 |+ H2 s8 }' ?, w└── shared
6 \: T8 b# K3 r  h0 Y$ o7 \- q   ├── config.bld
3 G7 T" A1 s* U4 [   └── SystemCfg.h
# A- n' H+ H6 M4 u1 X0 N 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。/ a6 O6 E8 u; I/ E! V7 _5 B
/ G! U3 O7 q2 e& \$ v
./makefile
  T1 _: Q  o, k6 \3 l
& c# s' l! j6 `( c# T1 Q2 V2 ~" S 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05' Y* O4 r5 @' O% m( V
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
, P0 r4 d- A7 I: E+ E5 b9 O 3 0 J  W) ?, `! u
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
. d& a5 a' |% H 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
) J  \% {) S  F' W 6 4 Y4 p$ Z* h1 q( f; t
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_504 _4 O& d. z+ B. E
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72* v5 u, R9 A" M' e9 A! T: A( E4 l
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
, ]; L& a# `3 y9 z10 ! E/ A, ~: M7 ?* P  e+ D$ ^! P4 {
11 export SYSLINK_INSTALL_DIR      \
- H& Q" z+ m% p2 E* G- p& G/ ]0 Q" D12        IPC_INSTALL_DIR          \5 q/ p% {7 B! N; k
13        BIOS_INSTALL_DIR         \
! `3 q" p4 v1 ]) `! v8 @& R$ {/ F14        XDC_INSTALL_DIR          \/ z( q1 O0 ]2 c5 D1 O; k9 m  ]! Q
15        CGT_C674_ELF_INSTALL_DIR \
- A4 g( f& t! R3 o4 c% a) g16        CGT_ARM_PREFIX
7 }. j1 V+ s! _8 i17 . O* q7 A3 ?  [
18 all:
! ?3 O9 E; F5 c& ^# `/ [2 p, K( L4 E19     make -C host all
% o- i2 O  A; k20     make -C dsp all' }8 [8 S: F0 ~7 B' K7 t; R( d
21
6 _; P9 J, o- V2 E5 F7 b$ H22 clean::+ _& p# B' U4 v3 S( Z6 t
23     make -C host clean
8 J/ d; |( K7 T; ]5 [; _; S2 k7 ~24     make -C dsp clean
: B6 n  y7 f  E: z2 ~% e0 r./dsp/makefile; W7 e( z, q7 @1 e' x

, \0 a% T8 x' n# g/ E; d, ` 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件# f& [& k. U% u8 a  o
2 objs = $(patsubst %.c,%.oe674,$(srcs))
& T: M8 m# ^. }3 j 3 libs = configuro/linker.cmd! s1 `( o, _. r7 L
4 1 P. c! H7 M+ p4 I  [
5 all: configuro/linker.cmd
, x7 c4 J0 V  H% D- v5 t 6     make server_dsp.xe674
' u* k8 a( h$ O4 R! H 7   A/ p: n" t! f: D. ~3 _& l
8 server_dsp.xe674: $(objs) $(libs)
4 \. n" {) m- K  x 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
7 v5 z5 ~" ?' t3 t5 b- l- f1 e10 . g+ ~! Q& ?5 a
11 %.oe674: %.h
7 @  N& ~- R" q) X. H12 %.oe674: %.c
. ^5 E0 Y+ b1 ?# S, e13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<2 C1 H- H# o1 Q# Y
14 ( o" m) |& z0 w* ^, ]
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld- }: S( x) e- v7 ^
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
! e; @0 x9 m: |3 I* T17             xdc.tools.configuro -o configuro                        \
' J% u* F" ?! F& g* ~1 w18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
, p' b) r7 E& e) {7 j: v" S& \19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
5 `  v" U  K8 j2 g$ U20             -r release Dsp.cfg& Q. \7 _2 |  s& ]6 N8 a1 T
21
+ m& B& S; \  N$ @) |22 clean::* ]) j. j/ {, m6 a
23     rm -rf configuro *.oe674  *.map server_dsp.xe6742 }8 P  F4 l5 |2 o( p1 x: c
24 4 [+ `( U- j9 T
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages4 h5 k( J' v  ~9 s
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
% |) J8 {6 n( A, H27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages. H, j: R' I5 g0 K) d9 Z
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages; I: P; w2 u+ H" M( S. g
29
. k/ Q. v& f( q; t30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)1 c4 H0 X9 ~4 t6 S6 z# @& @
31
2 z( s( o- t% X4 k- P" ]32 CC = $(CGTOOLS)/bin/cl6x -c                        
# j6 E8 X4 C# x- B1 f33 AR = $(CGTOOLS)/bin/ar6x rq
- L) W7 z, w! O# A* x* ?34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi1 }. P1 x: k3 }) X( e# ]" X+ Z. V7 g
35 ST = $(CGTOOLS)/bin/strip6x
/ w/ l6 b, V5 D+ N36 ! Q  v2 a- t/ I! w4 v' \
37 CPPFLAGS =- G6 W) v) e9 k7 n! V6 H
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
7 `% e: W5 ?. h- f39 : M7 L+ F1 T: a
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
2 r& w8 B" m( j- z# H6 _; ?41
/ O" c7 l/ j2 q42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
) q9 v/ @7 J+ v43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  e" W4 ^0 }* `2 X" }0 b: ~
./host/makefile  Q4 U) |# F! E8 Y

4 i( }) a# S" V( W 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
" L0 W$ o+ b4 ^; J$ |) r9 x 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
3 V" B9 N0 g& `2 f* \/ m 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
3 z+ p  N& P0 y0 q* u" c7 M4 X* e% } 4
9 g' o) E' X1 A+ b; U5 Y 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))) v, f# L9 O& z( Z/ p
6
8 _3 g" j: s5 |: a 7 all:
. |% [* ~4 O0 R# c! ]% H 8     $(MAKE) app_host
. s* E! @' r. `; n0 G 9 % z) ?8 H0 r' s
10 clean::
) r  T( e4 X3 d11     rm *.ov5T* *.map app_host- a* L( a0 A' ]% I( d6 Q
12
! v1 ^: e( T6 T3 o13 app_host(objs) $(libs)
. c4 ^) z( Z3 W! G% K' i14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: y* [/ `- b- C* j15
# z2 U" f8 T) u/ A5 Q0 R. m16 %.ov5T: %.c
/ j/ n; n6 x$ k9 |- ~* F) o* V- I17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
3 i8 |: M) Y& g; l( s18
+ _) ~7 D- v1 U% t19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t1 ]' P& h1 T. ~- h0 ?% D* C, H8 f- B
20 AR = $(CGT_ARM_PREFIX)ar cr
% n3 v  C/ X$ w7 `21 LD = $(CGT_ARM_PREFIX)gcc% [! W0 ^: ?3 u. E
22 + Z  T  g& D1 z- v
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \) d; K3 W3 `/ [/ g
24            -Dxdc_target_types__=gnu/targets/arm/std.h
# M$ ^2 S/ L0 X  p9 P25 * \  I! \! F( `+ U. _% V0 ~
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径( h0 Q$ J0 D' r. B$ G
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \/ \! U5 P; O6 K7 Y1 d
28          -I $(BIOS_INSTALL_DIR)/packages                           \
, M* v* \! i* k& ]8 _29          -I $(IPC_INSTALL_DIR)/packages$ P- F) {1 J$ g& G/ i! y7 U
30 2 c/ a- l- u  {1 D0 [' ?
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map8 s3 l2 J/ j" D' c
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& m: [  @0 C8 l# ]7 x
编译工程2 \9 |9 u% A8 X4 _

: }* T" F" D0 B: @) A: Z; K makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
4 ?" O! R6 `7 Q/ {9 D
. n5 X" q; ~+ g8 p, n* K运行工程3 z2 }9 W3 B4 {) }0 U5 U1 a

) \) H) \; n4 x( v5 W 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。$ ^0 R! h' f" w: c6 |5 i8 Y+ o

: g% T) [" ]! L& r& p1. insmod syslink.ko                    # 加载 syslink 内核模块3 {* w  V( S3 {5 \4 g: ]
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
5 y3 a! ^. T$ m; z3. arm_app                              # 运行 ARM 端程序
( E8 {" H, o. _8 p: r0 }4. slaveloader shutdown DSP             # 停止 DSP 端程序; Z2 }# \8 }: j( O; V5 H& i
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
/ N* j1 _5 G# K6 B! S$ T2 y 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
" z- w6 w5 m5 Y/ O( Q$ K* ]7 C- [: F5 Z8 J  s1 w' g( @" |- t3 Z
1 #!/bin/sh" X* }9 F# M2 a9 H
2
, ?' y' y& r# C$ c! o9 y 3 set -x
7 c3 M/ j0 y9 m' g* t 4
5 z) e' v2 R# R" Y. E& H+ O' v 5 insmod syslink.ko
  l5 l% ^- {8 {9 J6 t3 e 6
/ `/ z# l8 F5 x2 z! f! ]' q$ s( y2 _ 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6742 ?9 B6 {2 r' K) L- x) T
8 - L2 i: \( I: H% O
9 ../host/app_host DSP
$ [, Q4 b" |; ~+ f, z10
. p+ ~' p4 B7 @: j  Y# c11 ./slaveloader shutdown DSP
2 a3 q2 P6 w! W' Y6 q4 T' }5 e, v/ T/ C. u; }
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:057 ?8 C/ \5 `" D$ w. _, K4 R' [( c. u  m
建立工程, u7 O4 N  U. s' @$ d! C

3 B& N! ?: ^0 M* [/ q# n 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
- N0 ^: b" k/ ~% P2 l8 A! a
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/ n4 f/ W1 e2 W
建立工程
5 _3 _" J% O1 g, w) E! [1 }$ r9 t9 Y9 Q8 j
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% e4 ]2 O1 n, {; j. n: ]9 \
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2188

积分

创龙

Rank: 8Rank: 8

积分
2188
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
$ k* T7 o% A- J$ p! T, }( m: cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
1 T) P4 k0 d& ^4 t+ U
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-15 09:13 , Processed in 0.044967 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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