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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
6 r3 ~' r4 G) v" L; Adsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。/ ^; e% O+ o) s$ J5 y2 t. H

% K! ^+ ]8 v/ f& X+ G2 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?- J! _  z, W1 E/ C9 C  ]4 ?& h
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程% C9 F& n7 Z6 u9 z+ \
* f* ~( R( c1 n" e/ g  i8 F
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
/ N- [: g- P8 \8 Y 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。9 y5 A" W. ]/ ^0 F8 y
 “清理”过的例程的源码如下:
. d( E5 _3 [4 U: q/ p( d/ m
7 S" P( ^0 \6 q. Q) V" K" [7 U├── dsp. E. C- y: F  A9 E5 p9 f
│   ├── Dsp.cfg
2 |- T- {0 j0 Q8 s4 t6 T1 ]4 v│   ├── main_dsp.c: e) ^) c" k- p
│   ├── Server.c
% D! g( H6 r- @0 p& V│   └── Server.h
/ ?1 E8 J! H' j5 P" o9 S├── host+ f) Z/ Y9 I2 J/ C1 E  n( q/ N" G
│   ├── App.c' f# t+ q# T8 }! p) @) A' o
│   ├── App.h
: m5 M9 _: e! m+ D" P# W& Z9 r% \│   └── main_host.c
: z4 @' J3 N; _4 l4 _└── shared0 d* t9 s( J, u8 B4 `
   ├── config.bld6 f% g2 j6 L; d3 t9 k
   └── SystemCfg.h1 i0 X% z. z: Y; \4 ^9 l+ `
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
; [7 e, a. j; z1 I( A+ `9 h: J5 b! m# X$ a+ D. F, l
./makefile
' v3 t" u4 \4 T: K! x* o& P$ W- e
8 W$ J7 e1 [8 _. | 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05* r+ p8 D( h- E- n, y/ y# m2 ^! A
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_157 P  f) \' S1 {% H8 Z$ T
3 : a3 S2 P: E  s2 F2 W$ C
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi4 a  U: P, k! _* o
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-3 f' ^% T; J9 `: ]
6
+ E. H$ s! [# W0 M 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50- C( L, L0 V% ^" Q9 W; P6 p2 V0 {# t
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
6 I# w3 ?& A9 |$ n% N 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
" s. P$ P7 q/ z7 @/ n10 ( z& d+ D. M! k
11 export SYSLINK_INSTALL_DIR      \" k% U8 \* @0 D9 _/ Z5 w% p
12        IPC_INSTALL_DIR          \: ?. s( t/ t, D, {1 s/ a
13        BIOS_INSTALL_DIR         \
% F9 D& @/ J+ o; ?14        XDC_INSTALL_DIR          \) w# H5 o$ [3 |; R
15        CGT_C674_ELF_INSTALL_DIR \% a1 X* N3 Z& C8 V3 L9 G
16        CGT_ARM_PREFIX
8 Y* k5 e3 q. y7 K0 ]8 s9 s2 V17 5 D( _4 X8 J$ ?
18 all:
6 J& t5 g4 G# [! i19     make -C host all
5 P* S5 ]9 O3 S" o20     make -C dsp all+ {) J& k( V$ V4 h# q
21
1 R) F& W" O, R( g22 clean::
/ E- F$ s4 m; C$ @23     make -C host clean  p: J  s  B. l" T
24     make -C dsp clean7 V! l1 ]5 N8 f" s
./dsp/makefile
. L* y0 U: t" c% Y& g, C' m% j0 b) g' ~/ \# [- o6 V' [
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件+ R: A! E, S) i
2 objs = $(patsubst %.c,%.oe674,$(srcs))/ ]. c( b) G% b$ a; l% Z; ~( \
3 libs = configuro/linker.cmd
* ^( m0 T& u8 l" P1 S5 h 4
6 y) G' }/ S! w; L# G 5 all: configuro/linker.cmd  j% ~& ?* ?  y) P9 I! B
6     make server_dsp.xe674
$ w: ^8 {6 D! a8 X3 Q 7
6 _3 C  X/ i. {3 r3 R5 ^ 8 server_dsp.xe674: $(objs) $(libs)$ Z# q! q5 R3 c
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: t. y+ x& K" F+ _9 M8 B10 9 s3 H- r0 ?; C/ f/ Q
11 %.oe674: %.h
) J, I( O3 U1 J1 c9 X12 %.oe674: %.c# Y1 u# d# \! b6 ~5 E! h
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<: Z$ D6 F" m( P6 n
14
! {. U$ n* h2 ^+ M1 q& |15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
5 }! \* S; v' ?" ?' y. J$ n16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
% Z1 y2 u9 v% b2 \& b8 x; ]( ?17             xdc.tools.configuro -o configuro                        \
5 U# ]7 I+ p$ m9 b' d18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \2 R) a( q" I8 j" j& N
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \4 ^1 t) U% w! @% \  |% G; o+ E. l
20             -r release Dsp.cfg# t  \- m0 J' R. o: i
21 2 W+ p/ K4 ~- {" ]- [& m
22 clean::
* t& Z  ]% |, ^: a- ]+ |23     rm -rf configuro *.oe674  *.map server_dsp.xe674: v) c7 y" k6 S+ t" S; D
24
6 q3 f$ g/ P/ |' V; e; w. E# `' o25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
- T9 y- ?# o! ^0 P26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages2 ^( h! s6 g0 [( l0 T" ~
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages  K  D8 Y# S" _
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
; c5 V8 d2 A0 V! Z' m9 a29
0 y' P0 M, Y6 f3 A- r30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)9 l) B* Y5 E. {- h: K9 f) i6 S6 [
31
8 F5 n; r% D; t32 CC = $(CGTOOLS)/bin/cl6x -c                        
1 W: \% {9 ~3 X0 i7 F* `7 q33 AR = $(CGTOOLS)/bin/ar6x rq8 x% d- }, @/ G  Y: h
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
2 `- P8 x" p* U9 A  x35 ST = $(CGTOOLS)/bin/strip6x0 D( l3 \  p. M
36
- T0 v0 d  t2 W37 CPPFLAGS =
% L  X4 S% I9 W) ], ?38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
  Y+ o1 x3 x; y- r  j39 " z8 T: N0 [0 y5 {
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
: k: K9 L) d2 O% K( j" I41
5 R9 b+ X; N  U* u: X# }: l$ d2 Z0 b42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
  _+ V$ R. W' o, o- u, ?43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
& }. ?$ D7 h: L" ~: {./host/makefile3 c* [0 Z2 A/ \, u# q3 |
4 R7 c) o1 o4 s* O* R
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件' y. X8 s9 j! H+ P, P, Z
2 objs = $(patsubst %.c,%.ov5T,$(srcs))/ C& w- R- ?+ c' Z  i3 \
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug0 K* _% K% O& e/ [, l% K# }1 A5 U
4 ; w. o2 v& v! {- z% |3 x9 d+ r
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))/ s: o2 K3 l7 k& @3 x
6
0 C- \4 N' a! P7 J+ A5 ] 7 all:7 V5 z5 W; `; x* s; [
8     $(MAKE) app_host0 C& S0 L- |9 u; T) q1 o' I
9 & m" Z# U& G' x5 o+ v
10 clean::
: u+ y: h; n4 D0 O  g- P2 b) X, A! ^11     rm *.ov5T* *.map app_host' G7 _# R  T# |5 K' v
12
, b: \* ^# ?$ q$ c& b. v) F, J7 [13 app_host(objs) $(libs)
! A, G/ {9 s5 p7 ?14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
* V8 W( t# M+ e' m3 b15
! v9 ~& w9 u7 c$ m) {16 %.ov5T: %.c
3 f; u7 b& c% q! a17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<' x4 F! F2 {6 {
18
/ g6 ?" k$ T/ _) D% u3 b19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t0 e) B7 d& V& C7 X. A1 I
20 AR = $(CGT_ARM_PREFIX)ar cr
1 k7 n2 L' Y. `9 _% x" o' j21 LD = $(CGT_ARM_PREFIX)gcc
$ x0 G3 y3 a" t( M. W22   v( K7 |) _3 N
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \/ b7 \2 Y6 @5 a2 W! g
24            -Dxdc_target_types__=gnu/targets/arm/std.h9 l' W" j1 W( |8 p
25 $ U! D4 \' Z7 T  H7 h2 H
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径' c5 A# s7 d  }0 }2 e
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
0 m  a! V; }; ]% `, k; L8 f. Y3 e28          -I $(BIOS_INSTALL_DIR)/packages                           \
4 r. e: n1 h2 P* T! B7 Q( X& E29          -I $(IPC_INSTALL_DIR)/packages  `  S* m  F  Q/ @
30
5 ?+ @1 D& Q+ J31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. J) `% s% C; U+ Z8 r( e
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序- }/ R! ]; g& ~: ]
编译工程
+ n2 @* J5 x4 \/ F2 v
, b' D0 e7 p6 k+ }, ]% a6 @ makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。3 m/ r3 n$ Y: \5 p: C

8 [  R2 w! E) e/ {) y0 c2 g* o" p5 V运行工程
3 o' D1 m0 `  L+ K* D/ |5 h. P* c) w* ^7 _% e
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
/ P7 [; b& i& {, n2 P# X( J* ^6 B- j; j6 d
1. insmod syslink.ko                    # 加载 syslink 内核模块
3 X2 E* ]# Z! R. K5 e1 W! s2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序4 R+ }# e9 s: T! G) C, G2 {; i. l
3. arm_app                              # 运行 ARM 端程序
9 K$ W9 S) z- w3 }4. slaveloader shutdown DSP             # 停止 DSP 端程序' E7 Q7 r- }( U3 i
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 2 X* ]7 M" U# B+ c: z: E
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。- r7 W1 p3 i" X$ |4 f

' h+ v1 ]5 f6 Z' [1 L& y6 z0 y 1 #!/bin/sh
6 j/ q5 o, k  g4 k' Y. S3 @  `2 Z8 e 2
# f( Y7 W# s' ?; f' ?7 K) G; T 3 set -x
7 j$ I  F  a8 g5 i2 |2 ~ 4
; r0 q% Y+ ~# @9 F" w 5 insmod syslink.ko
) o3 _& ]) `$ w/ s. ^ 6 / ?$ ~* \; o5 v- N  T1 P
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674; l- t0 B) O$ E* r0 q( w
8
. ?  l/ i9 v) b, k$ n3 b 9 ../host/app_host DSP  e+ A) |+ P$ |
10
/ v% h& B6 `4 y1 m+ I11 ./slaveloader shutdown DSP# B+ u6 ~! i! |+ A1 y) I

# O9 C8 M0 C1 t' w& x; j: q5 l
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
. h4 x  W; H- u- I  C建立工程5 y7 N5 u" e8 y% k9 A( k8 H

% f: o9 S/ {$ Q4 A) M- b 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

$ X8 R; n" ]/ W: n% n) hslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:051 `4 h( U4 m9 M7 o/ [
建立工程; U% I" _& n) ^  }; L& {
% }' D5 B" m! o; R
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

+ R7 s, x6 \& ]+ G; e0 sslaveloader 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; z. u7 w$ K- b9 G
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

) x+ e6 u( f& A& mdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 14:57 , Processed in 0.048677 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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