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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,( w- R& K; W$ E% R
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
- @1 Z5 M4 [1 a* r' _- [3 {( s) e* W4 Y% j% N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
' a7 w; c5 a- r5 U9 S/ J
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程" [! ^2 H' o) r- J/ q
2 u9 j& X' I/ X, t/ y1 E; o
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
( {! ?4 g) H% g4 ?/ ] 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。3 |5 _, S8 d7 A2 s5 E5 ?1 {
 “清理”过的例程的源码如下:
8 k/ H$ [  h) T( h9 P
0 F* ]8 Y6 ?+ Q├── dsp$ p- I( p/ l  S* y3 a
│   ├── Dsp.cfg
8 i5 B  o& o. s│   ├── main_dsp.c
7 L8 I& p( a7 Y) I│   ├── Server.c3 H! y/ v! Y/ T' a4 x1 ]
│   └── Server.h
& K+ N: u  N% F: D9 K3 ]0 u├── host$ b' h5 O, v; e
│   ├── App.c! G+ e) n0 F9 h' f
│   ├── App.h2 p7 `; @/ j7 [4 v" b& |% F
│   └── main_host.c
* `) V& m- b7 M& k└── shared
8 W( r% m  A2 p3 v' ?   ├── config.bld
/ x: \/ `9 c) x% \) L/ ]# d   └── SystemCfg.h$ n9 i  j9 Y- S3 }) v( u, s
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
  P# v0 s% |0 k
$ H" Q+ R* O" ^./makefile
! N4 @4 |  l* |0 w( \* W$ w) }; [7 J
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
9 e, u& i* I3 T9 S+ P  k 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
7 @! k, I! a0 C8 [) F$ t 3
8 b1 Z$ s# v9 }' k% Q$ Y5 f 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
6 j7 o& C6 H+ P7 c, X7 T# {' N5 P; f6 L 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-6 ]+ M2 S8 \& p) u
6 & X) q3 c' {0 ?3 {/ w
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
* [0 L& u! T5 i! p, n 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72! e8 {3 Q' y! a2 M
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
- j5 {! z0 Z  X' @6 K" o& I10
$ n' H$ b$ k9 c% f1 m11 export SYSLINK_INSTALL_DIR      \0 f1 o. m( p, T$ d( n8 b" `8 u
12        IPC_INSTALL_DIR          \
0 j! m# U0 @6 w13        BIOS_INSTALL_DIR         \  m1 ~' x; O* F' j
14        XDC_INSTALL_DIR          \
8 R2 I. a/ `+ J6 ?% e15        CGT_C674_ELF_INSTALL_DIR \9 |4 b* T* a; k
16        CGT_ARM_PREFIX
- B# {9 f  ~+ J& g17 2 t3 H( Y3 S1 A+ R- D) f9 ~3 c& S4 B2 u
18 all:8 {( ]( d4 c% I2 Q3 X
19     make -C host all
4 j& z" l( d6 ?6 B7 Y# a0 S8 @20     make -C dsp all, Z5 c5 ^$ F( n) i% T
21
# y9 b* t7 t$ s5 m22 clean::
- E9 @$ S: |5 L6 V# M' u; M23     make -C host clean3 j, k4 a+ C  ^
24     make -C dsp clean
( ^2 f6 a* {2 u' i7 i& A  z2 l./dsp/makefile8 c7 J+ V' j( N+ L: u

  A( }' x, k8 c4 M1 x8 b 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件+ M& s) I7 G! a/ t; ~
2 objs = $(patsubst %.c,%.oe674,$(srcs))
( D% z0 U+ \: u: Z3 U9 F: b: d 3 libs = configuro/linker.cmd* t1 q8 W  t& |
4 ) x, s; y. T/ c6 ^
5 all: configuro/linker.cmd
6 d, U6 v+ `9 }  C9 _  N0 } 6     make server_dsp.xe674' D6 X$ l  A. B- S8 l: i
7 : o/ v: u4 O! u% R- K9 J' v
8 server_dsp.xe674: $(objs) $(libs)8 G1 \" K9 V/ D7 a2 r
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)* m. J! ~" Y- m7 Z/ p( Z  Y
10
  A7 Z. \. R3 X1 b# X, ]6 E11 %.oe674: %.h# T+ S% N, n( W8 p" a8 y
12 %.oe674: %.c' B% u; T. l! ~3 _! v1 g
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
5 s& ?3 k( k# `6 _- R1 i14 " q' J  y. c2 V8 j. M  v
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
6 n6 J1 Y* T  i6 @& e0 t16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \1 M" R+ G) s; z8 V8 C7 d  R: p/ u
17             xdc.tools.configuro -o configuro                        \6 D3 P' `; h# F4 V7 y7 T2 B
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
0 K' K9 f  ?' x# q, G19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \" R# q7 f; u. _- j4 v
20             -r release Dsp.cfg# _, ?" w$ R' A* p$ I0 r9 R
21 4 R( ^# @# l  [8 u
22 clean::
1 m& u- h( _' T' Q* J3 z+ m23     rm -rf configuro *.oe674  *.map server_dsp.xe6741 o. F" G! n" w$ u- k
24 $ C8 I9 v0 Y. ^) `; @
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
2 \, R; o, @% ?7 V( O26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
, V0 M3 g( D0 b( L8 h! [27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
* R7 z5 L: m; V6 D( I28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages( }# [( T# \1 [4 Y
29
+ b8 q: S, V" _1 @30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
6 O6 u, N" P, `- R* z8 o31
  s( J1 `7 P( a# e$ _8 Q1 B5 M+ ]32 CC = $(CGTOOLS)/bin/cl6x -c                         ) r5 V; I6 F* S# w; a1 L' X
33 AR = $(CGTOOLS)/bin/ar6x rq! X. I9 z/ O  [9 T
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi5 R' v( K9 D3 z/ O. ~
35 ST = $(CGTOOLS)/bin/strip6x9 `5 J: r& e5 J* {
36 $ c2 i4 ?+ _+ Z
37 CPPFLAGS =
! i" p& J# _' F; X0 {2 J38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)# |8 [7 g8 B4 Q0 H/ J# @  _! n  a
39
2 u$ e! v( j4 B  W6 V) M- U8 ]40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)6 n) G5 _& z6 q4 |% s- V
41 ( u% c* D) [5 b# x5 `0 D# v
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
# K% M9 M' U3 B1 \7 |  z43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
7 ^* F6 L8 ]6 }) ^./host/makefile0 S) _4 N! P+ a$ P+ o7 |

! G' {7 V! M9 r 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
! G2 B' D- Y8 n. N0 p) `0 f 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
0 K; W/ E' |( L+ G0 v/ ], s 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug0 J' M  s. x2 J) ~3 `+ w- \$ F
4 5 z- C. ]  A- k! _9 i9 n( x6 ?
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)). Z. {2 _4 ?' S' N" {: p8 A/ c) [
6   z9 w- E/ d$ [  E
7 all:' ~! v4 T& W$ z6 s
8     $(MAKE) app_host
# o7 S, G' N" J$ L8 A 9
7 T+ [6 `7 c& x  b7 p- q* E$ b  {10 clean::; }+ U$ Q& U. ~3 T
11     rm *.ov5T* *.map app_host
& ^+ Y3 J2 K9 @& S! S12   o$ P3 L, y: |6 g. W
13 app_host(objs) $(libs)
% V7 K& i2 ]4 Q  e14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)/ W+ p" U7 E7 {! U. M5 O
15 7 H3 q) Z' g* {+ j" i5 z1 q1 Z
16 %.ov5T: %.c5 J1 j; `0 i  l: o
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $</ x5 O9 q! J" I9 G
18
1 S2 G: `* S8 g1 t19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
; l+ T/ C1 l& u. B" e20 AR = $(CGT_ARM_PREFIX)ar cr
7 q. J: m+ ^+ `5 Z5 E# O21 LD = $(CGT_ARM_PREFIX)gcc* M" p" M6 r/ {6 g
22
0 \* N$ f6 m4 @; Q23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \4 l# `; L& s& J3 z7 Q2 T6 |5 z1 O
24            -Dxdc_target_types__=gnu/targets/arm/std.h
! K; f, M/ i; J/ `6 D25 # A9 `4 v1 e$ a3 v1 {; ^
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径* a" s. |# i+ K. B" p. W9 T, q
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
; R3 O" U5 m$ e1 k( [28          -I $(BIOS_INSTALL_DIR)/packages                           \2 p; @8 l7 U: b6 f) {2 Z) Q
29          -I $(IPC_INSTALL_DIR)/packages+ h3 x% b5 R% @5 G/ u
30
, Z3 L# \! {( S31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map3 b# Z' w, a$ v
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
: ?8 i, {, Y. r9 D+ S" X( z$ M- P编译工程2 ^/ Y) b/ L3 O& q1 E8 n
( x$ U9 m; v" D. X
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。) \* \3 u/ m9 ~! _( ]# G6 m
2 s0 f4 D5 u% \) D' q% ?
运行工程
8 [( ]& ]# I  P' _9 O+ T8 Z3 U/ X* O
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。1 w* c- [1 L/ s2 e, k$ s) w/ W
% k. q3 A6 c3 P+ M- Q8 x) }
1. insmod syslink.ko                    # 加载 syslink 内核模块$ X' r  g+ ?! d" _! i6 W
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序! V) ~; ^1 [7 V& k, j  v7 H
3. arm_app                              # 运行 ARM 端程序
8 g6 R+ \2 _5 Z( \' x# B4. slaveloader shutdown DSP             # 停止 DSP 端程序
) {& T0 v% \& [8 ?3 ?% K* J, e# g sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
) A) e5 K4 A2 F/ {, b 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。" V8 C) ~3 _/ R4 S; J1 l- y

& E7 P/ a' e& O8 A/ N. E. g4 f 1 #!/bin/sh
; V8 h5 u# ?' f' M 2
3 @% n$ ^/ v( \2 F7 n* b 3 set -x3 i9 j: V, t; s
4 # B( c' ]! f3 W; ]
5 insmod syslink.ko
* f# @. @, D' ~7 P9 n% T  Z 6 ) [* M, {+ w8 r* e, a/ q
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674" T: o+ y8 P8 T6 ~# e8 C& L
8
% k  J! q2 @- T' k2 H# d; b3 ] 9 ../host/app_host DSP7 W" ?0 P9 Q4 {: R8 [" Y
10 . A0 Q" P3 W, @4 o
11 ./slaveloader shutdown DSP
. p7 v; [8 Z7 C# n2 T8 g3 X9 J+ u6 i$ i) W4 ^7 U! j
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
( K$ W6 `3 ]  ?( t建立工程8 A8 l* i0 e; S6 l  f1 k! P% P

3 u' M7 c+ P' L$ ?0 Y' e 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
# |( v# o3 M. v
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
$ t5 e- N" ^* s1 L建立工程
: o7 S, V" y& B8 L2 O) z, \& b" H6 o+ o) ~# _- u1 T
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

, o4 e- K) |8 u+ R( Nslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2110

积分

创龙

Rank: 8Rank: 8

积分
2110
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
. p$ N2 B6 }% U1 z: ?slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

, h( o3 p% w) K3 R( @. J9 xdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 00:06 , Processed in 0.044412 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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