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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
! X  m1 {( Z& [, ~7 n  _dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
! s7 l2 M+ g) \
/ b3 @7 w# r1 [( \! P1 l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程) o2 E& j2 S$ E) O" _

- \% e1 P& u0 P: }+ c7 B* m, [) \" n 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
" U* |) Y) P6 F6 e  u  S 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。4 ?/ t5 q) I3 V$ \
 “清理”过的例程的源码如下:8 b% w1 w! O+ f2 v. Z( ]
! x8 h# A! [8 V3 H
├── dsp
' Q3 ]0 c/ }  @1 ?) U│   ├── Dsp.cfg
0 l& L" y2 F# D$ E7 ]) K│   ├── main_dsp.c3 G! B/ ^% `9 q. [* n
│   ├── Server.c
9 Y8 R& E" t, g* q( k- I: J│   └── Server.h  U6 h4 F6 m7 w
├── host
/ Q1 k: @) i! h6 Q1 b! m│   ├── App.c, J- @* w" B7 |6 I. h5 V* x3 j
│   ├── App.h6 B) R4 k- a: [
│   └── main_host.c
+ X( m8 b/ K4 v' `! I$ m" Y1 @└── shared
6 z& t( ?* n( U) K! y7 B   ├── config.bld
1 Z0 Y$ Y' p: D" {/ ^( y# [6 W! J: L   └── SystemCfg.h9 L9 T# |! m7 Q% O5 q
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。7 R; r" {' l! {5 }3 \& G7 ?$ U
: M+ D0 ^0 u% L# M( |
./makefile
" i: [/ `( r  i; N2 W+ _2 |* J: w! Q8 Z1 U7 h* H
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05, h; k: F, J" A! U
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15! [5 N- ~! ~9 F/ P  o
3 5 i: d! j  a1 Q+ ^! A$ G/ c/ m: _
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi) [2 n' i1 y1 H
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
/ \9 K0 u% W- r4 P+ S! E 6 6 d- e9 ^# n1 K  b3 h( `/ P
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_501 V. U: v' `2 M& K1 P' x4 c
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
4 U, I8 v1 i* |: Q9 ]$ ^2 S! T! ^ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.41 `& c3 Q& q& n1 H
10
! S- n0 C& p( C" l11 export SYSLINK_INSTALL_DIR      \
- d5 C0 H+ ]( S9 Y. m12        IPC_INSTALL_DIR          \7 p5 Q' w" d% |% h5 |/ ^5 T/ Y
13        BIOS_INSTALL_DIR         \  G4 D$ ]0 i0 W% I7 b7 ]
14        XDC_INSTALL_DIR          \
! m! d+ K" y7 H& U15        CGT_C674_ELF_INSTALL_DIR \2 i- Y7 |0 \7 N4 F% s- \
16        CGT_ARM_PREFIX% s$ s, Z" @1 a( d; Y0 ~
17 ( s) v6 `, b( |& ]6 G% n
18 all:; j3 t1 T6 E$ l: W" D4 o+ b  z. |
19     make -C host all' V' r) H! g, ~" F& F5 J0 B
20     make -C dsp all" _0 ?  ?, c* e6 B7 I/ a
21 + h% }$ [0 [4 w; p! K- O
22 clean::: W1 y2 h' |2 o2 ~( F" ~
23     make -C host clean
1 {% S/ M5 J) v2 L24     make -C dsp clean% b( F2 [6 l4 }2 @0 D! D9 T& l( A( W
./dsp/makefile
$ T1 Q1 @; ]9 N1 w( z0 B
5 }; ^9 [  }  j8 f# k 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件: `; W6 s' \% R8 I% _
2 objs = $(patsubst %.c,%.oe674,$(srcs))8 Q1 |) w/ [2 n8 {5 Z
3 libs = configuro/linker.cmd8 ^' L" T+ u2 v* }5 `2 s
4
) S- z, ?  ?* x$ W1 G+ \* D 5 all: configuro/linker.cmd, v/ G6 R6 J, k% E' @9 L
6     make server_dsp.xe674  B0 M% K& k' q' p% Z
7 & _/ K2 t4 Z! H1 F
8 server_dsp.xe674: $(objs) $(libs)
( p' t! E9 b8 d0 Q" l5 q) a 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)* o6 d+ s8 c8 b% k, }  u
10
1 B6 S' o% |, E1 V& H& @11 %.oe674: %.h
1 F& w( B6 p" K9 ~12 %.oe674: %.c
3 [; u% q( r% Q. @6 u13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
5 B7 `; o0 K  I2 r; ?3 e14 ' A8 Y' Y# W3 W! q0 m1 o
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld6 S, A5 X6 Y2 G9 d, u2 A
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
* A. ?7 b# J9 @, e6 f6 r17             xdc.tools.configuro -o configuro                        \
: B% U- J! q' j$ f18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \9 \. b, G/ R9 ]+ V3 `, {6 w  K
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
7 X1 [6 \2 C, u- @20             -r release Dsp.cfg
& V+ J5 L/ u& `* t: B  }21
5 R8 q" \5 `! v1 A2 \4 I$ N22 clean::
: Z" V9 D; T6 d, r23     rm -rf configuro *.oe674  *.map server_dsp.xe674  v7 ]! t3 k" z8 V- q+ W
24
1 ~. [5 x. J' \* m% ^25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
% k/ J, M4 J1 e' H9 |# u26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
( q( N& f+ Q% O, [+ m" [$ [8 N4 G27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
* ?$ g) q  t, S( A; \28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages0 U4 d8 h9 ?9 A# [' q$ G  F) |
29
' o+ a& Q0 z0 D+ Y* a) k30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)2 g8 k( D3 e: m( s/ W
31 ' d4 ^2 z9 ]  F0 f& y1 q
32 CC = $(CGTOOLS)/bin/cl6x -c                         2 g! e6 R: e) t) N$ w( w4 x
33 AR = $(CGTOOLS)/bin/ar6x rq. r, y; w6 A4 j; d
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
" U. W) v3 k0 |6 b+ D( I* V35 ST = $(CGTOOLS)/bin/strip6x
" l' r" n( s; r2 I" z& G0 g36 1 u; c. A7 _; ]0 W7 n! e' \
37 CPPFLAGS =3 `" n8 I  z& f9 e. G' P9 r5 D2 e& R
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
$ t6 p2 J% q1 ^% Q7 g# ?* V39
# x: G/ A# l2 s/ |40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
- r' v3 N, W1 ]41 5 p: k( b& ~. d5 u7 m) z" Y1 J
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     7 j. S5 V3 N' ?' v  x2 Z
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序' t& ]9 V; M5 [5 y! L- y7 x
./host/makefile4 ~( o3 u) c5 `
6 O! n* @* b3 `& \, v
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件% b* D$ B8 J& G) x: b- S
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
: A$ a! K4 i1 Z9 ?/ ^ 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
8 b  l8 H% d$ F4 M 4
3 j4 a0 ?( f2 T6 B+ H( B  t 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
+ u. G- ~- r- ~ 6 + G$ r* A1 Q4 r- ]4 i& O% K/ O
7 all:. E7 a& n6 O% j3 r
8     $(MAKE) app_host9 R9 |9 ~6 I1 Y
9
9 s$ _; k' @* ^- D! z9 q10 clean::! ?+ ]  v+ ~) U- I
11     rm *.ov5T* *.map app_host
- N! M( b9 i5 {) C8 C1 g12 0 z  C1 B* q/ p  q- r( L1 U) x
13 app_host(objs) $(libs)
6 i  Z6 r5 T" o- q  R( U14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)0 G& {# M* j- K+ |3 t4 d$ Q
15 ) _& o* J6 I( \6 }0 v) i  H1 U
16 %.ov5T: %.c
: Q  c4 j. G  Q* v% m2 ]' V# i( w17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ o1 Y7 e0 o: y. \- S, L! l: [18 0 ]. z1 }9 w  g( H: w% ~( H
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t- S7 U/ ?8 o' j9 q7 j4 L
20 AR = $(CGT_ARM_PREFIX)ar cr' U+ l9 \' k- \8 J
21 LD = $(CGT_ARM_PREFIX)gcc
2 n- W: I8 M& w' o9 _: x22
( Y  F; @# n  c+ F: ^23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \! |6 n0 A6 V0 }% n
24            -Dxdc_target_types__=gnu/targets/arm/std.h7 [5 u* m+ K- U! E
25
" ^, T- o, b( T( g7 k8 l2 W! e26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
4 {* I" f9 W/ w; x1 z27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
; [5 s, O/ g; h: U0 O4 C28          -I $(BIOS_INSTALL_DIR)/packages                           \: ?/ V: E) ]! `; N9 h
29          -I $(IPC_INSTALL_DIR)/packages
2 w( U9 Z& _' ]30
' X' O/ ~( w; w31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map+ M$ ^6 z- Y* v1 K1 I
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
7 z; {* X$ Q' d" d9 ~* [编译工程
) E% i9 O* q- D9 l
* u- W/ {% |3 z6 Q5 [) N# e5 | makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。) U( f- |  v. v5 n% K& \

( q* f! `. T# }, {9 r' @" `运行工程' r6 H% i! ]& t6 w- ]* f: Y: c: k
! u2 n  L0 C  _: q- E" _9 t( H0 T
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
! d; z. I% ]; T& n9 F+ a+ g4 ?* L& }# K$ R! e7 {! c8 `
1. insmod syslink.ko                    # 加载 syslink 内核模块; l$ G8 F7 D. `2 y& x7 w9 y( {
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
# }* \7 e, j8 S3. arm_app                              # 运行 ARM 端程序
# Q4 f( j* l$ ^! d: r8 G" c+ w& G/ j4. slaveloader shutdown DSP             # 停止 DSP 端程序& }  L; J: w% f* {* F) g: B
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
& r* n4 X0 O/ J& ~ 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
7 b- J; x6 l3 _7 r
" L4 w1 q9 t/ P/ i 1 #!/bin/sh4 ~; y' j+ I; F
2
7 W8 r8 L4 ?' Q: q8 X 3 set -x
/ T& {+ A7 o$ y0 Y0 n; A 4
$ i# L( F$ ~7 P; r7 ] 5 insmod syslink.ko5 E* u* f) d; D% O: m
6
2 @, D& W7 U- l7 |: @# g 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
9 O: u- V$ c2 G. a! f 8 5 T( b  x' T3 k) O
9 ../host/app_host DSP
7 y7 ]# s  ?, R; s: s9 N10
/ }. @( X; d$ J% G! H+ h) X% W6 f- p5 M11 ./slaveloader shutdown DSP" {! R* [  n1 }; T$ c% h+ A

4 ?1 o# F! ^$ o% |
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:059 b8 |+ H1 x9 D% ^# C4 [
建立工程
0 v4 J9 e. c2 r' e) [7 {' j: T% B8 d
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% |' i* x; k5 z$ c
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
3 O! [' F- s) f$ H* Y8 x建立工程3 A& W4 g) j0 k* q3 v) z$ |! T

8 U2 S1 f' k( `! y1 N5 x' q 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

1 Z) k0 y, ^( N4 _$ R/ C  Tslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2138

积分

创龙

Rank: 8Rank: 8

积分
2138
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
3 S2 l- |7 M0 c: g/ Mslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
3 ~* l7 I& O0 ^4 e0 Y% }
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 04:00 , Processed in 0.047125 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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