怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
* b2 g* D! D1 Q0 Q1 xdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。6 }6 H- b& s3 B1 ?; a2 x
/ m' y' w) p1 n9 W7 y4 k7 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
3 z6 {/ j, g! Z9 q5 s0 J6 E
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
$ j. W6 ?6 }3 u" |* q0 S7 @# Y3 ?6 J7 I& i" E
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
# @" o  X, [8 O6 O 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
* l) D# ^/ L) ?9 V) l “清理”过的例程的源码如下:# R+ z6 a2 w1 w5 t

7 d1 U: y! ?2 j+ h) U├── dsp
7 i* m% s' d2 {# H4 m$ Y0 ]│   ├── Dsp.cfg
+ X7 O& ~5 e4 _6 }2 d  C3 H2 Z│   ├── main_dsp.c2 n9 {2 S3 [& v
│   ├── Server.c* e9 L; ]2 {8 @( W& {
│   └── Server.h5 L4 n6 P$ q6 |
├── host9 c3 k) [5 y# ]4 ?" V( t* n
│   ├── App.c! K7 Y: A) [6 I, s5 Z& E) z5 Z. C) w
│   ├── App.h6 v0 l. y4 p4 C/ i+ P! Y
│   └── main_host.c
: {; Z) w$ `- v: t# S└── shared! a1 }# w4 ~2 F% P2 ^2 T  z
   ├── config.bld
9 }& g7 J1 a/ N$ f' I- c( n; C   └── SystemCfg.h
; d! |: b" G4 N2 y 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
) `+ L% l; G* O7 Z9 l% f, L0 ?
7 j, ~6 A& p7 y; R  @5 Q* z./makefile5 g; |5 S$ a# L. e- f
  F/ D' e& D! f0 p
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05  G/ a" n( R$ Z3 A8 o' B6 u3 Z
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_154 q+ a4 V) Q2 B
3
1 S3 M- s2 j/ w* H2 U 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
) i" j2 Z) j( R: m/ o  w$ e" }2 h 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-( s* p1 ?" h* n5 w
6 % n. S5 }/ Z' z+ T8 I7 ~  f. R
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50$ j* C; t+ n+ c, `; t8 p  c
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_727 q  m, Q* Z6 k5 |$ S+ N+ i6 C9 f
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
! h' C' v% @) o5 Y0 H& Q2 b, s. t10
( {8 E* }  S/ l- J# K4 t: T0 \11 export SYSLINK_INSTALL_DIR      \6 x6 i. b# M1 W- N8 w
12        IPC_INSTALL_DIR          \
, o. y( {; ]) L4 a* y& I13        BIOS_INSTALL_DIR         \
( q6 B2 ^* c+ `) w  R+ W- v14        XDC_INSTALL_DIR          \
& T9 p7 L3 {! W5 h0 X0 M& x15        CGT_C674_ELF_INSTALL_DIR \  W' @' J; G. L% s: E" \
16        CGT_ARM_PREFIX  `8 V% U  t. M
17
% I4 F8 j( {$ F( g' x& H$ @4 v8 ]18 all:
3 G! C) f* O- F6 h5 ~19     make -C host all
2 o. o5 z* q# W; F4 \2 I* p# O, c20     make -C dsp all1 _7 K' I) `; c3 R
21
& N, V% g! c5 ?7 v- m+ m+ L4 c22 clean::
& x/ x0 Q( M1 g: s23     make -C host clean  y& J9 `, j3 ]2 ?+ H
24     make -C dsp clean9 f) T8 j. G, C4 I
./dsp/makefile
  w) {  ~: m6 u7 J# G, Z3 U8 G7 t
/ _& K; `! t; H$ q2 T9 u 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件- i" w  Z7 j% E& N
2 objs = $(patsubst %.c,%.oe674,$(srcs))
9 o( W& k5 A5 O+ B3 i2 S4 M 3 libs = configuro/linker.cmd
5 ^0 N2 J2 V9 s% U% P$ ] 4 - t# v6 f+ {, d; }* E$ M
5 all: configuro/linker.cmd3 x  @& s/ f# g( d+ d
6     make server_dsp.xe674
# `+ d1 r6 [$ W' P" m( u" c: U8 x 7
# u( Q, E. P1 Z4 a7 ~ 8 server_dsp.xe674: $(objs) $(libs)
7 n" Y; ?% t5 r/ a5 u- ` 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)! P9 D! @2 u1 b& {. F; U/ P
10 ! {% I7 @7 X; K6 v+ p2 R4 U
11 %.oe674: %.h6 S# K; I5 D/ `7 o: L2 J1 Y
12 %.oe674: %.c+ M. s6 F8 u; s5 F! Y
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<% g" {% @* }  y$ l" i, q5 Q
14 3 J- n6 S1 [: K/ f$ z
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld' I! S3 _5 ]1 ?) Z, u4 M
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \5 G; Q8 r7 c" m
17             xdc.tools.configuro -o configuro                        \. l9 w# v6 ]! j# O
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
1 i, |, g* K! R- I8 M6 x4 p19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
" ?. t* k( \$ ?& S20             -r release Dsp.cfg
' d& x# Y$ x* x0 |1 |- G3 \21
4 I& ~0 H0 H) g4 w) u) [22 clean::9 P  l! X- u/ C; N2 x: Q) g) T& u
23     rm -rf configuro *.oe674  *.map server_dsp.xe6744 ?/ u1 j! }8 e
24 + K0 m- H; P# n' |
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages9 Q$ c  ]1 A: U" Q! C3 n# s: o
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
# c/ n4 q: S0 |6 b$ B9 l27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
+ x/ {& u$ r6 [7 M, d9 ?28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
, A) u0 @- L# b  r4 }- I29 ( Z3 z4 `$ o$ _/ k' h
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
( z9 w7 j% p8 r; a( k8 a31 : t' ~4 J6 q9 c  R: k& Y
32 CC = $(CGTOOLS)/bin/cl6x -c                         * q, o- m* E9 o# i6 U2 r4 t+ j+ n1 @
33 AR = $(CGTOOLS)/bin/ar6x rq
! Q/ X5 s$ R/ O34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
7 P) g9 M% B! }4 Z# W35 ST = $(CGTOOLS)/bin/strip6x( p/ w9 e  [( o& Q/ }1 `
36 8 j( ?4 V- I0 v3 K- c# ]4 U
37 CPPFLAGS =# l4 c0 u9 @& M4 ]- b; f% C
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)% i# {3 s# U+ z# Z  t& E7 }
39
/ ]5 U8 O5 Q: r3 q) w+ O7 \40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)3 x" S; f$ W  @* C$ Z& A& D
41
. r6 N& Q: n  ~) s2 R42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
' T' T( q- q( O" @/ _43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
! s% `0 I& @' r% ~5 j5 I7 x! g./host/makefile: e$ F/ S5 i  Q5 K8 b9 x) @
7 _& s6 j: l0 m' |. ~4 w& v
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件) \$ }, Y9 D0 l. f8 b
2 objs = $(patsubst %.c,%.ov5T,$(srcs))+ E) H- Y4 x! N% q0 C& `
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug. I. [$ t( P' K& s- H8 j9 I0 s
4 $ ~; Q/ t% R1 B4 z2 \' V) R
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 H0 e4 g7 A, R
6
8 I: t0 w8 y  U# }5 |, H1 r 7 all:( N  B( C+ w2 R* d. F/ @
8     $(MAKE) app_host' T8 x; L3 T* K+ Q: C% T; j
9 : H. s9 _" T, B9 q" f
10 clean::% \3 r1 y, ~1 I( ^4 G1 T
11     rm *.ov5T* *.map app_host
4 D3 d" I+ U0 x8 u12
0 U) A7 Z. q0 D7 D8 u13 app_host(objs) $(libs)  g! {( h/ A+ Y4 a2 |
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)  D, R. q! J$ A8 t
15
' E" S, m. k' F- Q& c16 %.ov5T: %.c* G. o  O% k, T8 ]7 a: ], B
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<) `* B  h4 V" T$ r; t2 t$ ?
18 - r9 z7 r, d( m( |0 b( T2 q
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
  a' ~4 p; K6 J7 [4 j20 AR = $(CGT_ARM_PREFIX)ar cr
5 E  D. H+ A, V0 Q# y21 LD = $(CGT_ARM_PREFIX)gcc
- n( ]) Y3 b5 S! a& i% S2 l- b22
/ v- @+ p/ D) _' V6 b! Q! B23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \$ U7 u) A+ ?$ t7 O! X
24            -Dxdc_target_types__=gnu/targets/arm/std.h/ ~2 o) B$ z6 s6 e* ?* |. L
25 0 P& E6 y$ F$ O3 Z( r! q
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径3 t/ I; G# l+ ~: E$ I8 C: d
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
+ S1 c9 a1 ?1 ]5 w/ r28          -I $(BIOS_INSTALL_DIR)/packages                           \* A. k& @- ?( @
29          -I $(IPC_INSTALL_DIR)/packages
9 j* R- k- u4 _30 2 P: f( M7 O  p& B: K- N
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
. d4 T4 I" J5 W+ y* q0 m0 M32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序. s7 d' j- A0 u; ^
编译工程8 |( `9 C. }; g7 [; Y+ s# w4 |) }

4 w# y8 D% d/ e2 Y makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
5 h1 z+ M3 I% P0 B- k9 E3 x7 n, M2 y( P) I9 K$ [! E6 ?
运行工程
0 G0 ~. O  O" x) Y
& y4 J: |) s+ C4 @1 c6 s4 H. ^ 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。7 f5 f5 D- |3 P5 E4 ^+ c
4 F. Z, g- d* ?& x) _
1. insmod syslink.ko                    # 加载 syslink 内核模块$ @: ]0 h0 Z* I
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序( e; Z/ ~+ N+ o' f
3. arm_app                              # 运行 ARM 端程序+ q, K; f9 s5 S) s
4. slaveloader shutdown DSP             # 停止 DSP 端程序
9 }8 y. h% N* N+ w+ @4 b sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
3 x! L0 F$ x' m& ?/ o 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
. A& T, R5 |5 |+ \% R
0 o. e7 x. G( ^+ I6 p) F 1 #!/bin/sh
9 E+ z- x$ ^& C  s 2
' j' ?0 l; e3 F/ M  P% G0 U" W! e- n 3 set -x
, M0 \# f0 X6 S; Y5 J$ A 4 ( J* v3 I  ^3 O  B
5 insmod syslink.ko
0 M0 {& G, x, p6 @/ L3 f. P' I" C 6
+ j8 N1 H! s; o- D0 e! e 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
% o1 U# G( O, C 8 , \8 m6 S5 g5 `
9 ../host/app_host DSP# o0 M3 H" ]7 T# F) U
10
* ?( m5 C" [7 Q; W7 T# K+ g11 ./slaveloader shutdown DSP! W' N' K( b( f7 T% d& E% g
( G3 k; g  Z6 h/ |
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:055 j2 S; M" |+ E+ A$ r" U
建立工程8 V8 I' }& X* O) {. G1 v
# A' D. d, N$ p2 W
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
0 N+ {& O: b/ w2 b
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. H2 j- U0 o$ Q$ w5 }! R+ l* `
建立工程
# C. w3 h- U& q" i/ w8 ^
9 U. X0 R. i7 S% j( d! M! C0 Y 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
$ u1 W' z- L2 v9 p
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2190

积分

创龙

Rank: 8Rank: 8

积分
2190
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
$ t3 V0 a: N; `- H) Islaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
6 \: e# D& m8 j9 W$ A/ s( O
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 04:08 , Processed in 0.042550 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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