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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
/ m' ]6 _4 w/ B  Odsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
, s' o! Q! S8 n
4 w: }" d7 ^0 d+ R/ m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
6 w& J  @4 Z! ?. }3 `2 M! L# g: N4 j" H
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
- e1 s' }' v5 [3 w* @" X' q 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。/ O3 {1 [7 i* _
 “清理”过的例程的源码如下:  r" ~  o3 K- H+ F3 b. \
: G' v- J" K  F, N3 T7 P, h7 z
├── dsp
; w; W9 K% O# p1 D3 s4 t2 F4 s! N- e│   ├── Dsp.cfg
0 h, p& u" E. J: i+ V0 l6 }* a│   ├── main_dsp.c
$ ]4 [1 z! L- s│   ├── Server.c
# Y8 z! y0 P9 Z. J. |) c│   └── Server.h
3 L; G# Z/ D& w3 l6 c├── host6 h! |+ Z# n0 f6 R. U6 ]
│   ├── App.c
; P# P. w" ^6 g" ~0 ?│   ├── App.h
5 B6 t& q/ C' f: X! ]9 i$ C. ^4 Z' g; L│   └── main_host.c
! w; n; M. E/ x9 \$ p' U( {( M└── shared* O/ d' Q' y7 C! \" Z; x6 g, w
   ├── config.bld) z4 }& k/ @4 [
   └── SystemCfg.h
$ [. T9 y" {, {3 M7 v 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
! g  i9 v. m9 Z4 q+ ]
5 ?$ n# _/ j0 U  a./makefile
- t& g2 k! ]7 d2 S
9 @* Q, l. C5 Z4 S/ t- D6 t5 i0 M 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
4 r3 D4 N7 P" _: C0 \ 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15. h! v% f* x( H# Q7 i: y: `: d
3
: v* [" W5 J  ]0 I 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
- }2 O2 m" K% K 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-, @, O) H' K2 R
6 % Y3 d$ W5 W# a
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50+ \' t9 v1 z9 _! c6 O
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72/ F1 d0 j; D# v/ u: J2 [! c# Z+ U0 k
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4) @( U) j+ `! U6 n; V9 X% ]9 i  z
10 $ D) |8 D4 _7 v3 h* ^( J- w
11 export SYSLINK_INSTALL_DIR      \
8 F5 |8 J1 N2 Z! K' ^% X12        IPC_INSTALL_DIR          \  i; m% `8 q: g: o) o/ k: ]! u% y
13        BIOS_INSTALL_DIR         \4 j& C* Q3 i% E: M/ i. i8 D1 c
14        XDC_INSTALL_DIR          \
6 a2 D+ u( t) n3 m1 `% P: q15        CGT_C674_ELF_INSTALL_DIR \+ z0 P+ B, Z4 P0 x/ M
16        CGT_ARM_PREFIX
' ]$ }' s4 Y+ @17
; U) w7 y% O6 P3 s. O18 all:0 e: I% q3 p' f
19     make -C host all
+ Y! Y0 S( H# h  Z' I9 D, _& _20     make -C dsp all) I0 n9 Y; ^+ ]0 [' M
21
, Q7 s1 I0 W0 \  H2 ]22 clean::6 u8 i, @/ J, p& y7 W
23     make -C host clean
# i. y3 I+ u2 O( n. [# H24     make -C dsp clean
( Y8 {- B9 d; I  H./dsp/makefile, V8 s! C9 R, h" L  F% h- l
( o' l7 @% {0 V1 U8 h
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
" w6 y( I# H+ m  w0 _3 t 2 objs = $(patsubst %.c,%.oe674,$(srcs))
3 u, w: y" s7 n" a 3 libs = configuro/linker.cmd
3 `3 f. G- s3 k1 K6 ` 4 # t7 b$ M! U. P7 m( |
5 all: configuro/linker.cmd
& T7 h2 T2 {" ^" `# D+ k9 c+ K- g5 w+ Q! u: y 6     make server_dsp.xe674+ v/ }( m0 T7 a2 T! ]
7
( b) O1 t( N- ? 8 server_dsp.xe674: $(objs) $(libs)1 ]% g. p# H# F6 j( M. l7 i# A- q
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
( r% ?; P. W. l) I  |8 |' t& g10
$ W3 A/ I& e2 F( |& J11 %.oe674: %.h" O. J5 z7 Y* ?
12 %.oe674: %.c
; o, a& r* p" D3 v7 G4 G- B/ Z13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
  m# ^1 T- y( s3 A14 ' U) A% m) A0 H$ c3 g
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
$ b" y9 L7 Z! T1 ~% W3 p# E16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \- \6 r5 [5 @* ]
17             xdc.tools.configuro -o configuro                        \
4 t+ f% i* s+ b, @1 Z3 W18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \  q, }4 ~7 }) M: C! Y
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
( ^3 H! n9 B/ H20             -r release Dsp.cfg$ ]4 k0 ?$ I7 B6 F7 ~
21
$ s9 J: i: x& L22 clean::
5 o# C+ |3 P2 d" }( D- P23     rm -rf configuro *.oe674  *.map server_dsp.xe674
. U, {. U! _1 H( O8 v24
; F' F- X! b! c$ @* D25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages7 i% X# `/ ^. |
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
) K3 J2 @" M& {$ ~" S4 D% C' ]27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
1 D; q2 V" I9 F- L4 O* D' s28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages: T# [( G: u; V2 L, w9 V
29
8 Q( q6 X  X3 [( ?& a30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, s/ q, q+ f, K31   k: Q6 t7 p+ m$ M4 U  d! ~$ V1 q
32 CC = $(CGTOOLS)/bin/cl6x -c                        
* T6 n- s/ t+ m' G33 AR = $(CGTOOLS)/bin/ar6x rq: q1 u# M7 w  Z& \/ C7 W
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi8 `& @% K: F/ M( J
35 ST = $(CGTOOLS)/bin/strip6x
" l/ o6 h# z- e' p: [36
) D9 J2 E$ c$ o: E* C$ F  Z37 CPPFLAGS =
7 W, X, X& v- o7 S38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS); o; C' _: }. a
39
( y) c+ c9 M. m3 X& ~7 H40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)  u0 `" H% \9 {- J* t0 l% |
41
% R' [4 v5 K% C# {: C/ G42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     , M9 v5 g6 I) K5 o
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
" T8 q$ [# w; ~6 N5 q: x0 i" h2 t0 G/ V./host/makefile
- ~( F7 w* M5 L8 ^& r9 D4 A1 a( ?- f' M+ K$ X
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件( |% N: r+ S# g7 q
2 objs = $(patsubst %.c,%.ov5T,$(srcs))% q: q/ t* L$ I% C- M
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug; s  ~2 u2 U- n' V2 j" H- D
4 ' d2 _( J+ u7 ~' l, d  e9 r
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
! |9 v( m* E0 B" J9 r 6 6 H1 n$ X% w" n3 N
7 all:
# F; q! a8 m* O( r& d$ } 8     $(MAKE) app_host6 M2 N! Z. b- B( x5 G! O9 i9 z
9 2 ]; m" k  J2 E% f
10 clean::
  O- }; |& g+ z* m) K11     rm *.ov5T* *.map app_host4 Z( F. u( b( {
12 1 f  E+ D+ j- c; Z# B4 R
13 app_host(objs) $(libs)
+ y0 ~  ]+ G4 j6 `: f9 t  ]% O14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
8 b5 ?; w5 }* q; I5 [( \15
- w6 [( `" E0 _6 u- V16 %.ov5T: %.c
. {4 J/ k7 J( {+ ?6 e0 N9 t5 c17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<$ e8 O# j- z# U& m+ H+ K, A* l
18 1 d( H1 p( w' R& m0 x$ L
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t: ^, x0 {) J8 e7 K+ B
20 AR = $(CGT_ARM_PREFIX)ar cr
' q/ W/ K* T$ i  \  p4 g21 LD = $(CGT_ARM_PREFIX)gcc
3 f! \+ {8 B! X7 f22
+ i: W2 y/ M+ E6 {! @% M23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
3 X3 R) u( t* N. V. G24            -Dxdc_target_types__=gnu/targets/arm/std.h
4 d; ]9 p8 L$ i' J( }( @25
! H) a5 u# k" U- S: G. K26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
3 o- a4 L9 a: N27          -I $(SYSLINK_INSTALL_DIR)/packages                        \# C. o& y7 c4 {; `4 l: S
28          -I $(BIOS_INSTALL_DIR)/packages                           \" x9 P& d! \6 o# J- n
29          -I $(IPC_INSTALL_DIR)/packages- p7 Z% c8 a, ]* I8 P+ O7 ^
30 & m7 x- @9 R. K% L' v0 ^
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
9 b$ ?4 l* Z& f5 z; J; J7 ]32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
% Q# n! M8 Q6 d( q( g* H编译工程
* e6 X$ l1 h0 v" |8 W7 m$ ?, o# v
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。- O3 L3 n* w; z( W. T

; q8 Z9 X( J. M; J运行工程
& g7 o8 E  f' H1 @5 l6 O! W+ D# `+ K0 W7 l) j- d% O; y( h- {- F0 G; \
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
- D9 g4 O. q) T1 z' \
$ A/ z  C( W  T) \1. insmod syslink.ko                    # 加载 syslink 内核模块$ _- D: @6 H: N  C) i7 g
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序. ?0 u% B5 V0 \. D2 G$ B, k
3. arm_app                              # 运行 ARM 端程序
. e# i8 E3 Y0 S3 F4. slaveloader shutdown DSP             # 停止 DSP 端程序2 A; S2 C3 U- W8 o$ f
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
0 o$ l! i4 |9 ~4 G: S9 K, b 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/ f3 P9 P: q7 e

/ s: g- g* E- H: B- p8 m# _ 1 #!/bin/sh
! n& z% p9 T) p& D6 ` 2
% I# M% Z" z, ~8 G: \" d 3 set -x. v# B* z2 _3 v8 w6 q" J' o# o. b6 w
4
/ W% L1 g& [- E' O, {  O, d6 [ 5 insmod syslink.ko  ^$ P& S8 Y: {
6
# R2 r: w& @- }9 ~2 n+ s 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674* O' i4 a1 v' q( Q$ ~( Z5 ]
8 * d9 j: G  g: i5 D
9 ../host/app_host DSP
; D/ Z+ l$ d& U$ T- {: k10
3 Z* j+ J4 y" s) S& ^% A  k! m% t: r11 ./slaveloader shutdown DSP
3 S! X  V! n+ a' `* a! }. X
: A) g( N' ^. z8 g0 l
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
0 ]# d( u( p- b建立工程
+ C0 _: k" c: T
% G; F+ G0 H! P, P( j 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
0 n& \6 ?- j0 F/ @+ I9 @
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. f8 i- G% c3 b- n
建立工程$ c# E* z# J* h5 K2 ]

* N5 ^' g# i- K# S8 M& [ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
0 j  F8 v- m& @  ^  V! e
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2102

积分

创龙

Rank: 8Rank: 8

积分
2102
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40! i+ ~6 }3 a$ |# Y9 U+ [
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
: W5 I8 m& j4 ~! h2 V* b  X
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-6 04:24 , Processed in 0.043275 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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