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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
6 q. [* D/ S5 Y  H3 i, Qdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。% E0 @; X1 z% E2 u$ H

3 h- y0 X7 t2 F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?, U! v3 w$ c9 S' l8 _2 `. F6 q2 K
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程( v! q6 b/ y5 o9 ?% _: }
3 Z0 [, W% Q$ H% H& M0 s0 h
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。% y* B! h$ v+ [$ N+ Q5 V% g  a
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
5 m; J! D5 C/ e3 P# I “清理”过的例程的源码如下:
# l3 {8 U  Z/ x' S7 G& `
6 _: V$ p) |( b& u6 E. E  b5 U├── dsp
: W* i/ ~7 V, \/ K) n7 Q2 j: F│   ├── Dsp.cfg/ b! E0 j- q' r1 P& F- V% j4 m
│   ├── main_dsp.c
. G6 x8 l2 w" h" }- h" ~. O│   ├── Server.c
, C. i2 w8 Y3 i+ |# ]7 A│   └── Server.h9 N& y* q, s( Z* b! C9 h
├── host
& ~+ G3 h, d3 u7 g4 y  q5 I│   ├── App.c
. u- b2 b4 ]) Z' Q│   ├── App.h
! k/ f5 ]4 T; r4 }) ?  Z6 \( @│   └── main_host.c
4 M% {) \* c: O0 g: c└── shared
3 X( A, D- m& {: Y& y   ├── config.bld' f% i) t% d0 @
   └── SystemCfg.h8 z  g9 w  E; j% J- D. }
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
. I2 H: n- h2 s7 r7 Q2 k4 c4 ]+ G0 W: M2 C5 i% o/ d
./makefile
4 O! U9 v" M0 `& D  N
4 I% V$ k4 \5 E( c7 W1 o. r 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
! L9 y3 ?, q: }9 Z) z* r) Y9 M2 W: F 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15; _( ]- q* @2 v* j
3
7 b4 S: U5 z. T1 x; k/ L6 S 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi; [3 \* P4 v1 F8 y* A
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-+ ]; I9 L& ?+ ^) c* v( w) I
6
9 P& U; i5 o$ v( b& ^" A 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
& J4 d$ R. j' o  F1 C4 n6 E 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72% C2 f' v- W! G
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
$ |+ H/ ^, d. F4 n( u  N10 : d9 {- q' |! w1 q+ V5 {
11 export SYSLINK_INSTALL_DIR      \# k' u/ ~0 d( e
12        IPC_INSTALL_DIR          \7 M! t2 v+ j8 {3 i% o( S$ @2 `
13        BIOS_INSTALL_DIR         \
! @/ x9 s7 ]9 `5 e9 F5 T  W, n14        XDC_INSTALL_DIR          \
' _, I/ n% o9 U0 T+ T15        CGT_C674_ELF_INSTALL_DIR \6 p* h. B2 c% h* z: A
16        CGT_ARM_PREFIX
# w2 P4 k7 L: T" ^$ |17 6 D; O4 M0 p) p2 S6 |
18 all:
+ |/ C& O1 i! y3 b" i19     make -C host all
4 {! H7 P4 g3 T20     make -C dsp all$ i" I# p3 H: l! [! m5 W1 N+ y
21
( e7 x+ c/ T4 @" @5 ~% B" b22 clean::3 ^- b6 r! J( z% t
23     make -C host clean  ^1 Z/ E' f4 V: e) b" g7 Z
24     make -C dsp clean( t4 c0 N* J( K' _) w4 x( n  }
./dsp/makefile
8 P+ t& J# z. Z5 w9 u2 B
3 F% p; q" z: i4 Q) A 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件( E) S$ s0 ~" w2 Q7 c  l4 I$ y! D! Z. z
2 objs = $(patsubst %.c,%.oe674,$(srcs))
2 d6 z9 w& Y2 B+ U 3 libs = configuro/linker.cmd
" D& j  ^/ v! c. S6 s/ t0 g8 x 4 % B/ ?0 ]" }1 J+ V
5 all: configuro/linker.cmd
6 J2 ^7 ?' b: p) V* R 6     make server_dsp.xe674
* z: ^7 ?6 @  f7 Y# X- @ 7 . j2 S- `0 R3 @
8 server_dsp.xe674: $(objs) $(libs)
( g& O( k5 `% _& B" u  o* a& b 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
8 W) ]4 [" g" V, u4 D" |10 # h7 R# {/ y8 R7 p3 R+ s1 Q
11 %.oe674: %.h
9 ]# y. J: y# r; ]12 %.oe674: %.c
( F5 Q2 c+ i( F13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<+ [) j$ }$ z9 P' ?0 A. C$ N
14
3 R3 K$ g& x3 u5 ]; e4 \* \15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld5 i, p: e- t0 Q
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \1 B1 I7 l! t! F. R
17             xdc.tools.configuro -o configuro                        \
- d6 Z' I( f3 S& [/ [18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \: q5 O% N) m2 t- M# i: z) p+ x- r
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \6 M, D& r" J9 b& p  u
20             -r release Dsp.cfg
0 G9 O) b1 M) @  \% @; ^% M/ d21
! |* ]) k2 i# d$ b+ O% }) N9 y22 clean::
( z, T7 J9 N$ h/ u5 P7 t8 s4 k23     rm -rf configuro *.oe674  *.map server_dsp.xe674
6 _8 v0 d3 d# T/ L6 e9 P24
3 a* @* r7 u) B" A+ \5 F25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
& u7 |( G; Q1 @& X6 g# r" a, h26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
$ P' B2 ?& f# X" t9 ~, A& \9 E1 o27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
3 X' ~7 Y, R# j/ Q9 F# r28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages$ y8 z8 I# k; {( t
29
' i' Y4 x% x) @* M' e& W, W30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
; G2 p" Y+ K( f- I31 ) T( ]8 V3 Q# n2 n! e( g
32 CC = $(CGTOOLS)/bin/cl6x -c                         ) U/ g* z6 E5 h5 m
33 AR = $(CGTOOLS)/bin/ar6x rq  \7 t0 p4 n1 W2 [
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi/ F' h+ N5 l" H8 i
35 ST = $(CGTOOLS)/bin/strip6x
5 X) v; t  N3 i* r  t. n7 ]: _( X* C36
$ ]! E6 w7 K/ ^37 CPPFLAGS =% L2 P4 l) J! |$ d5 v* d+ @. [; Y/ z
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS); g4 ]; }  O3 n7 _& k  _
39
0 A& V8 j. `; k, z3 y: A7 {. d40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
2 V/ u& r! Y" K( ^* U41 4 ?4 a% \7 t; p! l! k$ g
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ' y; i' Z5 t; u6 o; h( L& W9 ?
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. F0 t4 G! N; U3 {. @/ S./host/makefile1 D) q9 Z1 s( M8 A" o* n" j' q
5 h2 r* e; S: t6 @2 B( @% @
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
5 b+ d4 X' P) @0 f; G) @ 2 objs = $(patsubst %.c,%.ov5T,$(srcs))6 J) G3 A5 M; b8 M2 h. T
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug) w- e& P$ |# X  U
4 - ^/ ?' D$ c" h0 A1 h+ L* i" y
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))# n: G  Q0 i8 a) a  F5 ~( H+ v
6
8 }5 N0 `' m' L6 L$ f" Y& ] 7 all:
& W; ]( l0 ?. u) d2 G% E 8     $(MAKE) app_host' g  Y# w( u1 e. u# b! x3 Z
9 ( |3 U0 x% M# \; Q. H* {- u
10 clean::
, I+ i' c+ {5 k+ \11     rm *.ov5T* *.map app_host, |3 p( C' K, K# d3 b8 K; d
12 $ l* E) ^5 o. O! w
13 app_host(objs) $(libs). U/ }% ^8 y( |% A  q- o! N
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)7 ^" m2 c; u0 l3 M0 B: C( F2 w
15 + L* j8 _; S( w) ?8 G
16 %.ov5T: %.c! l! T1 n; H# G0 Q* x  K3 @6 y
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<5 p8 O: i  M  K! j3 N$ A7 }3 P# u
18 1 X, u& O6 X3 ~1 |
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
- r. g, X2 S+ u" c; l, c20 AR = $(CGT_ARM_PREFIX)ar cr" v# e# ~; k' r/ l  q+ E3 j
21 LD = $(CGT_ARM_PREFIX)gcc
9 M* S+ H, n1 x0 \% W; R22   S1 C. i) E# ^
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
  @7 Y! X' g! \24            -Dxdc_target_types__=gnu/targets/arm/std.h
' r. G* G) \9 p! u: F6 r- e, ?25
( M; [! w0 H( K: h  M8 i. N; [26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径: R- E) ?& h& F6 P
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
- d0 \* R! T9 W. _5 U28          -I $(BIOS_INSTALL_DIR)/packages                           \5 a( E& D& p$ v1 s
29          -I $(IPC_INSTALL_DIR)/packages( ^- }9 b! A; @( U5 r
30 9 s+ A& O6 D* f" q$ y# ^
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
4 k" [1 c3 z% ~0 X& Y8 O* n8 t32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序8 m" {# k- ~! d) J, o# U
编译工程
+ a  @  T5 i5 Q4 H6 h$ q  D2 {; K9 i% w
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
) a. }" q- Y4 V4 T1 z: J% s: z
) r6 }- t' Q, f% i运行工程! g1 E' d# S7 ]+ G

- L& E/ j) G' k0 d  P 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。4 p+ m1 c3 {( X2 {+ f% c5 K7 r
% w9 J, ]3 X3 p5 V6 o2 h& Z
1. insmod syslink.ko                    # 加载 syslink 内核模块
* A; O: x: K! i  L. B2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
* H/ F5 L  \7 x* S: B3. arm_app                              # 运行 ARM 端程序) Z/ V$ X: y: ^) \& s
4. slaveloader shutdown DSP             # 停止 DSP 端程序5 t" ?# \  U7 D# ~
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
6 T: Q' W, F5 B" r7 L 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
$ X# [. l+ P4 f6 O" M( _# s% c. v& _9 U
1 #!/bin/sh
4 c5 e- ?( p- @; v 2 3 O2 _: ]# {& U' X/ @
3 set -x
. w+ F5 o1 y' M 4
! i! G7 n3 c6 o& J) } 5 insmod syslink.ko5 I9 L  s$ V" |) x
6
/ \5 i: J& C4 O* b/ ^& N 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
3 h% W, b! Z9 l; a9 y" O 8
; N/ @4 @/ t: v8 P% W 9 ../host/app_host DSP3 K( u' Q* O  a' c  C) y
10 - K2 [! m* y+ Y" Z7 X$ u- ~! |
11 ./slaveloader shutdown DSP
: {" N4 W5 E& z4 s3 S0 ^. K8 F! s! z  u# C3 M# }
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05( ~, L3 d, u. |9 @
建立工程3 L* o4 U4 W; j! ?
' g4 p/ s6 u/ {1 t- b" O$ ~. V
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

  K' c$ `7 M1 wslaveloader 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& y9 W- x& z4 L# k8 j$ s
建立工程) P; j2 Q' x0 x: I# W' ~
0 D; N6 c/ ^; s  V0 d
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
3 _% ]% p, Z+ y' M! g9 v
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2143

积分

创龙

Rank: 8Rank: 8

积分
2143
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
; ]0 H# Z. \, Y9 q0 wslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

& a% v8 [  r$ odsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 00:31 , Processed in 0.044202 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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