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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
; s1 X4 k' s+ Z( }4 vdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
7 G3 s' _9 P; ?- h4 {5 Y7 J  V  D9 w# \. B2 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?) F  g$ u7 t, X. F3 P* s2 m; }+ N; A- g
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程# `  V1 q) Z- h- @: O! z: e& T  X

" q  x+ b4 X4 p" b4 s+ ? 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。$ @. ]$ x+ G' Q- x% Q+ i5 ~
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。8 L' ~+ V- Y; f8 G$ Z8 q
 “清理”过的例程的源码如下:
5 e0 t) Q* R# R$ G- ~5 R* m( F3 z$ N& d
├── dsp
( m9 _6 {6 }# z2 a8 x# S7 O│   ├── Dsp.cfg
8 T' ^( k) c% n│   ├── main_dsp.c" I& I- M& F& {
│   ├── Server.c
1 x. y/ ?7 t" N( u9 ]0 Z& v+ p; {│   └── Server.h! m! n' w$ ]3 U7 I5 o" P
├── host
7 E  ^: c5 l7 m. N1 M2 L│   ├── App.c" ~, A+ _8 c) j2 d3 P
│   ├── App.h1 s2 S6 x5 ^: e: s7 m4 o! ?
│   └── main_host.c  k1 B0 d2 b( j
└── shared, W$ A5 V$ G! z3 |/ Z8 `
   ├── config.bld# _2 N) }% g- K7 U# o7 n1 O
   └── SystemCfg.h' h6 @$ W! n- t  R8 ?
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
4 z( C" V: {, }3 k& I% c! N6 u/ A- K2 h$ f$ ~0 j! `" _7 i
./makefile
# G  F1 b. I2 F% n+ r
6 v+ e. ^3 q$ Q) [8 Z: j, @ 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05& {. C1 {. y. P# `- A. O
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15, e" O. ?7 f  _3 m6 h* [& f
3
4 s; V- `: |9 q" _+ c# }( c; l; @ 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi9 x4 T4 s- Z9 k' a3 b9 b
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-! V' T! Z/ K+ d+ N0 f* B! i0 d
6 3 O6 s: L: d6 O3 ?
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50+ ~- q- D9 H6 [. x: V. b3 c; |
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_724 p* g7 {1 d$ Q9 _+ \! k/ O8 h9 W
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4+ f8 a9 H% B2 s# k( w
10
' R7 g$ T. b. p11 export SYSLINK_INSTALL_DIR      \
# P# n( R8 Y) I9 k# [12        IPC_INSTALL_DIR          \
+ d& D% s1 M7 ?. t$ X13        BIOS_INSTALL_DIR         \
4 i" x/ h" Q: T; a& D# j" Y* |14        XDC_INSTALL_DIR          \
# c# M  C: [2 Z% R+ H; t. |2 |) I3 C15        CGT_C674_ELF_INSTALL_DIR \" g' a6 H' @- x
16        CGT_ARM_PREFIX
  U, c9 g& w1 `* ~17 1 L! ^( N3 ?! G' B) Y
18 all:
/ e( K3 l+ h, H- g( v$ q. V! m! n19     make -C host all
! A* C! q7 s1 E5 }" y" O+ B7 k) T  j20     make -C dsp all9 D0 y; n* M6 t) R! y4 K; G9 w
21
" g5 V* u; L, O; b& T6 [0 [22 clean::" A( j2 v! b/ Z4 s; P. O' H% @. V. i
23     make -C host clean/ Y8 a8 V) w; s8 n8 E
24     make -C dsp clean
2 S; n$ F" S( r9 [) p7 f" n- }./dsp/makefile
7 \/ z* s1 x3 e3 O' s/ i3 P4 n$ @% s& B9 Y
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件! R2 y1 n( }/ C# x3 p3 f
2 objs = $(patsubst %.c,%.oe674,$(srcs))
! R" L7 y( i/ q+ l* R% I 3 libs = configuro/linker.cmd1 N6 g6 ~: k: B+ F/ f: C) n- `1 S
4
5 Z. _8 x3 N1 G8 R+ R0 d+ A 5 all: configuro/linker.cmd
* O7 i. v! _0 X' v: G0 H3 c 6     make server_dsp.xe674
5 u' T9 }2 }" g" z6 d" R 7
# Q" q$ c4 W2 U! f! C 8 server_dsp.xe674: $(objs) $(libs)
" h% U1 q( x4 \3 L$ i/ k' ? 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
7 p6 T: ?2 z) I) Q+ X( z9 a+ i/ s10
) n: [/ \5 [1 \# Y7 @( A. \/ }5 _11 %.oe674: %.h  A  \7 s; {: b7 E) R0 F
12 %.oe674: %.c3 G% l# H/ r8 F# F* K4 b
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
% ^2 t0 K1 A) X; A# d14
4 @- W* H+ s% h15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld  a1 K4 p' o/ n
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
: l0 l' \- Q: C! L6 K& v17             xdc.tools.configuro -o configuro                        \
2 t0 [) W3 P8 `0 Q, a18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
9 m; C( ]5 W, v& l6 h19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \! v; ]4 X7 p7 J7 X
20             -r release Dsp.cfg7 N9 v: v3 x$ g* M
21 6 h( M' d3 Z5 C% u. t: d6 m
22 clean::
! w5 G4 |9 ?$ U$ x23     rm -rf configuro *.oe674  *.map server_dsp.xe674: ^7 w8 v2 Q4 h; C2 A5 G
24
- _1 ]$ y: V; ]$ I25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
2 e  h7 L+ ~, }% x, V26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
+ u* X9 f! v# I1 g4 v- G2 ^27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages2 D# N9 w, D+ ?( j5 Q  G
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
% Y; M6 A% _. ?/ M29
( Q' R2 _1 ?8 C" A! ~30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)* n7 M3 j) i4 r' C- y3 K$ r
31 * P7 R6 v5 Z& k$ F8 O  Z. f1 t
32 CC = $(CGTOOLS)/bin/cl6x -c                         ! I9 N1 r6 T) x9 Y# l- d
33 AR = $(CGTOOLS)/bin/ar6x rq% K' N$ K7 C& i' x; X7 g! K; O! [
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi& q$ j3 C) w6 z! A# W/ H
35 ST = $(CGTOOLS)/bin/strip6x0 U0 r: M3 s3 G  w5 `( L
36
* Y% @9 ?) L8 `1 L3 N+ y( o37 CPPFLAGS =
+ |( U5 M4 N- C: q7 f/ @- Z6 U% I' ]38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
+ N' N: B7 [9 n& T/ y" G# H39
. T9 _! T, Z( X# P$ F2 @, |, F40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
) O/ ?# C( H6 c3 A6 M- s41
; k1 e( X5 ~3 `6 L! o9 Q# W$ t: `42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
+ A8 H; G6 c  |( G! M. t2 O+ \43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
4 m* N: O" v9 v4 c" q./host/makefile' k$ }# d; F4 W
9 C# _( N  g! y
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
' `. }9 i9 u9 k; W& d* M 2 objs = $(patsubst %.c,%.ov5T,$(srcs))  ~* I  t  P8 w* |+ S
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug" z+ V) ?3 ^/ U7 p+ ~( r2 R. H
4   R  {+ b* [3 m( G2 p3 o6 t1 f* y
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))8 f9 Y5 B' C: F! n
6
) M- |2 p# W* ?! | 7 all:
' J9 P2 X& j, o  h/ ` 8     $(MAKE) app_host
; I( f! R; H) W- U 9 # U7 w/ p  h+ f
10 clean::
! S/ b8 q+ L0 h. a% u- i! j' n11     rm *.ov5T* *.map app_host8 a- ]+ P% \& N$ i" P
12 / X! ~8 ]# Z" P" }3 X, `' V, r
13 app_host(objs) $(libs)1 v- h6 ^/ [7 J' h1 y3 I
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
" a; h9 b$ J: ~15
7 d% ?7 p; y- R+ W! c  U, E5 s16 %.ov5T: %.c
# Y& O, m# i* u4 U17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
- K# W  T8 \3 C7 q0 C8 i& D18 . p! d- }$ Y* B0 G5 |
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t# |5 x$ a( M) i1 t9 E  X0 ^8 `* K
20 AR = $(CGT_ARM_PREFIX)ar cr7 \4 N6 j2 a! u# j) Q% Y( W0 {
21 LD = $(CGT_ARM_PREFIX)gcc
6 A: W- i- @. M3 `* r" d22
; b& J& R. K! |* K3 C0 X% ?* V23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
; x3 G7 N. R$ @5 z- B5 D24            -Dxdc_target_types__=gnu/targets/arm/std.h. _9 k5 k2 m( ~( r$ L
25
( t, Q1 ~9 c. d$ @# a8 |26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径5 p2 U' i7 L& a, G) _% m" [
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
2 n6 N) l% J. u8 u2 s; S  S28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ |4 k5 _! D. m& n! ?29          -I $(IPC_INSTALL_DIR)/packages0 {0 j. o# T: J5 J- h6 J
30 / Y( U% _# j/ g* U. a) H
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map# P# X- V1 ^1 J; ^. o; e' S+ k
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序- f% J  A! D* c* V# N1 B- X5 H
编译工程1 z3 m8 h: {+ _% g: P) m6 ~; R
! K. l3 A; Q& @' V
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。# x+ e" R3 Y  Y" @
2 {$ l% J$ k& g; G
运行工程4 h- y$ D+ a: r2 f, {9 s
2 W/ M$ Z& e4 d1 o) h
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。9 i+ m  |4 W, x# ]- `
( i  l0 \" k; O  f$ c7 A, Z  E
1. insmod syslink.ko                    # 加载 syslink 内核模块
$ a# X6 k1 f' m0 }0 D6 b6 i5 m5 j: n" J: {2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
/ K7 L. ^7 S  x2 I. x3. arm_app                              # 运行 ARM 端程序
, C: ]7 n7 I# _2 [1 \  ^: Z4. slaveloader shutdown DSP             # 停止 DSP 端程序
! S" @' H  h! e5 `7 `! } sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
+ Q! x. l- x! k& n. `0 h( o% \; k 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/ X( n7 \* I' x' j1 B9 b1 J

' g0 k; I( F& w 1 #!/bin/sh
1 \$ }+ a3 A, B4 F. {6 v; j 2 ; x7 Y# c  M) w' R! P
3 set -x$ ?# @9 {2 D% ]4 ]
4 * c2 u' k1 O$ a/ @4 ]/ T- J
5 insmod syslink.ko
* K- s/ \6 k% [, q1 K0 d" v 6
  _; X' F/ ~  p7 k 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674$ G1 {: o! H$ z$ |3 h5 q; f, m
8
, L& Z) h, d) ]9 m2 b 9 ../host/app_host DSP/ d9 G% j# R1 z/ ]+ _" h
10
9 c. |9 S. K9 F/ z* I% q11 ./slaveloader shutdown DSP
* n; v: [' J% Z" T. U- z- X1 `
, O0 P; h( G4 v4 s
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:055 }; E) S4 y8 Y2 V
建立工程
1 g% a6 Y& r; x; ]; c3 h( S' m
; L8 {9 A8 d% S4 n9 b( C& j: Y* | 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

% h* X& l  ~, O2 i! h( Q; cslaveloader 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
# u5 t* P# h9 H" X建立工程& N9 M4 z1 R4 y
( ?% n7 \# m( ^' M+ I
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

/ ?+ c6 M0 B# C5 W- g# K: w4 Eslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2140

积分

创龙

Rank: 8Rank: 8

积分
2140
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
, c5 W  a( L$ |) Vslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
; `9 i/ e* O6 c& |% d
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-23 06:22 , Processed in 0.046889 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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