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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
, f% j# A3 ~/ U" i5 I; P' }dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。2 b9 x# c; w0 J" s

( p$ Z7 _9 k& E9 U5 `" S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程5 X, V3 R$ y6 i9 C
1 |2 @6 X4 y1 t: G3 j
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
: G# u9 U. m7 z  Z& T1 ?# {  z 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
; m* V& M" C4 F “清理”过的例程的源码如下:
/ W" M: `1 M. m2 g; t+ I/ Y7 o& U, n& D. }5 A5 b. M4 n
├── dsp
- M9 A+ }& D% X│   ├── Dsp.cfg
. {& a2 E6 g7 n; x│   ├── main_dsp.c! {& y7 n; ]# S/ w- B
│   ├── Server.c' u4 V; x; ~6 G
│   └── Server.h
1 i6 y, o, x/ G. e' U) O├── host4 r2 w6 k5 S, A7 Y
│   ├── App.c" n2 g2 s' r' W0 L4 ~% b- a4 i1 x
│   ├── App.h
. c: f& z5 [0 Y9 `2 x: k4 N│   └── main_host.c
& l* U* V% j$ T1 g└── shared
# l7 }, S# P6 q1 U   ├── config.bld
9 O( W0 z8 e1 S   └── SystemCfg.h( N& i  b) U* e' @0 d+ J0 T' h1 T
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。; D; v& j* V2 w
8 G9 E6 J% u7 o) J$ \# c# O( r
./makefile8 a6 t8 ?' v* _; W% k
4 `6 C- q# D9 |$ \4 p  r4 S
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05, B, [8 j( Z+ L0 X7 l" K
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
: U! G$ l) g3 @# J9 t. J& v- [( ` 3 " A3 h3 l5 v  @3 A; Z
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
8 }1 B6 D% z8 o3 J 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-$ U: ]6 |: P; w3 v# a) x6 z
6 + x/ M6 k) k* x' t
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_504 [8 B5 A) ^- Q1 j# _  O: R8 Z2 K
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
2 G: g  u3 T' z: C# p3 Q$ Z  I; r$ n 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
# Q  {" {: g: }& s10
; `. I* @! G. i11 export SYSLINK_INSTALL_DIR      \7 I/ H- R, _0 v% J
12        IPC_INSTALL_DIR          \6 _  V" R" Z, M% o/ U$ q
13        BIOS_INSTALL_DIR         \
8 l4 x0 J% ^1 V: e. C14        XDC_INSTALL_DIR          \4 d* E( @. R) ^# R
15        CGT_C674_ELF_INSTALL_DIR \
3 X9 G7 q9 Y9 y/ v& H) v" y, j16        CGT_ARM_PREFIX1 ^" ]& i* m& b* A
17 5 N0 w/ {; \& Q% G( L) d# Z
18 all:
  [. T6 \: t: Y. S19     make -C host all
3 S5 {1 g1 o& _- ]0 u  ~20     make -C dsp all
: m, T7 R& k3 \21 " _: `9 k( f. |9 A5 Y" g+ }$ I
22 clean::% ~$ @5 {# p/ R9 h
23     make -C host clean9 v& A! x; d" X) F# E, M
24     make -C dsp clean
* r& O/ y$ v5 E7 @5 W5 |. j2 n./dsp/makefile
+ ]' O$ a1 u! @; f4 [
9 w& ?5 a( q2 U- J/ h5 u8 d5 _4 F% {" j5 | 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件' H8 X' i/ q/ @4 f! F. W$ t) _% J' |
2 objs = $(patsubst %.c,%.oe674,$(srcs))" T" ]1 W( m" Q5 Q3 j/ f7 H: @9 h
3 libs = configuro/linker.cmd+ ^8 I8 I' N2 E' u
4 & Z2 p8 w- C* v( i/ m
5 all: configuro/linker.cmd& g% s. R1 E+ B! i* A9 [
6     make server_dsp.xe674& |- E! a9 C0 G5 s2 t
7
) f1 p6 i/ W6 O0 r7 |" j$ ?8 I 8 server_dsp.xe674: $(objs) $(libs)* g* W/ ~/ c" `2 X0 r
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 d% g  Y) U0 S* w
10 $ R/ k) ^6 r2 V! @' A9 J$ ~
11 %.oe674: %.h( ?* S. P, P) _& V" C) ~" Y
12 %.oe674: %.c
) o+ [% [# C1 u+ K% C13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
0 }  y, p# T- ?& L" J14
* o2 I# T% t- x& \$ L15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld. q) u2 R. Z) e; J
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \, e+ u. r9 O/ T5 d2 U
17             xdc.tools.configuro -o configuro                        \2 z5 J) b# b" o% c% _7 b
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
1 C& r1 h9 V# K( ~3 u" v' x19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
7 W3 c, ^4 |  u( e2 r9 M20             -r release Dsp.cfg4 x) ~# r5 _) f9 y. K
21 3 i2 D' y; A0 [) }5 j4 z' Y
22 clean::' T6 ?! V5 j$ r2 L0 ^
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
' j3 D+ U8 t4 \24 - |  ^& a- y: g
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
0 C8 B8 i$ X1 G! z0 A26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
$ M5 F) ~) ?  i27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages$ Y% g0 K" C( y" {
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
" |" v, f8 q& J% R2 a4 _, y' T# N29   H% P7 C! u* _: L) p- C( O7 @
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
7 l2 T% Y6 g5 i! L31
4 x; M) R; C) q4 B32 CC = $(CGTOOLS)/bin/cl6x -c                         6 H3 w+ X: |7 @) Z# Z
33 AR = $(CGTOOLS)/bin/ar6x rq8 B, f% ?. e- K5 @6 I! K& u
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
. S% Z, T& g  c, [2 L! d1 P/ J3 K! u35 ST = $(CGTOOLS)/bin/strip6x
9 C9 W$ ]" C9 i+ z! u9 I36
/ L6 E4 r6 `! d+ _& @1 x37 CPPFLAGS =6 \" I% ^) W! O5 C* {+ {* ~
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
, o! z1 k: Q2 A1 c8 Z( I- O# e% Z39
! v+ e9 \* u: t0 e1 l40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
- e, G& e8 B- V/ ^+ a# m0 Q4 K41
3 ?1 I7 E9 d, I, B5 b# U. T# P; V2 j42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     " e$ E6 s2 l' \
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
( Q8 \7 K) `- u7 y& ]./host/makefile
" ~( N; v( }3 H8 Y
( U( ~8 ], D6 }, h 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
) |2 @3 p9 r0 ~% w- K3 n7 I 2 objs = $(patsubst %.c,%.ov5T,$(srcs))- a! G/ p+ S& W  ?; q
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug8 n6 f0 p' `  y! b  v; h
4 8 M2 q. N$ H( _9 x
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))6 `' I3 J: @% N3 p2 W6 K
6
3 B+ Y& R: w% [; b 7 all:
+ p# e3 a4 l& C, y$ l4 O1 y4 e 8     $(MAKE) app_host0 t% ]- [0 T, t( g* k
9
5 U  T1 |- h. k10 clean::
3 Z3 i' [. \/ g' }11     rm *.ov5T* *.map app_host! j, G; e) t+ a4 T9 y7 D7 E
12 $ ?2 t' U$ |* j6 ^# S/ N) D
13 app_host(objs) $(libs)1 R& u. w2 P7 V
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)2 w/ ~$ ]3 c5 c0 C
15
3 |( d9 E% _0 j6 m$ M4 X- W16 %.ov5T: %.c) g5 V/ A& z+ M
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<( G1 y* H6 o3 ]' p/ e9 Q
18 9 K9 U* ], T- T3 F" L
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t$ _3 y5 ~- Q# @  t' y( S. U
20 AR = $(CGT_ARM_PREFIX)ar cr
# K- u5 [7 y/ u! q: U1 s! b21 LD = $(CGT_ARM_PREFIX)gcc
$ r" W# d% ?' ?9 a, H% j22 5 w, j* q0 e, F- h# l
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
0 m! V) H2 S2 I$ Z24            -Dxdc_target_types__=gnu/targets/arm/std.h0 C: o6 g6 d! O/ o% m! A5 T" C
25 # C+ k. @! H- ~8 U) b
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径9 w& X. k7 `1 H
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \, V, Z, }; b8 K
28          -I $(BIOS_INSTALL_DIR)/packages                           \
: i4 ]* P, h. q$ F. _29          -I $(IPC_INSTALL_DIR)/packages
! {1 M7 N1 f5 B1 C30 & f3 r6 x% n: w( J# ~7 ?) t
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map6 C5 Z* P( n2 j7 O7 a( K: Z1 p, n7 `
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
7 C! `& N& |4 d编译工程
5 F5 `# G, K8 S) D- q
4 I7 i8 n/ s7 I" X6 {5 n makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。$ C/ d5 I( t. D$ D/ \- L5 _! G; |
! J6 w' E5 i6 _6 o
运行工程8 T5 o( q3 \! _& g

6 H8 e% r# k- U3 ` 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。- g; P( b* p4 t- H

* c/ `2 h" _, T5 n/ @; G0 h1. insmod syslink.ko                    # 加载 syslink 内核模块
8 y' u4 ^, T' ^2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
. K7 T0 u2 _' {% P, {. m3. arm_app                              # 运行 ARM 端程序
& k2 @! D- ]' F& H/ I2 B$ ]8 b4. slaveloader shutdown DSP             # 停止 DSP 端程序
; F7 Z- r8 a: I  N( ~# t8 A1 o  o9 x' c sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 1 Z6 k3 d  [8 w6 Y
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。) l8 a1 G1 U' K; R

. G5 F* Z- t; h! R' e 1 #!/bin/sh4 I, a9 @! v" k8 j- `
2
' J$ ~, z  y1 m 3 set -x9 d+ K4 v8 f4 |) ?; G5 E( s
4 - p% `. ~1 G6 f2 `3 h" z5 V$ ]6 ^
5 insmod syslink.ko
) U% T0 b5 p. K 6
5 e& j5 V) _: J 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6746 g' E4 r( m8 }" Q& O- W
8 0 r4 E8 r+ O# p
9 ../host/app_host DSP
# ^$ q# O; `, P# V, @+ m$ i$ M. ~- w10
/ X: i5 B+ n. |0 k; z' c: k3 T- w. ~  C11 ./slaveloader shutdown DSP9 l/ ~5 e, a' t2 J

! b" v3 ^9 b' ?* _; m& {$ s
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
0 K$ h. d1 K9 d建立工程
$ W2 e. R$ u0 Q: c. Y6 Z( N6 d' |
. W3 E# w. P# F0 ?# s1 z8 H( y 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

+ m8 v9 {* Q! K2 \2 B" j# islaveloader 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 o% R3 r7 P: C, q建立工程' O8 P2 v  N; {$ i, v! K4 X6 D
* U% T  R  x0 b# n$ k- D( y1 o
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

7 j: l9 E( J5 g3 ^( ]0 \$ ]slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2137

积分

创龙

Rank: 8Rank: 8

积分
2137
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
, B0 U6 f) Z  Sslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
+ x* H3 O1 m; r+ G0 V( ~
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 16:36 , Processed in 0.045031 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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