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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
5 t$ i0 t5 F: B) f& Rdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
. o1 c1 b+ S( u) n: i" f- e/ Z- M/ _+ f2 v# }5 D2 ~# T4 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?: c" u4 I5 w8 s! F% W# k& C! T2 A
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程$ r/ G) m+ P5 Y" P! w
% P; n; v8 A, W2 G; Y
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
) D0 r6 R/ U3 @! e: A$ q 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。, G$ e( O2 g( ]0 w8 k1 B  t
 “清理”过的例程的源码如下:
. H2 G2 B- B; [
$ }( P" Q7 d' ~/ {- i* r├── dsp* R. K$ ?( Z. X( l6 }
│   ├── Dsp.cfg; E2 V: e; t9 S' o. t
│   ├── main_dsp.c
" t) ]. y( h8 V5 ^" z% e│   ├── Server.c
  e8 ]9 `- L! L* ~* r4 j│   └── Server.h
$ d% X+ {0 F/ {9 K" s2 J; F├── host, z% k* i: [" p. V3 ]0 Q% P
│   ├── App.c
/ Y3 o% M4 e1 L' m│   ├── App.h- {3 G; d' X: O) D) a3 b) Q- H4 ?
│   └── main_host.c
9 A  `* v  p  Y& w- b* p2 {0 Q& p└── shared/ R' H2 T- T( g! V
   ├── config.bld
) v9 d5 \. ^3 y' E1 w   └── SystemCfg.h$ c: M/ _, |! \7 b" [$ Y( j
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
. e2 l0 N6 e: q- l# W! I7 |
" b4 [* d  O9 `./makefile
0 W2 O( I8 M; G4 U
! ?3 G& a! L" } 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05: c8 t3 J8 {9 ~" f0 _
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
5 z- k6 H/ X9 U8 S3 X/ Q/ v% J9 g 3   M$ d1 n7 O. U( A5 M
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi' l, ~3 C( S1 k- x7 [
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
' V4 p$ t) @( |. r9 g6 D 6
- l# w, V3 _& a. T. B' M2 Z/ L 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
5 X0 ~9 C, ]6 j! v& f4 Z3 n0 ^ 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
! Y+ }. K4 z1 n2 p% N, D1 z; J3 Q5 H 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.40 o  B0 ?) x; F" \
10
- ^' A) e1 e' S" Z. q  X! u11 export SYSLINK_INSTALL_DIR      \
7 ?" |: h8 G$ m& @! w* Z12        IPC_INSTALL_DIR          \
5 F& x" D% w. C. i+ E- M13        BIOS_INSTALL_DIR         \% J: P$ J4 a5 |% \: I: i& j
14        XDC_INSTALL_DIR          \* n% z1 X# I# f% h
15        CGT_C674_ELF_INSTALL_DIR \+ h5 O" |% k4 G" h
16        CGT_ARM_PREFIX
8 {6 J2 Y. u5 y7 m9 N2 P9 n2 D17
2 M9 ~2 x4 g2 j# Z18 all:! Y- I  h- A' O* `* `
19     make -C host all3 S9 P. a( Q  v, V, n
20     make -C dsp all" O7 Z; m/ l) s2 p% F! B" V* [
21 : \' o8 z4 M0 f; E. n8 ^( f) Y
22 clean::
" v, }. F, q! b- D0 I% x23     make -C host clean6 A3 i" e+ g! O" J! m
24     make -C dsp clean
: I  D. }/ X6 i# P5 e./dsp/makefile) d/ e0 ^% Y8 ]) J2 Y) `3 O/ P

2 T# Q' U- |. @ 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
) J3 u- F2 q/ Q 2 objs = $(patsubst %.c,%.oe674,$(srcs))% i7 i/ L7 ^9 w8 P2 k: h2 U, n5 \! B
3 libs = configuro/linker.cmd
2 i% _' Z& ?$ c) N" } 4 1 d6 P# o- Z) y# f
5 all: configuro/linker.cmd
$ Y! K$ G% ]- x5 O& ^! R 6     make server_dsp.xe674. m4 E( ?5 z  X2 A' g' A
7
5 q% y. w! L% y. S5 v2 v, _ 8 server_dsp.xe674: $(objs) $(libs)
$ B2 L1 F' `- o  W* Q 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)% A& e3 u6 i* ?3 n. R
10
, v: T( L. N. a0 e. U11 %.oe674: %.h
# y% A0 F% ~( s6 W5 ?12 %.oe674: %.c" g# _- F5 k) W8 ~
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $</ e+ V1 a0 _% A# t5 Y: N3 F# Y3 B
14 % \4 _/ E+ Z! m2 g8 E7 B
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld9 o" R* j! r5 e  L; \5 s2 o7 Q' U
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \' A' q. B# y$ w% R4 a# d+ v5 W
17             xdc.tools.configuro -o configuro                        \5 P( j4 T# n: ?1 a# v
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
# D. B4 c9 q- X& x/ M* U& L19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
7 A- ]. ~. b& z0 k20             -r release Dsp.cfg" z7 J# B" T, v! W  {
21
) g* {3 p9 z$ p8 ~! m22 clean::, f) W; N9 T; Y! s  z: k' N& O4 I
23     rm -rf configuro *.oe674  *.map server_dsp.xe674/ [% l& a4 L5 |4 X9 ^4 J" i" s1 y
24
9 C4 f% U( _0 w" T$ e% t25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages& }3 R7 ~$ n3 H; _
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages8 u0 W8 {% I5 E6 q
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
' e9 D, E; f# @6 n. F* c4 e( R$ e28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages& Y9 A- o& O  I! r( n* A2 o
29 1 z9 ^7 C8 e: l# c: n) |
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
2 X( ^. J7 }, \3 X31
7 R" C* _0 u8 f32 CC = $(CGTOOLS)/bin/cl6x -c                         " J3 U4 H; n3 X
33 AR = $(CGTOOLS)/bin/ar6x rq
" g/ `, R+ j' ?! U6 R34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi' W/ y- g! V3 H
35 ST = $(CGTOOLS)/bin/strip6x* n; g# V! n, r7 b; O2 F" p2 `
36
+ O. x; J/ I9 e( h37 CPPFLAGS =
. H  ~8 k* [+ U38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS); }1 o; E# f+ u: i& l
39
8 j) J. W( h; x3 e5 O. Z% O( l40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)* s9 c6 ~& ~/ x) d% j1 I
41
. t, f* c- f* c; Z! U42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     % t6 i8 W  x- d( z
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
) M- N4 n5 m# U2 q/ J./host/makefile- G" K2 [( _; c& u
( N- T8 J" V" F* ~9 z7 H1 \
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件& w; Q5 }4 c& K# {! q/ C4 w' r8 R
2 objs = $(patsubst %.c,%.ov5T,$(srcs))4 Y& c: ^- G! Z$ i. y4 }2 M8 M/ V
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug3 }$ c! l7 }  N5 P: ~
4 / w; {0 t- Z2 c3 E. r
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
. A! y* D" v8 @2 s# O. u 6
5 L. v( d6 M# z7 j3 f" ] 7 all:
% E+ m! @5 c4 u( w: T 8     $(MAKE) app_host
$ r9 i7 r9 t5 _! t1 s0 ~% ^! @/ ~ 9 * m& l: {: O" r4 b  I1 p
10 clean::, V/ |8 y7 J1 H( K
11     rm *.ov5T* *.map app_host
, Z) N0 x$ k( }9 g! W& ~6 \12
+ |, s0 F' ^! V( Q( e13 app_host(objs) $(libs)
0 W# r% Y8 v1 u" D14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS): d, E* f6 b7 y3 g$ I' a
15 / k- a9 v4 V0 U/ t* v
16 %.ov5T: %.c
# O' u/ @$ v  q1 G+ F17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<  F: Q/ a& n4 X. `8 q  A
18
" Z' F! v- B$ J1 H: V: @: O' [19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t" W  K4 T2 z0 f. X! v, Q
20 AR = $(CGT_ARM_PREFIX)ar cr5 p0 _/ c, X$ [" M5 k
21 LD = $(CGT_ARM_PREFIX)gcc* x1 q% B- S  L* Z4 @) X2 \) ?
22
% G' R2 J% z5 j; D7 g' ^23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \/ V' a& |2 K+ I  H. i
24            -Dxdc_target_types__=gnu/targets/arm/std.h
' W+ _, S( G- ~. K& t; r# N) }25
# k! N6 ]2 J6 T8 C5 s. g: K% J$ I26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
+ f0 c, e4 B- f  U0 U$ X( C27          -I $(SYSLINK_INSTALL_DIR)/packages                        \# s! I& `. v# r, ?8 ?1 v
28          -I $(BIOS_INSTALL_DIR)/packages                           \
5 H1 O: J# T$ z  h29          -I $(IPC_INSTALL_DIR)/packages
; h3 y/ x0 C$ y5 ~8 F; k. N30
( [& P+ {) u! E: U: Q( P9 h2 d31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map( o9 N6 d5 s; u) p
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
. I. `0 R& E% }编译工程6 S0 X) f. L( }; w. }7 \

" Y5 u8 g" k( w8 s, a4 {2 s( X makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
7 Q$ R! y: k3 [% W9 X! ^8 R
' {( ~  e8 b; X  R5 f- y6 A运行工程  t$ {" D  g! w( u7 I5 d% {# b

5 g, G2 t1 h- Q# s: h7 g0 b5 Z 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
. [1 k- A8 ^) r) z* O
' A. @  }1 ~' |' \' m( K1. insmod syslink.ko                    # 加载 syslink 内核模块) `# D9 y6 P, V& z0 u- o/ u
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
- E7 j+ S6 R- H# e3. arm_app                              # 运行 ARM 端程序
1 Z4 ?; J/ w& Y( r4. slaveloader shutdown DSP             # 停止 DSP 端程序, `; G! \# L* g& v
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 + j* k8 y: ?  T" v$ z+ k) Q
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
: r0 o0 N4 n1 |, n9 q! ?! v! t, o" w
8 P  h# E7 t2 o- M 1 #!/bin/sh# R+ O9 V# N) u. Z8 u0 ~! Q; Y8 v
2 : S6 M# W0 N* P: {% n6 _0 B
3 set -x8 n# F$ [" k; t# L* R9 [5 ^
4 $ B" w6 P6 R! @( V7 \
5 insmod syslink.ko
: R% ^6 ~  r8 X. H5 R  n 6
! P1 F- @, x0 ] 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
5 ]* k5 c# L$ \% w* h 8 & M$ E" ^  x* f
9 ../host/app_host DSP7 e7 j- {# w; i
10 8 _/ \' k2 k$ A3 {8 H; S
11 ./slaveloader shutdown DSP3 ?4 [+ m  a4 Q" ^- ]  D
5 e- e7 F; c. X; \6 N
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
( H/ s9 t1 I: t, U* I建立工程* d" }" `* e& k: b5 l7 F
& R' X1 x0 {0 x( J4 p) [
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

, M4 A' P1 D: `" T+ K- Aslaveloader 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. z9 l% [% q! m
建立工程8 @! K. @6 I2 h

; i# ~/ `* d. v- E* K. } 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

# f$ c3 w) A* ?5 Vslaveloader 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
# X7 I3 n% A* @: s- Aslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
8 J- W: s; m( I* X
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 07:00 , Processed in 0.044327 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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