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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
' M1 T' X  d9 V( t' `0 X9 Jdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。$ I1 [) }9 v3 T7 j' S3 `8 m

5 k  v" m  u3 @- Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?8 J- w; S5 d+ X+ M( P
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
+ ?/ t. `" o# l: }! D4 _# i$ z( |, C8 C
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。& ~$ b1 K# U' |, G( e) \
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
, Y5 C: b: _2 R9 l: D6 @; A “清理”过的例程的源码如下:) A% [4 o, R8 {4 C2 L

/ \" H1 g2 u3 R/ S1 ?# a├── dsp, t+ ~' d$ }% I9 C5 j: B$ D
│   ├── Dsp.cfg5 d5 |* V4 p3 I4 g  _
│   ├── main_dsp.c
, }4 K+ Q3 \7 ?. u) ]│   ├── Server.c
' X" v. S  l0 P2 _; m" o: H│   └── Server.h; ]" S( Z. d+ j- o( U* u8 D2 m
├── host
/ V$ q& l" T/ e9 S+ o9 Z  T9 f' r- \│   ├── App.c
9 V) ~1 S- r' |2 o│   ├── App.h
$ @( N% J! P0 K! L4 k  o│   └── main_host.c
: w. m- V) C; r6 x└── shared
5 [: O5 K( E5 `1 }   ├── config.bld
2 y) |* I* ?  B$ Z6 q   └── SystemCfg.h6 |  V, f% }  c! g% s) p
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
  @% f9 Y; j5 K" `2 w5 U1 {- h! v0 B7 g: {; K6 X
./makefile, N5 i0 a% l0 K0 R

$ @" U  p  s3 B' k 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05! @# a) D- B# \( M! c' i) j
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
$ T7 a- t$ _. Z 3 & U  m! k: c, H
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
" Z, z# A: m' w2 O& ]! v 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-" L! S8 d( N+ {. X4 M- o
6
) ^* g0 g9 f( T2 q* D- R 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50$ j" S& K; z0 M% b6 M3 u9 l1 q. [$ l0 p
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
$ d# o0 N+ R9 D. _ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4& s7 N! X( T1 ~7 a9 a% K
10
; [8 R$ {* Z! u  P11 export SYSLINK_INSTALL_DIR      \
$ N7 A0 {' d/ s7 ^3 ]; F12        IPC_INSTALL_DIR          \
  ]$ z- f. l- D9 I" p1 h13        BIOS_INSTALL_DIR         \
3 [& l- y2 \( o. }; q0 J14        XDC_INSTALL_DIR          \7 C/ o. T' O, w5 T1 l& r/ i, O7 K
15        CGT_C674_ELF_INSTALL_DIR \
/ m1 a* f+ [* M4 Z# q  r16        CGT_ARM_PREFIX
. o  ~5 j3 `8 x( Z17
4 q& h) p  n3 g! Y/ H- C18 all:
- `; ~7 E& F1 g0 j2 R" E& [  T  ]% ^19     make -C host all
: _/ o/ e! h' b6 |5 L20     make -C dsp all
$ ^7 \  o" t* p. N) H4 e21 ) p4 [9 C: h3 O8 g% O
22 clean::% U' @( f8 @2 {
23     make -C host clean
* Z9 F3 @$ a) x" j- B7 q# q24     make -C dsp clean2 G# a& U( A' ~: g! R
./dsp/makefile
  U7 J( g1 O9 V; }6 P- v! @; Y/ k1 q, ?: S' z) p# G
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
3 E8 _; M9 e5 f% x# E 2 objs = $(patsubst %.c,%.oe674,$(srcs))
2 Z- F: y$ s3 ]# ] 3 libs = configuro/linker.cmd$ m! h& m$ h9 r1 o% W5 i5 v% K
4 0 o# a1 V5 N* x0 T+ h
5 all: configuro/linker.cmd
" e# S$ ?5 Y" l& A" g5 S9 Q 6     make server_dsp.xe674( S2 P3 A0 Q, W: m: R! i
7
) }8 t( P3 K( o- x2 ^' B8 ]  ` 8 server_dsp.xe674: $(objs) $(libs). G! F' |8 ^: _5 a
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)+ c, W; w6 {; H! G1 D6 X
10
: E) L1 ~' o: @11 %.oe674: %.h( ^/ v: A# ?. i$ f: p+ }
12 %.oe674: %.c
! Q; u9 p; o3 ]* {8 |) v) b$ i13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
5 {4 q) P, w2 }/ Y14 & h; d& a) U# z. p1 A0 ^  x9 D
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
4 Y% l0 o, S6 z8 E16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \4 V' q" `2 \% v, Z% W# o
17             xdc.tools.configuro -o configuro                        \
, H9 J6 G9 F' ^; h& l- P: D18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \, L+ L: t% y) L7 r! c
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
, t, }3 l7 f( }  ]: A* V( j; c- G20             -r release Dsp.cfg
9 U5 k7 k3 W# j. h8 T21 : i" r5 l! M* s4 c
22 clean::
3 h. M  A" H+ Z: p! g5 J. a: a23     rm -rf configuro *.oe674  *.map server_dsp.xe674$ y! A( u% e7 W( T8 B
24 ) w# j2 u9 u7 e
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages1 B) H; M+ r+ e. Z4 f; A# g6 r" ^
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages0 v! V! t' E, Q  P) q
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
5 U! Z6 G8 B1 {28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
; O6 D! I. J+ k/ C& u29 7 ^+ o, t* s3 G: [; ~2 v
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)$ w  s9 ~# ^/ |& q% I, N4 Y
31
1 B$ x# l' H+ @9 j( J5 U  Q$ [1 x0 Z0 o32 CC = $(CGTOOLS)/bin/cl6x -c                         ; F% {( v% }8 C% ]9 Q+ ?7 {, Y
33 AR = $(CGTOOLS)/bin/ar6x rq
5 w+ s. X8 Y* T/ m+ S34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
8 o' r: f3 o# x4 e35 ST = $(CGTOOLS)/bin/strip6x* T+ V! p9 ~2 X
36 5 i7 Z8 J" n% D* k7 [% q
37 CPPFLAGS =
  B1 Y1 y6 v0 `% C8 `38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)) E9 p) D9 S7 g& V1 p: ?0 w
39
2 E; s- {9 b8 k) {" X8 |' m) K40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
! P9 d+ I& ]4 h2 Y) n41
* L& d9 C4 a5 \. T42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     / d. h% m$ m4 v( }: i! P* u" [- U8 {
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序/ n1 }" h: P' \2 L
./host/makefile
" t  s2 R  t1 y* ^+ O) X  _5 u7 L# i& d
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
, N8 S" ^+ q0 s. w' \ 2 objs = $(patsubst %.c,%.ov5T,$(srcs))( y* I2 f3 L3 m2 r% d$ ?
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
; H! S- D! ?: ^( H 4
0 P& g8 O( W+ t/ ~4 b8 \ 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
4 Y6 H6 N# E* w" K4 K1 Z$ t 6   W7 d+ l0 _1 g9 m  I. W
7 all:4 k, t, r, J/ E0 c" L9 e6 K9 O9 a
8     $(MAKE) app_host' e( Q5 T0 j/ J
9
& N: [/ [% g0 L+ Q+ [8 Q8 f2 r10 clean::
! B  ]" w& X4 H) ~8 I, p11     rm *.ov5T* *.map app_host
6 V/ {2 \5 x) f8 m# U( S12
3 H' J6 S" k7 Z! N13 app_host(objs) $(libs)
+ x: }* N# c' {+ _* [& t14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS), c7 R; M: g# A7 U1 d: y. s. g+ P
15 / Q7 q7 {. D# ~
16 %.ov5T: %.c
, k0 e% R  f7 B3 {% I17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
' d; ?4 w) |; Z  O! H4 Q2 B18   @/ T% @+ ^- L$ S- [+ O+ p/ ^' U0 X& c
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t* C+ w+ j6 \1 C- {6 J
20 AR = $(CGT_ARM_PREFIX)ar cr
+ O4 U8 t& D# P+ r$ Q% n21 LD = $(CGT_ARM_PREFIX)gcc% n* J2 G% \- J: C6 B7 L5 ]7 q
22 6 W5 e) `2 c! k, t& Y, H+ K1 F: W$ Y
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \! \; u* {" e6 F/ B
24            -Dxdc_target_types__=gnu/targets/arm/std.h6 T" u5 j+ y% A: X) C$ n6 L, i
25 & R* @' z" N0 ]/ B
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
: x. Q  J6 h7 V  _8 |27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
/ t6 ?$ y: t# v" u0 w28          -I $(BIOS_INSTALL_DIR)/packages                           \
7 o8 W8 d" L2 p- a29          -I $(IPC_INSTALL_DIR)/packages
9 F/ {) V7 K( B; i& y30
4 S- p& f0 k7 f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
& {& q  e" |1 j5 u# F7 M32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序. l$ @% }2 x: f
编译工程
9 l; `6 F: r7 K. I# h" \9 V6 u( [* e3 c
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
; [; n9 _& [+ w2 p) H4 Q; U5 p+ l/ L! F1 a
运行工程
1 n& b  k: u5 t$ b' X( f6 N6 \, b# v4 ?) @- m# Q  ?7 a
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。, Q) K# @: X- f3 u9 d8 c

) T4 s; ]# \* {1. insmod syslink.ko                    # 加载 syslink 内核模块
6 A: y+ U* a/ j2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
$ [9 G" o7 N- R/ i3. arm_app                              # 运行 ARM 端程序
6 w3 W9 ?$ C4 b; V5 M+ ?4 v4. slaveloader shutdown DSP             # 停止 DSP 端程序
- ~* B/ F6 ^7 @) j$ e! B" b+ ] sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 % h7 z/ @' m4 ]& Q+ {$ y3 w
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。+ k- [  l' u3 Q! b, g% J

3 m, B. z3 L0 _# `* E4 f/ h: A& A, E 1 #!/bin/sh; M7 {5 j$ v! N" v5 |* L: E
2
2 V) U5 F# i) Q8 @$ h 3 set -x
  P% l. E; G. a; K8 m$ T- H 4
, [  [9 p/ k( Q  \9 N 5 insmod syslink.ko
" j& ?$ X4 d" V+ r% m1 P- ]# Z 6 6 i2 G( K, [1 k) O
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
) d0 z  m5 C+ d, K: j$ D9 c# M* U( ^ 8
4 A3 y" Z; s$ y) y6 V. c) n& T 9 ../host/app_host DSP
* \4 J; B+ \3 p10
% m/ N& s7 D; N/ C$ C+ `! [11 ./slaveloader shutdown DSP
) e3 ~' H) e2 f- |2 t7 c' Y0 T, n. S
+ a5 P$ ]+ c, B" _
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:056 w4 o. ?; @$ L0 s3 n: `
建立工程5 l6 X" I6 x$ D8 U- R* o% z, `
& g, _+ W$ }* d: y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
& X, e& @& S; P) ~9 {, z  Y
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
6 F8 `0 I; v% `' W; u: x9 q建立工程' n" L& T9 ?0 A6 t9 b' C9 Q) ]

. q# ^5 m1 p. o 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% N* B$ Z3 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

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40, A, t3 \% W0 y; H# I& i# }; _
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

8 V5 ?- |" A% L" [dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-9 19:45 , Processed in 0.044846 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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