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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,  I' @& Y+ e+ O. {
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
1 v+ ~' O' W  s$ N* l* w4 C6 G7 {# L7 G/ P
, T  |( E& ^+ w: w8 _  e1 Q$ v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程3 S/ F6 `( a( E9 h, B- [  b) f5 Y

: J; f) E1 }2 D! n- O 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
8 G( g' c7 p% d 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
4 r6 A6 b+ |  z9 Z “清理”过的例程的源码如下:. p! e( s, c1 c
2 n* E) ~* |/ y2 m: O
├── dsp
" w/ n8 H1 h* t8 F. G6 e) I│   ├── Dsp.cfg" f5 C5 S% n/ h5 x- X! p+ [
│   ├── main_dsp.c
  A; O, O/ s5 Q3 l  U0 B│   ├── Server.c
# r5 e3 f" q1 m5 H$ ]# B" A5 J+ ?4 P│   └── Server.h
( ]$ Y, ?- w" a) f8 A├── host
  U! q# M' d' `$ b3 _4 U│   ├── App.c5 L0 `5 e5 r- k4 C
│   ├── App.h' D8 S5 Q: r5 Z* K, a/ s/ D; P: ]
│   └── main_host.c' t, B5 X# L! X
└── shared) o# p" X5 a' z4 _! {7 ?7 R" ]
   ├── config.bld
3 r( U3 K# q9 W8 B  C# C   └── SystemCfg.h1 X( F- K( f" e. j; ?0 ], x
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
! Z: d0 F9 a& E, E, O! @9 n  V+ W
./makefile8 Q. \3 P& Z- ?' ]% L" Y2 e7 |8 {

4 U) x8 B! M) d9 Z+ x 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05- a- C, H2 [& W: K. W
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_150 O3 B2 e: |, d! {2 Z) |
3 + C3 Z, ^( ]! P, k
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
+ \! A# K  A+ f1 O* L; j" r2 \ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-% K; x# g$ |/ b8 _
6 ( Q$ E3 [- c& |- s
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50) }6 R% x! F0 V* z* Q+ Y
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72+ d/ a+ R1 S' M# S" K/ T. X2 x
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4( N( T( C( q9 K" d! h& }# P- F7 l
10
1 }4 \; j9 e+ z8 O11 export SYSLINK_INSTALL_DIR      \
2 o8 ^( @7 ]& J2 ?# I2 n% a/ r12        IPC_INSTALL_DIR          \
/ E* b5 G) v, m13        BIOS_INSTALL_DIR         \
( P' Z; o+ P# X1 x% y# ?14        XDC_INSTALL_DIR          \% R0 K9 E1 v4 a8 z7 O; N" J
15        CGT_C674_ELF_INSTALL_DIR \+ o2 _0 U. m, z2 a, T- F
16        CGT_ARM_PREFIX6 v1 w8 @( i& q  h; w: B# \
17 % _. l' @* l$ Q/ G! a- ]
18 all:
- b" ~6 ^. I! x% }2 c+ J19     make -C host all
; _, w2 i# J& A' y. y, u: P20     make -C dsp all
# H9 z8 U: N6 }2 A+ d21 $ o% i9 m) n! d0 V% Y. @& N- @3 u
22 clean::
: N4 f5 z/ {& M# l5 F23     make -C host clean
6 t: B# j0 H  h) ?0 v  w24     make -C dsp clean7 ^% a+ Z6 I$ b) o4 _
./dsp/makefile$ E* l( o3 X  ]0 z1 [" Y- }
% a( B$ q) X  P. n. T# f! b9 I7 j) y
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件2 R! ~5 l" B) A. d$ L/ B) X- N
2 objs = $(patsubst %.c,%.oe674,$(srcs))
: F, I0 c' y2 |: J/ u 3 libs = configuro/linker.cmd
, ]$ I' F# W3 W5 V. G  P) Z. h 4 ) g( S5 ?$ o6 X0 y- [
5 all: configuro/linker.cmd% V, J' B* V8 g) o# x$ `
6     make server_dsp.xe6743 O8 j3 c! |$ A* l& v7 U2 v0 }
7 3 }  ?+ i$ U8 E% M, [; o- |" Q
8 server_dsp.xe674: $(objs) $(libs)
$ H7 q: Q$ S' A+ |+ ~+ o 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS); m+ `7 B& E+ K9 q* s7 L
10
3 i. q0 V3 r8 R& g$ e+ ]2 l11 %.oe674: %.h+ j0 b. f( ]2 Q
12 %.oe674: %.c3 ^+ M  @, T1 s
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<! l% R! s* L0 a0 B: u5 r0 S! m
14 : c! s* e: m2 D5 v+ \- X
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
) I. }' T4 |+ _8 ?# |+ ?16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
+ O4 X+ j6 ~9 S! g" a17             xdc.tools.configuro -o configuro                        \  z* l# J/ y/ A" k
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
, }3 N  ?+ v! z# y7 t19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \- g- y+ i' d4 K5 b$ c. k; s
20             -r release Dsp.cfg
+ L0 ~: C# s+ O$ X3 N: T+ e$ |21 9 S5 P; S2 U. O& ~8 F" ?
22 clean::
) V' x0 d- |! P3 e! i3 W23     rm -rf configuro *.oe674  *.map server_dsp.xe674
* T, L# c- W: |5 s3 v* T9 t24
  G. c: d9 H/ n2 g; L3 G) Z1 Y25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages: O' S4 W: _; r' x5 K
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages7 a- @5 |4 C; m
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages4 k- f' X* P* H
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages3 ?3 z, p  Z) Q0 d6 ^# `+ O
29 ( c8 r8 g3 Z' f! q8 ]
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)/ @) M9 [; S- {& u, r8 @
31 . ]7 L% W0 @' k, n8 d
32 CC = $(CGTOOLS)/bin/cl6x -c                         : _: M* A- ^4 I. C$ j% d7 W
33 AR = $(CGTOOLS)/bin/ar6x rq4 O; p  A7 ?/ m8 k
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
9 g! u2 `- ]( l/ U3 v/ M35 ST = $(CGTOOLS)/bin/strip6x
( [9 ]2 v4 O. |36 : ^, ?$ M7 h* G$ W  W
37 CPPFLAGS =
# `: y5 x; a) m! a, m6 @( o/ i38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)9 F; L( Y' T6 G/ j
39
9 A6 P" T, L9 c0 |; x# x40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)- y$ X( P; k4 L' D& f
41
( x% |0 U$ q3 ]/ L: [# |42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ) g# v( n2 {4 M' k) |! b+ ]9 p
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序. |, a- S+ e2 s& n
./host/makefile1 n: ]$ q; _, q% ^3 }5 M3 C
2 f+ Y# d. T& b8 m7 Q2 f
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
% {; |& u; J. I5 \0 ?2 ^ 2 objs = $(patsubst %.c,%.ov5T,$(srcs))5 ^' b5 U" a, I4 f
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug) L2 X$ T8 A/ I, ]. S' S3 @0 w
4
2 e' ?+ ^4 k9 f4 _4 d 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
% k7 T) P, g# K8 p  j) Q 6
1 R% j1 h6 h, @% n 7 all:
& h" F* u3 ^+ N, s# O& D. g6 H# T 8     $(MAKE) app_host
7 J: \! g6 y$ m1 l2 j% T, n! I; w9 ^ 9
6 J" u" {0 y3 U1 C$ U10 clean::6 I/ t6 [+ ]. I( X( A2 \
11     rm *.ov5T* *.map app_host5 s- j# c6 K- U; V9 Q2 M7 C# Q
12 " o/ q* u* U/ L6 o6 m! V# v6 @
13 app_host(objs) $(libs)1 ^- U# }6 o' @7 c- X
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)4 [# c& e9 w7 @4 \* ~9 J
15 $ Q3 _6 @6 G) a, {; H
16 %.ov5T: %.c
# O# \$ ]  j* A17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
+ K9 d6 E5 o/ A+ O# U& E5 J! {; K18
2 \3 o* j$ x+ T0 E7 @19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t' Y+ r: A5 b5 d" k5 r3 w
20 AR = $(CGT_ARM_PREFIX)ar cr4 `: S) \. i7 a5 G$ V, {3 |/ x7 ?
21 LD = $(CGT_ARM_PREFIX)gcc
( O& @( K) P0 D$ N22
2 `) g  d( m: E6 x( V. R23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
8 u$ u# z" u/ }( q) v7 y- y8 s+ E2 D* x24            -Dxdc_target_types__=gnu/targets/arm/std.h8 Q- \0 l3 S6 H2 T. k8 z4 q# {. f' x
25
& E" R* h( v1 j0 e26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径5 ^6 n# \( c7 l% G, @; H# G# I
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
5 |/ G) }0 b! J( H28          -I $(BIOS_INSTALL_DIR)/packages                           \
+ ]4 L& y- I* x( g2 e8 ~3 P29          -I $(IPC_INSTALL_DIR)/packages
; D: R+ p0 A0 v( b! N30
8 h! ^8 ~+ h8 s: B1 e31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
% a8 E; A: {1 b7 X32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
) ]$ }6 {4 z! ?4 x编译工程& b- j- H& @# Z

2 ^: Z% ~; d  r( |" \; q1 m/ m makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。9 \# h6 ]5 l( M6 ?

9 e3 l4 _! F& K2 y* j运行工程: ]3 \0 a/ q# `$ E" d# I

, p+ ^# Y) {! E+ `( \ 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。9 ~/ C9 m! I0 W# p

" P+ v7 A7 E4 l. C5 e1 O9 |3 I1. insmod syslink.ko                    # 加载 syslink 内核模块- c; Q, Z) b7 _& S! Y
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序* q9 R5 ?+ w/ v+ k4 P
3. arm_app                              # 运行 ARM 端程序0 E' e3 B5 {, {$ ~$ n* o* Y3 ?
4. slaveloader shutdown DSP             # 停止 DSP 端程序) }, }# |6 a5 P3 S2 \% R. x0 i
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 . J$ M# t: W& `' y& E
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
* O2 H) h$ x6 P/ [  Q; C
! ?8 k  \1 \5 {2 v9 Z  n 1 #!/bin/sh
! H2 }3 e4 C. q0 S+ o# k8 }1 l 2
/ o" a8 [* ]# s; x7 Y 3 set -x
; u8 r6 t4 _. l 4
) i* t7 M; B+ y1 a/ X 5 insmod syslink.ko! Y, d8 d4 V0 S0 I& q% L
6
$ Z7 }1 z: C: c. {  q. t2 E" K 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674$ u0 ~9 f( z3 N6 m& S
8 4 F& B* q1 F) x1 I- e; q# w/ K
9 ../host/app_host DSP
, z! I0 }& M$ h! J( ^10
) ~) d, g  _8 q. l11 ./slaveloader shutdown DSP
* Q! ^$ e# D* g4 c5 D5 E0 o
! r% L% b2 n6 U: F! N( U! u9 b
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:057 o/ M( o, B# V# |9 g) z& m
建立工程9 S. l' E9 v6 o1 {

7 A$ q! s+ |) H7 G) J4 s' f 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

  R: X% K0 E, k/ r! Vslaveloader 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, y) k) X! `! d* ?4 \) i
建立工程2 n8 D1 j' i6 K: S' E' P

  P2 u5 t: k; V. |9 q- r 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
+ j  T9 O+ I+ D  u& W2 d- j
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40) e. D  t. s( O5 |: ], w
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

6 y2 I/ r/ n* h9 F3 o1 @dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 21:53 , Processed in 0.044450 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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