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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,: s" s( n8 k( I7 A, r
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。5 ?) X" M2 ]' F) O1 \$ J

' |! P. @0 b+ @- u3 v' J# @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?! B: B% M' M% I' y/ F$ y0 z0 p
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
6 f9 o  U  X& y8 J' i7 I! q
+ f1 T8 m2 Y9 B& T' {- L/ Y: }8 b 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。1 e. @0 ~1 B; R$ h% Y9 p* J
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
2 S4 t; I9 C  @ “清理”过的例程的源码如下:
& W4 P: T: S1 T5 q# [3 C; y6 M% p) Q. H8 B3 A2 r% {  M
├── dsp/ j) J" ?0 @+ Y
│   ├── Dsp.cfg) |. ?6 E6 \+ P+ r
│   ├── main_dsp.c, B& ?. W) A3 n: U0 G' T% M
│   ├── Server.c
- q- v! K% S; @4 X# X5 H│   └── Server.h/ h' S7 t( C; T/ q$ H% p
├── host2 k" l. ]! ?6 e+ n( a
│   ├── App.c
% `. r6 T7 }/ z  a  c│   ├── App.h* a1 h* A+ @% O5 v
│   └── main_host.c. f" j; p) v( E/ ~$ ?; A5 G& t0 a# U
└── shared1 S- C% r4 D7 q2 I6 O
   ├── config.bld3 D& G* s' V! P! _) B$ _1 \
   └── SystemCfg.h  H; J, s% ~2 y8 a! `
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。* {* z: r* l5 c: [  R
8 I0 W( f0 w3 I* @  v/ P4 Y6 m& \
./makefile5 v9 X- U2 {2 `, F: x8 {2 `0 F

3 t( P7 C% O, B1 p. T( v+ {0 A) S 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
9 l6 e& d5 n; W 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15) V# k3 c$ D( {5 h
3
! m$ ~6 r+ p6 ^% b" Y+ F4 H: x* A, ? 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi& \7 G5 q/ ?! G  D' j& }; R; R
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
3 F2 V* x. D$ P; p 6 ( A& B% h! l" j& e! m
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
2 K  l$ P6 w) E1 V2 n! I, J0 \ 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
* j+ J' r+ b1 D$ A 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.47 s$ {* ]' @3 I
10
$ j4 w% p2 U3 X2 J7 B) ^/ S11 export SYSLINK_INSTALL_DIR      \
1 R7 ~! K- d  [1 f* o6 _12        IPC_INSTALL_DIR          \
7 `% C, n8 t) w0 j8 U13        BIOS_INSTALL_DIR         \6 V, q# J- q2 D% V4 E. _
14        XDC_INSTALL_DIR          \: ~6 {) J# w+ k6 L' K$ ^
15        CGT_C674_ELF_INSTALL_DIR \8 h. c/ Z0 Q8 |* F" i6 c* u/ u& G
16        CGT_ARM_PREFIX8 f8 ]" [9 E  H8 n
17 : L8 V! Y) j2 ]
18 all:" Q9 o2 L& D$ a0 r4 ]$ @' \
19     make -C host all
- z) N! }* A, |& a: a20     make -C dsp all" r6 F- [9 N1 ?" ~. G9 S8 U
21
- ~) t) @+ H. o# U9 C9 w22 clean::
, [$ |1 G- p; _0 z0 x8 e% U* H23     make -C host clean
& Z/ z. \/ X* n- d- E0 u' @24     make -C dsp clean0 b; D) Y# O: Q& z, w  Q# _+ ~
./dsp/makefile2 k* F0 C# f" T

' F2 J5 ~5 M3 A! z) E" D! T' p 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
1 g* t& t; F  t# a 2 objs = $(patsubst %.c,%.oe674,$(srcs))
  q; L- f4 S; q+ t' H. p. e 3 libs = configuro/linker.cmd
7 }8 C) P2 w) v8 r8 f+ ?5 e 4
! \# f# l% m8 H1 U1 H 5 all: configuro/linker.cmd
7 v5 J( w% m" G' r; j8 R 6     make server_dsp.xe674- f# K4 H9 \9 |+ g! O; B+ t0 O
7 + \# m6 t9 K) V; A
8 server_dsp.xe674: $(objs) $(libs)
) i- ~. N' Y9 w% z 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
0 l5 B- H7 s* M" i+ I$ h( H10 0 N6 u2 k3 ]8 k- w  }
11 %.oe674: %.h
! j, ?6 Z$ Z7 V0 h12 %.oe674: %.c9 E! q5 t% D$ u8 L3 v" m1 m- d
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
0 P9 m2 \. z  x  N; {" k14
/ {# w0 |( R9 Q6 ?: Y15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
# u' D6 a5 T% k1 X/ c, }# }8 r16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
$ X; J8 I, z/ M% N6 H4 b, U17             xdc.tools.configuro -o configuro                        \
, W4 P8 \+ P7 y% o18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
( v$ F  J$ L; o19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
' F' C1 u/ l. x. A& K20             -r release Dsp.cfg- K" Z' t+ h, \
21
- c& v5 }& f7 l4 ]22 clean::- w3 i$ j. v# C
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
/ N, [" Q: d& O% w1 K$ C24
, N: S0 a( F! v- V) ]. g25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
  B# g/ `/ M) M26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
' c7 p! h: m7 ^  G; j  k  k& L/ }( H  M27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
" @. z2 h5 w3 h4 j% J8 h5 E28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages9 ]  C6 o  @) n, c2 U; d
29 + w  b; w: B" s( E
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
; h4 B3 Q  |1 h31
! G/ I/ j8 V# `32 CC = $(CGTOOLS)/bin/cl6x -c                         . J$ C; {: H$ ~* `% S
33 AR = $(CGTOOLS)/bin/ar6x rq
0 y7 d3 [/ O* d2 [# @$ u34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
1 S7 N" R$ M! \/ K& b% ]35 ST = $(CGTOOLS)/bin/strip6x& k5 T, D( y3 I& S
36 - z! E% e1 y: ?& b8 f
37 CPPFLAGS =
9 m* ^; Q, I  M* D1 Z  ]% v38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
9 G1 F, o+ \$ L2 @- Y: J39
9 Q9 g) u( V+ X7 d) `1 O9 c40 COMPILER_OPTS = $(shell cat configuro/compiler.opt): q/ x. L& P! m. a
41   C# K) B+ _2 p3 k1 a
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
1 b3 z7 I& D: Y: }1 ^: ?* n5 G43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
* q. n3 d) ~2 l& c# d0 a./host/makefile. B' V2 L5 O# u7 ?! G: }1 v! T# F
$ C! V6 S$ p6 v; o9 q* N/ f
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件: o  y0 p* f+ }  s
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
- g1 Q" H" ]+ C' o& i% a, E 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
, H. f' R9 x* M( H# [0 Y* i7 Y. ` 4
$ v# b, G' `+ l1 b 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))  J8 J: F6 X) n) c5 y* P7 r9 N* b; e
6 ' c$ I! U: _( u, E
7 all:  N" }* R  [! J8 l6 @! R
8     $(MAKE) app_host3 r, l8 g  j+ a: c
9 4 b- x7 p" D" ^* c' q
10 clean::4 a6 g2 j& d# r9 h9 p0 g+ p
11     rm *.ov5T* *.map app_host
4 S: Y3 i5 ^1 B6 Z" O12 & p' c) a( s2 s% @
13 app_host(objs) $(libs)$ j0 W. M* v. ?: T+ [( ^7 I
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)) x* u$ T9 t, E- c  j% n# H
15
! B. m5 N5 G( e$ P/ }16 %.ov5T: %.c; b9 A! P4 S0 e( O
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<" `9 z: D* H7 r3 S! M9 u
18
* o+ e( e3 ^+ ]19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
. f5 u! w0 l; n5 t: P) x0 q% K; b. g0 g20 AR = $(CGT_ARM_PREFIX)ar cr4 x1 A/ o# y7 R3 u5 g. [
21 LD = $(CGT_ARM_PREFIX)gcc- X6 P3 ]1 _. H
22 ! i3 B0 c* w5 F0 t, i. q4 E; e
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \3 _" |# x1 J2 M1 r5 G0 r7 K+ d
24            -Dxdc_target_types__=gnu/targets/arm/std.h. G5 k7 R( W9 H3 E8 n9 d, N
25
" t: A% N. {( N9 N: @9 u2 A26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
& m5 ]/ S4 L: }" B) d27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
) n8 E1 ~+ o. J28          -I $(BIOS_INSTALL_DIR)/packages                           \
8 w: g4 x+ q2 m# M4 n4 X! E8 A29          -I $(IPC_INSTALL_DIR)/packages) U; x9 I4 j9 ^; J4 [
30
5 a  N+ l* p  h7 K, U31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map, d) }) v9 f3 s% d( l+ |
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
/ ?+ ~6 ^: E$ h% U编译工程+ d) E% r+ B9 g& X- s' A7 P
1 i3 r5 E) a# d4 H
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。" D# ~& c3 n4 D' d1 m; v

1 F/ u4 f! \0 K运行工程
3 f" D1 ~: _( y# R7 r% U
3 r0 j8 y9 A1 n9 c) L0 Y. D/ i2 K 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。/ J$ ^9 A! ^1 j! |
0 H. ]! W8 v6 q
1. insmod syslink.ko                    # 加载 syslink 内核模块" C6 m% e0 w3 ~- Q: B3 n
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序, I8 T. m/ ^- L
3. arm_app                              # 运行 ARM 端程序: p8 S. o( N" X: k+ B% Q
4. slaveloader shutdown DSP             # 停止 DSP 端程序
  P& g4 w3 ]0 v( R/ w sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
/ ^6 M$ O. _  Y4 O. _ 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
9 D! v8 B# E- s! E: u) e1 `
# X$ y. [' H; `/ ~' F9 M5 ]! G) n* N 1 #!/bin/sh
7 ?- [% ]* z' S3 ^9 _- L0 J 2
0 O; W( e" S( n, l7 z0 ` 3 set -x
' p# y7 l$ d7 P. Y 4
: G; @- D. K" }4 n# C: @" _ 5 insmod syslink.ko2 b3 ]2 Y5 @) ^' E7 ]8 w
6 ! w( L/ Z7 t# V' k5 Q( a* f
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674. I* ^- R4 |  g& {( @0 m
8
( J3 [/ e+ w5 X: q& s 9 ../host/app_host DSP; [5 ?" i3 a  k) N
10 * B5 u# q# e+ b. B
11 ./slaveloader shutdown DSP
0 R8 Z0 @  l& r4 N1 q. e) Q7 a
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
7 t/ d8 C0 }. c1 S- X建立工程: J8 f3 _! l* J. X) e
9 o0 N: e' e! p5 Q) h  Y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

6 p* E) I' P; G; |& U, uslaveloader 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
4 f7 h! c4 h& V% U7 T建立工程0 M% v  k! q0 _
7 o6 p* x& A# s% B1 f! G1 M' W
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

6 I8 `, c# h; _slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2018

积分

创龙

Rank: 8Rank: 8

积分
2018
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
# g$ u+ P# T8 m* `& gslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

% n; I3 s$ V8 k% Sdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 18:49 , Processed in 0.041730 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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