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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
) O5 q8 h: z1 Vdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
$ P) U+ m( O/ b/ l; O  ^* x4 p. _2 F+ C0 Y- ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
# L& U7 @6 n: d8 L! M1 E; _
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
2 r$ k3 C& ]7 \
7 g7 o+ T5 l1 G+ l- H7 @9 j" t 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
, S$ w# R1 I  ]" y; P  k- g* H+ H 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。/ y+ C$ k. z/ H- `$ F
 “清理”过的例程的源码如下:
2 C/ c* F; x5 q9 t! H
  [& }9 |- q1 f5 ?' d5 r├── dsp) |3 i" ^, l8 a  U
│   ├── Dsp.cfg
/ s. T! `% K! L( x1 K│   ├── main_dsp.c
+ ^- J5 i) d2 d. t8 W4 J# S│   ├── Server.c! _, {: Z$ Y# K7 b' ]
│   └── Server.h, v7 U) Q8 V) \) T- S
├── host
7 u$ n" y6 ^. Z9 W6 `- H; }│   ├── App.c
3 O, F& z& T; @+ N6 q! o│   ├── App.h
! n/ w$ u- v  w4 M6 T│   └── main_host.c/ D6 {4 ?  g" {4 J6 L
└── shared# H1 ~/ h% e6 S! x  h
   ├── config.bld
7 k5 j6 o3 f3 X+ E2 b* k6 w   └── SystemCfg.h3 h) y' b8 l3 [) J8 D" _% h" a, c
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。& r2 M) U% ]/ E/ d* x, T% o

; V) k* n5 t4 L2 [% t./makefile
3 {9 ~9 K& W$ S6 ?9 y) V( Y) p& V; U$ C
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
  }% P/ F% k4 ^- q7 w 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15; X2 ]$ N9 r% N
3 & J3 z+ d1 U; u3 N' I% q
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi3 _4 q8 W9 l% ], K8 d" i* m
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
, Q4 X% g* a0 P" a& w 6
) d7 F: `6 ^/ D' {) R$ s3 E) X/ p 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
8 p3 r" O4 s! m1 V7 q) R 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
5 Y7 Y7 {4 {+ v3 ^) C" S0 L 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
: n, ^/ K0 `% L/ H' q10
5 u- p. Y/ q& E, [; o11 export SYSLINK_INSTALL_DIR      \
8 d0 w5 Z8 T7 N2 ]12        IPC_INSTALL_DIR          \  G! ?( s) D; o3 `8 k2 e. m' q
13        BIOS_INSTALL_DIR         \
, F) Y9 U5 {4 B9 T2 M9 v14        XDC_INSTALL_DIR          \
! `2 d! v' O) W( Z5 Q6 K15        CGT_C674_ELF_INSTALL_DIR \, ^% f/ j8 @- Y  H$ g5 V: R" m% |" Y
16        CGT_ARM_PREFIX! ?+ ?7 I2 q" ?: j* I9 e
17
+ Z% u+ f- q, d4 c- x18 all:
4 \( R& m" C1 X8 P7 l2 e$ b) ]19     make -C host all
, W; J: v% v( b1 g20     make -C dsp all, x9 t: m. v+ A4 K. A; A
21
2 R7 g6 o6 g* x5 p7 Y+ ^, g8 I22 clean::
5 n2 C4 k) z/ y! a2 r23     make -C host clean- L7 k. h5 ^/ H
24     make -C dsp clean4 I, |. G1 ]: ~; ^
./dsp/makefile
( U: y, r. V4 y% Q# H9 ~. G
. b' ]% I* h. M$ D4 A 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件) g! Z! c6 c+ _' ]8 m( }" s
2 objs = $(patsubst %.c,%.oe674,$(srcs))
" e; |+ Z' r" Z, g 3 libs = configuro/linker.cmd
9 y# m: T) R" _8 h' b7 _8 z 4 * y: B3 h+ p/ e7 q( B, u( Z: Q
5 all: configuro/linker.cmd3 }1 `* t/ d/ I6 I" C! d2 g) |
6     make server_dsp.xe674
2 q4 V- k7 b; g 7
" `& K/ O. v0 f) B 8 server_dsp.xe674: $(objs) $(libs)3 p% r- S* j0 s+ [) \
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS); q! u& N: E1 m; e1 L, L
10 9 t1 u6 k, Q! R7 h# ], w
11 %.oe674: %.h# U2 W' X7 P, ^; }( H
12 %.oe674: %.c
; v* h3 ]+ J) f3 J" C; p+ P13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<' J# o: G, N1 ~# _) [  B4 {7 E
14
0 Z$ e& X+ h4 E1 M5 n/ Z15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld* a3 z5 N/ t2 H2 v4 Q0 Z
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
0 p. z6 w0 X$ |" T: E4 T# \17             xdc.tools.configuro -o configuro                        \: q* t, Y# }" u* @  @* {4 T
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
/ H8 K2 {3 q# Y6 g9 E% ^19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \3 W* P6 E: F# z( w
20             -r release Dsp.cfg( q, h7 s. P3 r- g
21 1 I0 D0 q( w, V, c3 D0 P0 E3 K
22 clean::9 Q5 p8 o. }4 j* O
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
0 _7 b3 E7 M0 s, C6 p24 7 w0 h# {7 W0 @8 {0 D* V8 _
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
1 a3 L1 n- P1 n5 a" r! `' k26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
8 w5 G9 j7 E4 H! N# C! n) }3 u/ X27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages1 M. T1 ~' i! [3 y
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages  L( P2 G6 U5 q, L( j$ G
29 $ y/ A+ ~2 E  V9 {1 T. Z
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
& P/ l6 B, T, q8 V- x31
- f- r( x, V) ]* T" Y! r32 CC = $(CGTOOLS)/bin/cl6x -c                        
, X) b1 g0 t8 C* f33 AR = $(CGTOOLS)/bin/ar6x rq
( i& s) i8 _! @: D& ?: r+ s- T- n34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
) a& M) h' \- Z* y/ g! m) Y35 ST = $(CGTOOLS)/bin/strip6x# L( R. O! [3 j. _, R" v! V
36   b: ~% L9 Q; C+ f1 _$ @; h! L
37 CPPFLAGS =$ ], b7 A: t1 q6 L& D
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
+ G7 F3 \. r: H0 M( u39
8 Q$ G; O5 H/ q6 `40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
) O7 v& Z; N- @7 `; ~7 {41 & B# C+ C1 v" ]+ B! @: i
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
+ I+ `! _3 Z# r7 D! I- r43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ E6 w( `1 k" g! c% H$ L./host/makefile. V2 n- M. V# `9 A

% P# R% [) o& {, ^$ U) L 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件* [# s9 o/ Q2 V! c  V2 }
2 objs = $(patsubst %.c,%.ov5T,$(srcs))) V, x0 R  [# r& O* `2 B% u
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug7 Q8 _" e' U' e2 H+ V3 e" g
4
. ]4 y: O3 z; i 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 a- H( {* v; I0 V+ g& z/ K
6
* o/ a. S: K9 {( h/ ^, G% z 7 all:- w7 k0 U1 R2 E1 q) R
8     $(MAKE) app_host
5 I: V5 R8 V( d1 J" o3 w 9 . [# h: s2 K' u2 X6 m1 {
10 clean::6 y: R! x2 q) j! H
11     rm *.ov5T* *.map app_host
) D; t9 g' I5 ^1 q12
3 R6 s2 C- X6 X, d- I13 app_host(objs) $(libs)
  o) `& _4 U  C2 y& k: _4 a' w14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS). E' _1 ^9 _+ m' o6 x
15
6 O% u# V, t8 W0 t/ a" H+ M16 %.ov5T: %.c! ?4 C" \) d8 o; n* O4 q/ y- u
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
- f# ^0 X; F( d4 A$ I4 E2 l5 S- `18
# d& `! ]0 u6 Q( g! ]19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t0 p& ^2 @( I: H" g
20 AR = $(CGT_ARM_PREFIX)ar cr
7 O# S  Q. m6 E( r3 K7 D& ]1 ~21 LD = $(CGT_ARM_PREFIX)gcc
+ H0 `: M9 H7 j# r) w0 ~) x' X& F6 e22 4 c3 t0 V' l1 X5 h
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
3 H6 ~1 c3 }# e, i8 ^24            -Dxdc_target_types__=gnu/targets/arm/std.h) q$ s7 E+ ^' L- Z
25 : e* {+ m- f) C8 P# a
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径1 S: k2 X9 a0 U$ G' R  g
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \! }+ u7 U8 F' T6 \2 J
28          -I $(BIOS_INSTALL_DIR)/packages                           \
' ]/ I5 E7 e- [- ]29          -I $(IPC_INSTALL_DIR)/packages) Q, {& K3 p1 n6 \
30
7 N( w  ]  K1 G2 @! |7 Z  L9 R31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map1 J& ]) x- s) q& k$ D! F! t
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序0 g1 I- f7 Q1 T7 K
编译工程
4 |) x8 q; k9 w' x
3 l/ |8 _' [, @' @9 o: H/ s# T makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。" z9 D/ N0 Y7 B  C; Y  ^

; {) J, z* P% C, N4 [8 d5 |/ M运行工程
$ u/ W" R' W/ c6 N- r+ i+ a1 j* V( T
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
( O" T$ c! @1 X' Y/ ]6 ^6 l8 \/ `8 q" p; o
1. insmod syslink.ko                    # 加载 syslink 内核模块
: R6 b6 E2 E5 D) `. @2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序6 T! m8 T- q6 G* N5 K3 h
3. arm_app                              # 运行 ARM 端程序
& Y: g) ?! I. c3 \  H4. slaveloader shutdown DSP             # 停止 DSP 端程序
- _7 L: z# I. n sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
! w/ `+ N3 S) u5 Q% J$ j& C 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/ ?/ ~; ?* s) p1 u8 N
- P" u) F# O5 f3 n6 L5 S  J+ j6 l  D
1 #!/bin/sh1 C3 |, t4 Q# M( ]6 x) t
2 3 t. }0 |0 k* H' m. t0 e3 v# ^
3 set -x/ u  a+ s( W7 N- G" m, m" D8 x
4 - J! P, X' J6 X7 l
5 insmod syslink.ko
9 h8 Z! u' i& l: `  @, T% n1 ? 6
2 Y7 `' }' s" i( g+ o' u2 W. U( g 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6740 z8 o2 X8 Z/ \- j; O7 y& x; M6 h
8 . d7 F! Z1 D! b% @
9 ../host/app_host DSP0 K3 ^" L  y5 z$ m! x+ y
10
5 N8 T# V" F2 @1 {) }% [11 ./slaveloader shutdown DSP
3 }: u3 T: T" e% @" ]6 c
+ o( t* A$ W" m5 H( Q1 C# _
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05; f9 ~) W* n' I, R8 p9 W1 A& I5 ?; K
建立工程3 g4 C- }& ^2 E# w! g3 Z0 p
( B2 g' U: H1 S( _: `
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

: @- R# |! L' y9 n$ |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
; A, J! I+ v- k  p7 @2 f8 b- W' |建立工程8 p8 q% ~  T! W

; W0 s( g" W+ ]% I# x( \8 W/ Y6 n$ e3 s 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

. N. |% C4 Z2 H  b( uslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
9 a$ P& t. K* ~  d0 [, U# m. yslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

5 x- u$ I3 Z$ x, Ydsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-8 18:08 , Processed in 0.046011 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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