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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,! j2 n- D/ K5 H9 j$ J6 j
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
7 I9 o% v- f) ?" a6 g6 t* B( Z7 Y8 s+ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?. G; i+ N1 V- b7 K: y  K* q* B
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程4 V: c5 W; X6 S/ E& G
" @  k+ ~$ _( i6 l( U. z
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
' q  \. A6 Y$ U6 u4 c+ P 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。% N& W( {" _9 a7 R$ Z* b
 “清理”过的例程的源码如下:3 ^) z# e# T" |0 |. V% [
3 ^1 a2 e/ R2 o% r8 R. @" a
├── dsp
& l* i5 T- V* I6 l0 Y3 E. Y8 u│   ├── Dsp.cfg
3 s$ b9 c8 ^' l│   ├── main_dsp.c
& N: \% y6 m. H% {8 s/ w│   ├── Server.c
3 P, v. o  t5 C7 O; Y│   └── Server.h
" x6 w4 ?; X$ P/ }├── host9 Q2 G1 W% O9 T+ z9 _" c
│   ├── App.c
3 j3 n7 ~4 E, @  C  ~9 [* G│   ├── App.h
3 o  @  h  x# h. ^" @* e; p9 }│   └── main_host.c1 ^) L6 y  P, G$ |! }
└── shared
6 @* \+ j. q- |. R   ├── config.bld9 m) H7 a' T% S- ?
   └── SystemCfg.h/ ]9 p% q+ O. p8 b! z4 z: \
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。4 R4 y/ e5 V+ D

8 C5 Y% h# n, g% [$ ~) }& ^./makefile+ I1 V1 |- U5 D, _2 A6 r

# R" w* p  R8 E5 E8 z 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
9 e4 H& R; a4 X5 Y5 H5 b& d; F 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15) U) m- t" {* p! K* `
3 # N  W$ h# M- r, s" x
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
, \6 z/ S. S- J9 X) {0 |8 N 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
2 w& g: w3 C# l* n. W! Z* G; q 6
9 q: `* B% i0 O' Y! t1 G9 |" ~% X 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
- f) T4 T3 q" ^; P: Z; T 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72$ |5 R$ f; x6 A3 v* r
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4# Q) u( d; U* ]
10 # d' n0 J0 p7 ]- \8 G: {
11 export SYSLINK_INSTALL_DIR      \
9 ~' Q8 c( O  \6 o  g. Q9 y12        IPC_INSTALL_DIR          \( p) J8 P# q9 W9 r6 L: E
13        BIOS_INSTALL_DIR         \
& v8 }* v) o( k+ `, R! F. T  f& Z7 I/ s# s14        XDC_INSTALL_DIR          \+ s' G" `0 T' Q+ a, `4 s
15        CGT_C674_ELF_INSTALL_DIR \  C; a  H' v; {) d, g6 V
16        CGT_ARM_PREFIX
8 s. t0 e" `% x' T4 G4 a" L17
& n: A% r; _( G18 all:; z; f% e+ g! _
19     make -C host all  ?. W/ |& c- K  N& D
20     make -C dsp all3 i4 v; H, e; G$ J) W  b9 m
21 4 D. a, k  L' ]7 Y% @6 Q
22 clean::
- ]& N6 p$ I1 i" W/ y/ T23     make -C host clean( ]6 o7 b: A7 ?  n# I5 }! z
24     make -C dsp clean
  Y! J9 x9 F" v& {9 Y! m./dsp/makefile
& P. L' Z9 _: j8 v; h& L0 n# F: C7 e. X( i0 s& h9 `
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
% Y& M, |" q! p- f2 p4 E 2 objs = $(patsubst %.c,%.oe674,$(srcs))
# P2 {& H2 X2 H: M' ~5 P 3 libs = configuro/linker.cmd8 ?. w. |, o& @" t, G) N- d' |  |
4 * @! G( U9 n2 l- H  N
5 all: configuro/linker.cmd
/ |. r$ ^3 }; x1 d2 h6 U% v/ w 6     make server_dsp.xe674& B3 k' ?) i# M6 ?8 ?! G. @
7
9 ], Q) e8 I/ u- N9 \ 8 server_dsp.xe674: $(objs) $(libs)
4 I5 d, m# h  [0 v+ n 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)) ^8 E; ]1 e3 l& ^, Y
10
  I* o/ @: P9 h) M11 %.oe674: %.h3 [# K! s$ C1 v4 _4 \+ Q" a
12 %.oe674: %.c
1 q, t0 s& I. S3 k% T7 ^13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
+ I0 P4 i0 t  d- `14
2 x# J' X0 H* }2 z15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
5 o6 O' x9 N8 n! H1 S16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \! z: ~+ `: {1 F
17             xdc.tools.configuro -o configuro                        \
1 z( y. ?" A+ A% c6 k5 v( f, z18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \" d. _4 e+ A% U# L( Q& [
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \- x$ r6 r# o; K/ `% o
20             -r release Dsp.cfg9 U8 f9 V. v, y) _: n) ^
21
- v9 p6 n1 |  L% ^& x22 clean::
6 H7 A# w) Y) l. y23     rm -rf configuro *.oe674  *.map server_dsp.xe674
  S5 T7 t9 ^6 m6 h1 e24 % Y# `% m& E) {: ]' L; q' F* ~
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
" Z5 w  p6 \: {; ^2 y26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
4 W- A8 W: C/ L; q( N3 m9 J8 s27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
, f" i- F0 C3 p1 O, [$ j28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages/ a. V; c+ b. a8 h9 i! d8 }% I
29
5 Z- Q( B3 n; s& D( c  g30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
+ ^( a0 K1 k# W7 c% d( B31
3 Y" O. I% A% }/ _: P32 CC = $(CGTOOLS)/bin/cl6x -c                         ; ?/ h  @9 h/ h1 b4 l
33 AR = $(CGTOOLS)/bin/ar6x rq; J" N: A) x: g2 ^: X; S
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi+ g9 b7 W+ U: \. X' p! @
35 ST = $(CGTOOLS)/bin/strip6x
# Y4 y9 x1 z6 a/ ]36
- q2 J/ o$ M7 G" A( n. U. V37 CPPFLAGS =
: }' L0 a1 |8 |" x+ u+ d38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)' _+ ]3 v9 r  z% n
39
' j2 j2 |4 R& P  H# P40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
  J) Z. t; c( t41   a. l, C) k! d2 n& T5 c, b$ V
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
0 U, ]; r+ ?0 ~; m. d& E43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序" m8 r2 @* V, Y0 Z
./host/makefile- K$ k' b- G3 A  s# A  Z

+ V* E/ r( q7 |; S7 I1 D/ x1 J 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件; Y8 j  J& [6 n
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
% C! V& V' O2 [+ B 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
4 [$ u( e8 ~9 Q  k- n 4
& D* r1 N& T+ A* W0 f 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)). d* V& l  J3 W) v1 `
6
) Z: ~. _# H& I6 |* Y4 G3 ] 7 all:
0 Y) ?1 U5 C' j1 y- ? 8     $(MAKE) app_host
$ g0 X: `( [" `5 N5 X 9
; z. ~5 M4 y  f8 \# o: M10 clean::4 Y7 H3 s  K& D% }2 u+ E6 r7 Q
11     rm *.ov5T* *.map app_host/ V5 U4 C" e$ M2 z3 R2 B
12 / @! i/ [" g" {/ K8 }$ U
13 app_host(objs) $(libs)
" d9 Q$ `% s; H14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)6 }; [8 y$ u, N  |+ H
15
! Y. x0 E1 e7 F& ~, Q( |  p16 %.ov5T: %.c2 k! `  a4 c$ D
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
* @8 S! S1 l0 b6 k. x0 I! Q& m6 X" F18 6 g3 M( p" ~$ H$ B" P
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t& D* _' v" y0 J7 `# D2 e2 l0 B
20 AR = $(CGT_ARM_PREFIX)ar cr: h* _5 m/ X* n: q5 t
21 LD = $(CGT_ARM_PREFIX)gcc8 Y- }1 s: C' c$ K  N( F
22
4 l4 T  \7 l( r3 I4 C. F. c23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \& H3 j) O, Z3 j& [: R+ E
24            -Dxdc_target_types__=gnu/targets/arm/std.h; e( z& r" J4 e% T) F
25
+ _) f7 |, j8 U8 l26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径9 P4 k1 y  I  R% e8 T. A0 q
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
$ h/ m! o8 x* S28          -I $(BIOS_INSTALL_DIR)/packages                           \# v9 Z/ F. g1 B+ }
29          -I $(IPC_INSTALL_DIR)/packages
+ x5 [$ ]4 k8 \; S9 q( |3 a30
1 C0 g* T0 [: v. ?4 U31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
9 w2 L$ t0 z6 {9 O& m* ^) _32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
) U" M% r+ j3 {! T1 ~5 s9 m) p3 S编译工程
6 q4 m+ ~! N/ ?" v, w/ I
) D* L: _% w6 }4 i* E makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
, x( y9 f& d2 S+ ~8 z" _" j5 D1 u; M( [' i+ d2 W6 x
运行工程
+ h; O1 ~6 C- H5 n. Z( |, G' q9 x8 N
7 q: z  [0 x7 j! E# U# m% k, u 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。& a2 D1 Q6 |: v+ n
" \7 S2 g4 x. d4 s
1. insmod syslink.ko                    # 加载 syslink 内核模块2 r/ Q6 E6 E% g( k& w9 Q
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序; Y5 E% R& p! v7 b0 p# D
3. arm_app                              # 运行 ARM 端程序
4 O3 X$ y: c/ Z0 d8 I2 H4. slaveloader shutdown DSP             # 停止 DSP 端程序
$ j! j5 v1 }% o/ o+ [4 j# y sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
' Y1 S) X8 u1 Q4 n 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
9 q6 N! i( H* }8 z* _4 }3 e1 v/ {
0 P( f- ^4 v% Q) K! L. @5 |+ K 1 #!/bin/sh7 z5 P6 @) b* _  ]; {- G, Y
2
/ C7 y6 Y" O( D( j* i1 F* w% b 3 set -x
! k1 R& t; ~. f+ L( C 4
$ g) ?! K0 Y2 C  d 5 insmod syslink.ko% x8 B! ]2 B4 W" e
6 ( H  b: i* S+ a. W4 V0 N
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
, }# V" z% u7 N" g9 X 8 " l: P) T. z1 ]% s9 q3 Q
9 ../host/app_host DSP
0 `# [( ^. c8 T10
! g' e( Q; n8 v% Y4 \1 E! m% u11 ./slaveloader shutdown DSP
* c( v! e! H: t3 v+ }5 J( B8 s) N2 ~
) V8 M; `6 g; Y9 |, k
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:053 I1 I. \; r  X; c( Y! d
建立工程' M8 X5 b- p4 \

; k$ t6 S% M7 e- B6 ^& e. f1 O& d 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

3 z- ?- r* Y  N6 G9 tslaveloader 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# p7 ]3 z; ^% v  v7 K
建立工程! \# U6 P; ?$ Q3 h# I7 F5 I$ W9 U
; T, g# K0 P7 o: b8 E
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
2 \9 M- a; J( a! t$ ^* O0 @
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40- {+ [8 h2 \( T
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

6 f0 r' U/ T' ^1 r7 G0 ?3 b. k/ V0 bdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 20:13 , Processed in 0.042646 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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