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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,4 a, L. W+ F6 k4 m& c! {# Z8 F
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
. r0 Q& B( p; ^. t5 W6 p$ I, v. ~/ B9 S/ {- j& |/ D. R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?5 Q3 ~7 k& \5 @' u! n
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程* ?6 B5 |8 @4 q1 P+ Y: {
& L9 M$ i, g  _# G/ Y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
; C" q  i% f: q7 d7 ^& n 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。; U& V" N& Y* q( q, _7 Y
 “清理”过的例程的源码如下:
: B. J' }9 |) r" n  M* @/ {8 }1 C
2 i1 g9 u/ u, N3 f├── dsp, q2 e2 ~5 e  J' {; O
│   ├── Dsp.cfg
" N( U3 Q7 y  r8 m│   ├── main_dsp.c
5 T& z7 v" _& K9 S1 \' V; A4 \│   ├── Server.c3 e7 x# y: k7 R1 L
│   └── Server.h
! ]% r# B  C, d& Q! c3 |9 V3 \├── host
6 a. S+ e/ F  K2 Q; w* `│   ├── App.c
5 A9 _& [% l& _' Z0 I8 y, k8 F│   ├── App.h
2 H- t/ S3 g& K3 }$ v: G│   └── main_host.c
* U: }' j" `3 H# K└── shared& Q* Q6 Y- ~' R* }& F5 P7 [
   ├── config.bld
$ t" O' h3 q: o9 w: f   └── SystemCfg.h
" l" [9 X. B- D% C8 q* F  Z# l% o 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
+ I' R" ?0 U' h" c0 L, I" U/ T" o( X8 K7 e! |
./makefile
; a; x, k0 q1 Z" {3 p& q, @" Q) l* h, j9 A0 K* J
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
& N7 ]( x! T+ v. e( m. U" Y5 q 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
1 j2 J4 Q! Z9 F; R' Z6 w; z- r: e 3 6 I1 o8 F3 j- j  H0 e/ \
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
) v6 U! U' @) l3 F, [: w 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
) P+ m1 w* u8 d; @8 {- J' F: q 6 9 h, X% y1 F( C; R4 u# _
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
# N) w  x* ~! l  B 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
& h. K: z4 {0 ^8 G: P2 H1 X 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
# T2 u( j& W9 ^8 V* a9 K9 p10 . I7 I" P( i" S+ y% t
11 export SYSLINK_INSTALL_DIR      \
. H( B& n/ H* y( e12        IPC_INSTALL_DIR          \
3 g6 ?5 c% g( u- J2 ?; s* l13        BIOS_INSTALL_DIR         \: N! A- y( ?. L5 u0 Z+ G4 B
14        XDC_INSTALL_DIR          \. N4 v) T. k& h, ~$ {
15        CGT_C674_ELF_INSTALL_DIR \; Y/ G2 x$ E2 D$ D, i
16        CGT_ARM_PREFIX
) e; i; y$ ~6 B+ _& g+ n9 e17
  n! L: F( C  i2 r& @( j. C18 all:0 ?7 t1 r; E$ d, U
19     make -C host all
, p0 G/ t( l' Q. N+ ?20     make -C dsp all
; A+ k* f3 ?5 M& a8 `! d21 % c5 H: D  e: Z2 E( y4 Y; Z: y
22 clean::6 J: q: ?# e5 L9 ]$ r! a
23     make -C host clean. ]; z0 v) A6 L4 _, _5 h
24     make -C dsp clean  s6 X5 x" A6 ?7 v) \, m$ ~. F9 ?
./dsp/makefile5 ?3 v4 [' k/ @

  j( J) p1 t* {) ]/ B. F8 f 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件" h% {; F* }9 B, W( c
2 objs = $(patsubst %.c,%.oe674,$(srcs))/ F  @1 u" n- B7 Q  k; g
3 libs = configuro/linker.cmd
$ i: r- W0 [; J 4 - e* P0 f9 n8 `' A1 X5 H+ y0 ?
5 all: configuro/linker.cmd
1 a4 ~" g5 r# A( O2 O4 T 6     make server_dsp.xe674, D* U3 R0 s& K, @( \7 M6 C
7 " y$ }: @0 k4 ]
8 server_dsp.xe674: $(objs) $(libs)- K. t; E% I: {% P0 y9 q4 B
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)- J5 f2 o# M7 k
10 & s; \* C, i1 N3 Q
11 %.oe674: %.h8 F# Z% a, H$ f4 b+ h8 s! X
12 %.oe674: %.c
* w; Y  s8 ?; i. x" p13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<8 l- H, h( U; ]
14
2 E8 w( p+ F9 W15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld" K$ b1 Y: E$ C" Z! v! E
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
9 ^4 \5 |8 `% k6 Y! E17             xdc.tools.configuro -o configuro                        \
5 G7 {! G) {+ t; y7 [+ y" X2 k2 u. G- V18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
6 L# a0 U- ]) Q" |9 @7 y19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
2 i* G, p& i1 t, }20             -r release Dsp.cfg8 R$ a4 m2 s5 ^$ {* r
21
1 o9 h4 V; J8 y- d) ~2 E' F22 clean::! n  ~' Q2 f0 v! M: c+ i" D
23     rm -rf configuro *.oe674  *.map server_dsp.xe6743 S- G0 O. d. L
24
; O, @! ~& B) P0 [" z. A25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages! b6 z$ Y& ^3 u
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages. j9 b2 b% O' s: T
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages6 H# t6 b* D! ]. V; V& b: a5 L
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages" j" S% U) x$ j" D2 w6 N
29 3 |6 Z/ M( w/ s% y# a
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)" I+ `/ g+ Z4 ]. B! J6 c" E" H; v/ r
31 % U- z) u6 m  J1 g
32 CC = $(CGTOOLS)/bin/cl6x -c                         2 V" b: b8 k  B& N
33 AR = $(CGTOOLS)/bin/ar6x rq
' b" J: \( }* G34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
' l4 d" @7 I& D& I35 ST = $(CGTOOLS)/bin/strip6x' A( T% L& C/ J* \5 O
36 - E& l& [/ A7 j0 `3 l% b
37 CPPFLAGS =
. n" H" B) @& {, L3 Z4 M* L2 _38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS), _  O: S. J$ M
39 - _% ]7 U) h  X2 G3 ]! U, b# i
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
6 V2 z; Z# @* Y! W. ~; m9 e41
/ X) u5 K6 ?# `% x  Q; ?42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
! f; A3 a  E* {7 n. @43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序+ E$ z. W# J/ d
./host/makefile$ i) I0 R0 E; u! r/ t3 D

8 _& T+ g" i0 Q3 n& F 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
( A+ j& Q% X' }+ `' ?- t 2 objs = $(patsubst %.c,%.ov5T,$(srcs))# t4 _% Y% w+ K7 J* k
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug5 w+ B0 `) Q. ]! Y
4 ( `! u$ ]: q5 c/ F4 V# N1 j
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
" |5 x, S. ?9 j" }& Y6 E3 u6 W 6 : e' E0 A+ _# \  K: i1 m
7 all:
% ^( l- |, r9 f7 v& Y' z) |5 C: p2 Q: W 8     $(MAKE) app_host5 I1 Q4 F8 Q5 ?
9 * i$ x7 V' b1 z! J5 `$ S+ D$ m
10 clean::
5 \& S, B/ J1 w, J" {) b11     rm *.ov5T* *.map app_host  R" u& }9 A, s  g
12 ' Z/ a5 Q0 x" F$ g3 I
13 app_host(objs) $(libs)
- _5 w! Q& u" Z- [14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)3 j5 p' @% A  H) c
15
8 ~; W# G. z  J% m16 %.ov5T: %.c
1 L4 l  p: a1 c1 [6 ]" l) S0 V: J* ~17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
- G& e: N3 J6 v% h8 e18 7 m3 t2 K* N/ O9 E) H( ~
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
9 A( e) }, B) ^6 ]7 {20 AR = $(CGT_ARM_PREFIX)ar cr8 N+ V& `3 H/ J+ n6 u; \
21 LD = $(CGT_ARM_PREFIX)gcc! Q8 Q: t& G% F" p1 x
22
; d! x! M% D# f* a8 M- {23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \( h5 A  c# H9 e; M! C$ J) x+ ]  z
24            -Dxdc_target_types__=gnu/targets/arm/std.h
, b$ h* M/ }2 o6 w" `, S) A) m8 @25
! E8 y  G  ~6 |26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
9 o9 ?' ?" L8 |/ ?& K3 ~, s27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
% k' o! Q0 ~6 O28          -I $(BIOS_INSTALL_DIR)/packages                           \
; u8 |0 y- t" P2 W, N! G8 j3 G29          -I $(IPC_INSTALL_DIR)/packages
' U' w  Y* w4 N6 ]( X30
1 N, A, x1 j7 K/ F31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
* l* A/ U$ u3 K/ c32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
4 k3 j. H! j- S* J( @( ]& d  [编译工程$ w% E0 M- J- x1 W% n& `

2 t8 x0 o9 M& x4 J+ F makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。2 U2 Y' y) j6 k3 O
1 }/ v. r6 t" @) ~- r
运行工程
7 B1 l7 l% i6 Y* R0 J; S# J# `: B, c+ p2 I$ d6 V* ?
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
# u0 f' ~- w+ k, @+ M. }8 e6 K0 t- s  H, e0 V. |: K* |
1. insmod syslink.ko                    # 加载 syslink 内核模块
3 A/ N+ Z- Y! }! f* S8 j9 Q2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
6 k# g3 @; \6 L& r. n: t3. arm_app                              # 运行 ARM 端程序
  d7 {4 g/ s) G1 @5 w4. slaveloader shutdown DSP             # 停止 DSP 端程序
# A2 d, I- N4 Y2 g6 E# j- ? sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
) z" X4 L$ @) @% o: |/ k. Y2 ?$ v 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。# {/ h! G3 z2 h) b' y; K* j- Z

, B, o0 h8 n& P, @. o, ? 1 #!/bin/sh5 u2 j& O5 t4 j/ F' B, W
2 8 f1 g' o7 O' O
3 set -x
' B* h' }2 q- u: D( t7 f# s) E 4
: a, q% I& ~4 G9 P6 s0 _ 5 insmod syslink.ko
$ \; e  [, ]# S! X, y 6
6 E- _( U! _" L1 \: Y% K# L 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6741 t1 n7 S/ J1 N9 [
8
# ?; o2 d" k0 g& w5 n# E 9 ../host/app_host DSP. }- x# Y+ ]+ H) k7 d/ o$ ]
10 7 d6 ^' W- T# i* N; o
11 ./slaveloader shutdown DSP
1 u1 _' }  C3 p( `, F( A2 h0 A% a9 z6 r% I
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
1 }$ M- N, f( R) w: o: b$ B建立工程  @" J" F& p) P
0 V3 Z) D4 ~. F- z- v5 o
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
- N# a  N+ I1 k0 j) M
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+ |/ |: f- s" g9 s
建立工程4 Q  P- _8 X4 {/ j' h( y0 ?; J+ o( c
$ [/ O) k6 V3 H& d) e
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

) k/ t+ b. m+ u; D) {2 o: yslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2088

积分

创龙

Rank: 8Rank: 8

积分
2088
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:401 |0 s' v6 d: C+ i( d
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

" x2 \/ I! @# V1 Zdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-15 22:00 , Processed in 0.043254 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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