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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
# B+ G+ X; Q9 H  v' w+ Hdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
* d5 D, M9 z# G+ R! {# D
" U& t; O+ Z  y1 p7 R8 t4 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
& Y7 [3 [( }% s1 {
( A" g2 t8 ^+ D3 w5 @' a2 X 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
6 H* p0 [' |; l: h+ ? 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。; n. `: p" N! N$ |3 H( z
 “清理”过的例程的源码如下:% I9 n7 S; Y) F+ F( X: R( ~
+ S9 G; k; R' ?3 @2 F! ?( Q' {7 T
├── dsp
  X2 t, C" Z9 w5 j  b4 g! A│   ├── Dsp.cfg/ n% u* |  b* b7 }3 ]  L" b
│   ├── main_dsp.c$ b/ u# \1 v7 x: z; A
│   ├── Server.c
- {& e/ p+ g+ t: P+ x% Z│   └── Server.h8 a# a# l- d7 ^* D7 E$ t
├── host
$ ~7 S; h! I; ^9 G7 o7 @3 z│   ├── App.c- ^+ j) S: ~$ D( \7 c2 s* r6 c# W
│   ├── App.h2 ?) B* e8 f5 Y. V1 t/ {4 ^
│   └── main_host.c% p5 m- m, h  b; g" X
└── shared
! s: I5 f. J' L) d, W   ├── config.bld
( L5 P( L- K$ J, e   └── SystemCfg.h
. G6 X* b. ^' D1 D$ l8 p 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。6 f# O) u' u& i; w; e' I4 R2 V3 q

7 k3 }+ r8 b; \3 {./makefile, |1 r! k+ }2 H0 T) C
6 D: z8 T9 x' B0 E
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
! Y# G; h! ~- B9 ?$ u6 ~ 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
; J8 k) L- q! Q 3
; E, A. I" d; N- {, L$ x  z2 b( X. ] 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi( G  l) w: C$ p& q
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
  U: ^( G  {( Q' R' s6 H, A 6
" W' j7 u, @9 L- s; R# ^; U; r( L 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
) z2 y7 m/ k8 D% j  E% I9 i 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
1 ?7 z  ^$ F% G1 I' m4 Z 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4. m- s/ p7 @* w* q4 [" z, n4 Q
10
# T# s# @0 }* ^11 export SYSLINK_INSTALL_DIR      \- A: H& p  O, ]( _5 J; Z4 U: |
12        IPC_INSTALL_DIR          \, Y* w7 V4 [4 ^% g5 l
13        BIOS_INSTALL_DIR         \# K( L9 N$ z- e5 m* w. c
14        XDC_INSTALL_DIR          \! `, T- ?" g+ B! Z/ B1 I
15        CGT_C674_ELF_INSTALL_DIR \( I! b# B2 Q- s8 ?- Q
16        CGT_ARM_PREFIX2 L6 A7 Q* ^* B: v4 P, M
17 ( m, d+ B) d) {  g0 _' R5 t
18 all:
, P8 y9 S- {; K  Y* Z19     make -C host all
- l0 f5 V5 o. s' w20     make -C dsp all
0 t9 o: P" c7 H21
$ Y- R. e7 u- y5 F$ h2 Y22 clean::* E3 Q" c4 N% @
23     make -C host clean$ z3 a4 e8 f4 x( z: m
24     make -C dsp clean
5 f1 y4 w# ^4 [- F( |/ e./dsp/makefile5 N9 @; ?, Z# J+ Y2 b" G2 _. p
# y0 r7 B: U* c% w- Z# M
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
8 O1 L$ i4 S. r 2 objs = $(patsubst %.c,%.oe674,$(srcs))4 e; v+ C4 `# \( G+ l7 K+ S
3 libs = configuro/linker.cmd
  F. I8 c* h8 s# `8 N/ l 4 # a! Z( o# k- t2 R6 ]1 P8 K6 T
5 all: configuro/linker.cmd
- `+ a3 e4 N1 _* B# c 6     make server_dsp.xe674% ]2 b) @9 v  P
7
6 S7 o) ?* Q' o7 b( y% t 8 server_dsp.xe674: $(objs) $(libs), z% l, k" q4 p' {
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)" |7 e/ D# E! D9 Z/ @2 r
10
0 w2 I. k1 d* X- s2 f, G8 m, x11 %.oe674: %.h
- s  W- g/ O. m& e12 %.oe674: %.c
( f& n) A! Z5 t( [( C6 [13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
4 e) m. B8 A8 J3 ]7 P9 l; L14
% J- d6 W$ R0 s3 }0 c) B! n15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld( G5 s6 l3 }0 s& I" x, R8 r
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
$ ~3 C; r. W% l# A$ j3 A) W7 q17             xdc.tools.configuro -o configuro                        \
  C* B" I' o( W( x18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
' e% j* N% K9 h8 \6 r; S& O. g, `8 }19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \& N. X0 Y* p7 O! o
20             -r release Dsp.cfg+ |. b, u0 y' d. s: i2 b
21
8 u; C8 C5 i0 z0 s; w$ f# O22 clean::  {8 y( q0 B. x3 g% g; V
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
; h- _3 p  r8 u, b; d  c) l* p4 Q24
) |: }7 ^: d  f: v25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
& F, z6 f0 b+ I3 u% E: h26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages2 U6 F: f2 M& A, s7 C0 j
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
! a( R8 F$ k) A5 K/ @1 f/ X28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
8 c1 e* @& ^3 N# P" K1 j' {2 x29 ' E* R6 w: d6 W: J8 K
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)7 n* L6 Z1 N% R8 e/ Z
31
$ R1 H0 s4 c* g6 G2 E1 G32 CC = $(CGTOOLS)/bin/cl6x -c                         " w" N4 `! o+ G' h4 e
33 AR = $(CGTOOLS)/bin/ar6x rq; @' u5 E8 L% e' K! T
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi; c6 q5 J4 z, `) a# R
35 ST = $(CGTOOLS)/bin/strip6x* M( {  m1 S; s: x( d6 O
36 7 w+ e/ E6 M& s! }+ e
37 CPPFLAGS =( l+ K/ V8 U1 W4 n
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)3 Z, {/ J: v  R' r+ L5 ]
39
0 Q; l" M% \  K' t0 q. Y5 D40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
, Y/ {! f/ y; z" s: L. x* K# ~41
2 A0 z  d5 j3 m- g42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
) [) v0 J( l1 I43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
/ F+ d, u$ e& V./host/makefile
& B0 H1 X6 ~2 d* D: _/ r" B8 u: M: x
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
* V0 k& h! D- t 2 objs = $(patsubst %.c,%.ov5T,$(srcs))2 r5 e4 ^- L4 s+ R9 z8 Q$ n
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
/ p' G. j: N* N+ O 4 9 l- ?' o$ L7 m
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs)), G2 l9 j2 l8 Q& W+ ?
6 ) X, M( U$ E; M
7 all:0 K% I/ f# }* m- u$ f7 o( v
8     $(MAKE) app_host/ K3 k# C9 Y5 N; p: p
9 : y( u/ q; N' ~$ h, U0 o: |
10 clean::
7 G& E& F5 M3 m, o- y' K! x+ \11     rm *.ov5T* *.map app_host
$ M" S6 L( M. k2 \; q* A2 b/ w12 ! ?/ e- h  _/ ]3 l) Y( l: ^
13 app_host(objs) $(libs)
% M! S$ r0 `2 }5 w14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
5 i( Z; O" [# n5 t3 ~15
( M5 p+ o: ~& H+ A1 d16 %.ov5T: %.c$ x) _+ K* x2 r+ M# [) e% E, u
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<; W3 z' x$ G' j! i5 j
18 & C: _) e( u, B
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t( F% {/ C/ l) R
20 AR = $(CGT_ARM_PREFIX)ar cr
# b6 r1 s2 m! g& A9 R5 p- r21 LD = $(CGT_ARM_PREFIX)gcc1 a: L4 J7 I& R1 m, \; y2 d
22 3 _. R! E% c1 l" }
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \* k. R" M) Z2 q
24            -Dxdc_target_types__=gnu/targets/arm/std.h
( r/ ^" n) D1 d25 * |0 M$ |3 J" u, l
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
: `) Y0 p% I, \- o" A27          -I $(SYSLINK_INSTALL_DIR)/packages                        \" `4 J" ]. o$ f
28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ F+ d/ n0 v1 P29          -I $(IPC_INSTALL_DIR)/packages, Q* m, O4 L; @# _- z# ^# d
30
' u" o4 P* Q- ^# A" Y$ f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map- k6 T7 G" r/ z7 X+ M
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
7 m, o9 w& o  ~编译工程) H( x& G5 n" @. x

. o* z" f$ `; q. n( G3 [3 ?/ O makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。8 a" r/ O9 O- ~
4 D' G! `2 h2 [; [+ u. s* P5 j
运行工程
) }) `4 c( b! o
; Q2 `9 L9 V% U& q( n( ^ 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
) S3 n5 N& F/ w' ~
$ V% C; J* ]* Y  x1. insmod syslink.ko                    # 加载 syslink 内核模块
9 A6 N! G- Q% t3 U5 w) }0 I  p: Z2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序! d9 j( N1 V6 L) _
3. arm_app                              # 运行 ARM 端程序  {8 Q& }) F0 `  |! W
4. slaveloader shutdown DSP             # 停止 DSP 端程序
: e& t2 w$ G6 h9 s sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 ; Q9 S7 Z9 J% G
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
. F0 M' W% Y. G2 g2 ^" P$ ^! q7 D
0 r! E4 z/ a: H+ N 1 #!/bin/sh: _0 l5 f8 V) {  W% U
2 6 Q6 D) c5 Y, t5 k; j
3 set -x
! Y  Z9 M& T7 l- H3 k 4
2 z; W3 ~' E! J  H/ O; r 5 insmod syslink.ko3 `, `; h( l3 \3 c
6 2 [  S9 I/ T7 b$ u6 a& ~& x7 `
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
. y2 e3 R8 I$ J 8 ) v1 L8 f, u4 j( A$ T* \5 q  A
9 ../host/app_host DSP* k+ u: V* e7 q( X
10
+ U' \* o, l9 g, @* Q$ D. m+ J11 ./slaveloader shutdown DSP
$ O9 {) m8 g7 m" P" K4 {3 ?
0 c" h/ h6 E$ y2 ^4 ^
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05" E6 O2 w+ n7 p8 d% j) t; L
建立工程
* d  t0 w, v! a$ r3 |! y
* o2 ]. ]7 _( ]( [6 |0 P 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

$ Y! p  p) T1 {# Nslaveloader 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- D. h, a& ^3 t, j$ c
建立工程
+ z1 q# |, D5 |9 m: s+ a$ m) }( R* ^. b8 ^7 F  q9 ?/ L* v
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
6 ^# y8 f  C/ n: V' O
slaveloader 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
3 X+ O% |$ I/ E5 x3 E  B! Cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

7 o! E- a% o* j" e# ?9 Xdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 02:31 , Processed in 0.049539 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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