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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,: V! t, [6 m, c5 m' t% x
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。* w/ L) U* K, L3 l

  p. B- H( }  o5 ^0 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?) P0 I, h, s0 K/ v$ I8 S: m
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程" `  Y6 G4 O6 h0 o" q

, k, q3 |; ?. l% R2 {" R 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。$ o3 L7 r* I5 R# G4 `4 O+ x! I
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
; U# n6 @+ @1 K/ _ “清理”过的例程的源码如下:6 E$ ~  H2 v% {1 G
! }1 k. T! s& ~- g
├── dsp
8 K: j$ @2 U+ }! P' u│   ├── Dsp.cfg* }6 z4 Z7 S, P. j9 M2 v
│   ├── main_dsp.c" Q0 d: Y% K1 F+ P- c
│   ├── Server.c0 K' n) I2 o) L% z  f5 o! @/ C& W
│   └── Server.h
: R1 o1 k0 ~, i5 m2 b├── host
9 C( W  z  k9 M: B4 v+ b│   ├── App.c
$ ]. F+ v5 O( t│   ├── App.h
; f( R' [' z. E) D. e# R) W$ K( m│   └── main_host.c3 j5 U, a" |, F0 `
└── shared
/ w. i3 t6 T4 o2 P5 Q6 o$ b   ├── config.bld
' t0 r: k- i% y! A; f, g   └── SystemCfg.h
. f; n+ C, M' ^; m# } 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。' h1 N. h; v: T, O* t+ N

# p# a8 r$ O6 S: y& M: X6 E./makefile- n7 b. @# v! M# p+ G4 V
0 v8 R* b. V5 u1 M$ h8 J6 [
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_058 @2 B* y' I, S
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
8 W$ x* m" a& q 3
( P+ u6 v+ ?5 M+ m8 }5 G1 Q 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
$ H: `3 m7 T5 Q( d 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
$ x; _$ T/ P/ ^8 w2 W/ M8 G; ?" v 6
/ [5 d! e$ n/ E4 ?+ ?. t 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
9 h) Q+ Z2 O, h/ R: q7 w2 a 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_729 |# f+ |1 c3 n
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
2 ~  C4 r2 V( [10 2 _7 F( ~4 u* p- M- J- k
11 export SYSLINK_INSTALL_DIR      \
/ G8 v2 I% F' B9 m$ D% `) f12        IPC_INSTALL_DIR          \, ~5 U! M" R: ^% O; t, w
13        BIOS_INSTALL_DIR         \
" B+ o* m/ F; k14        XDC_INSTALL_DIR          \
8 n$ u1 _, g, Y3 z7 P15        CGT_C674_ELF_INSTALL_DIR \8 u3 K# B9 u. I  g1 I
16        CGT_ARM_PREFIX
  E& i7 ~; y3 k( C. u. w& y17
* M9 {/ l4 A6 P5 E& Y9 ]18 all:
+ S2 Y# `7 K8 r; W. i# a7 ]19     make -C host all/ d4 E* z  n0 Q( W- s2 G# X1 n' p
20     make -C dsp all( }" Y3 e7 q# W" J) u5 Q
21
4 \0 R7 Q5 c+ p. `! h& x22 clean::
; I- ?0 P3 R5 n8 @7 @- e. t, I0 T23     make -C host clean. g' b* h# K# A2 e' ^& d' |+ r
24     make -C dsp clean
: [4 z' q) G# s! b3 D./dsp/makefile3 V3 x5 k7 X# y) `
/ ^7 N# M  A8 O" W
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
; m  D( u8 h" I 2 objs = $(patsubst %.c,%.oe674,$(srcs))
1 a" ~/ ?+ x0 P 3 libs = configuro/linker.cmd5 G( [  r$ g! V9 r3 Y( x/ h
4
+ L; h8 L( d! N% W/ B3 d+ \ 5 all: configuro/linker.cmd
8 T% }2 f; b! w/ F- _( J 6     make server_dsp.xe6748 s7 H( D$ Y9 [- I, X$ B3 z  _
7
4 m0 ?  n$ N6 Q& `' R 8 server_dsp.xe674: $(objs) $(libs)' N8 W- W8 X6 g0 Y' N, x6 o3 `/ I
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
- g- ~0 C, S" m5 t2 j8 A10 7 y3 O- X" H) l+ {  m: R4 |5 m
11 %.oe674: %.h  I/ i/ P4 }* E
12 %.oe674: %.c
5 |! C- V' n4 r. E) c13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<4 m0 w  L7 x$ J
14
# d7 O* g; M7 P6 x# O4 S3 E( {15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld' L7 k0 y( k& O; p: O' ]
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \& U. Z- \! }: p
17             xdc.tools.configuro -o configuro                        \7 R9 o/ \0 F6 ?! O; i6 {
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \2 I5 @; @4 v. ~) x& g4 T9 F9 h
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \) Y% {! M0 p' k& j! d* C
20             -r release Dsp.cfg
. N( F2 n! B& o7 X/ j21 ( @1 X, Z) Q: U
22 clean::" r" f! D7 ?3 K( d5 ~" a
23     rm -rf configuro *.oe674  *.map server_dsp.xe674, A- S# K* I) b) F
24
/ I; c3 x( ^- T- R( Z$ ]4 i25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages. o2 Q/ j6 i' \8 b9 h: X8 c( c
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages8 T5 Q0 X8 m2 ^/ F
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages: L: E! h7 I8 z0 W% i
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
  |; R7 A' A2 f5 b29 1 r6 p9 R3 ~4 o  K
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, m% u5 s( D+ I( S8 Q+ U) W, S0 ^% a31
# w$ ~- {$ T6 p# K6 ^3 B32 CC = $(CGTOOLS)/bin/cl6x -c                        
+ v' z" h# D4 {; i33 AR = $(CGTOOLS)/bin/ar6x rq
' p, V6 j; Q- F) X34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
8 v7 L' E$ f9 Y+ d4 d$ v, J1 ~35 ST = $(CGTOOLS)/bin/strip6x- S+ T1 c8 e  ]! v& C
36
- w9 u# g0 I& V- J5 s& I7 C3 P1 `37 CPPFLAGS =
" h6 e# q1 `" w38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)+ H2 X, P3 V9 M; I  V- y
39 - D/ m$ B. J3 |' z6 t0 G3 F& {' ~
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
; y' E5 |8 ?4 g6 {8 h. t& }: P41 ! F( ]2 C- L. i, m5 }" L
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
' {6 s' X3 _/ R/ J; T9 E, \+ \43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
  R  ~2 c, T5 R( i# H2 ?./host/makefile& T  o) `% A7 `- t
( E' m( W# ?/ w/ k2 F. i! D
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
. [# N- F9 u, s( G 2 objs = $(patsubst %.c,%.ov5T,$(srcs))2 d8 `: A/ J9 o' l* o
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug8 w. p* f+ H$ H' \
4 / s. E2 w: D: w) ~4 S2 ^% I
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))* K7 E3 F0 }9 B8 I$ j$ K! m* Z1 E
6 9 G9 @. e1 T- ~& j0 e7 u9 z- p
7 all:! y3 e, U$ G9 E5 ?  P7 s
8     $(MAKE) app_host
" D! L2 h$ G. Q- }% h. p 9 , c7 ?% m9 t3 E5 v
10 clean::
# m& e3 F( t4 a$ x) O, |" `% G. N11     rm *.ov5T* *.map app_host
. u' x- u4 x) _' V& G7 Q2 z  y9 C12
$ H, E4 b8 ^2 m2 v' G13 app_host(objs) $(libs)
) |# l; r0 y# H14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
9 U" t+ K% @$ @4 L5 U. f15 : x$ ]9 V4 R; t8 ~! o1 v" |
16 %.ov5T: %.c: v/ O! c" h% ^1 U7 b; o$ C1 ]
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<# r, }, \$ {* g- Y9 h7 y& f  s
18
9 i5 Y3 P% E8 r% A( e; |19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
# r& \4 L8 o) O0 v; G+ Z20 AR = $(CGT_ARM_PREFIX)ar cr
  i; `, X/ W7 T. h21 LD = $(CGT_ARM_PREFIX)gcc7 b9 R! _$ o2 K4 J# O6 K
22
8 v! r2 x/ D/ @* |( G# k7 ]23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
; a5 n1 L0 P8 s2 e1 I24            -Dxdc_target_types__=gnu/targets/arm/std.h* t. _: p& S2 Q8 h- b/ v0 R) `, P
25 % d& O" Q: \8 A6 \  C+ N; {
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径3 w4 a$ n4 H% z) n
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
/ ]# C9 G3 Q, J1 I$ d28          -I $(BIOS_INSTALL_DIR)/packages                           \
, V6 O  e8 ]- r6 ?: A29          -I $(IPC_INSTALL_DIR)/packages
2 v) u& a1 {* g8 _9 e2 a30
& _% Y) y/ W. v# }5 F; ]% f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
/ Y6 _! Z9 `$ D& x  M32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& e" W" T6 s( R5 b$ c/ H
编译工程0 K3 o. H/ R1 a  b" j
. Z1 n9 Z6 H- Q, U/ i7 I
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
. l5 g3 ]8 ^, R4 q" y2 K( D) k  s: x
运行工程% _# S* @: U" b+ S4 g, F. w/ Y4 u
1 j  h9 ]( Z" ~* d/ S* ~: I- a: S
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。# d+ A8 j9 y" ]. f; n' t/ B

8 Z8 H5 v2 b) T1. insmod syslink.ko                    # 加载 syslink 内核模块
9 I" v. u% a+ u2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
% \6 P5 k: ^" V' e' }* Q3. arm_app                              # 运行 ARM 端程序
6 g4 z" W# q% A" f6 v4. slaveloader shutdown DSP             # 停止 DSP 端程序
0 y5 X/ ~; _$ k3 d& y( V sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 4 v2 u' h3 y& k% P3 k
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。: f5 l" c7 P( e: y# f0 v

8 i' |9 w% E) T4 a% [: c; V 1 #!/bin/sh
+ D5 }- B  }" \: z& T7 _ 2 $ c: M- y" @7 w* }2 H# x- ~3 n  E
3 set -x
; e/ G3 F7 r, u7 f5 g 4
1 X' U; f2 ]' ]$ H1 N! ? 5 insmod syslink.ko) u3 n8 U3 d, G1 b. z
6
, e! m9 N) k& v7 F 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
1 R  `' {; A1 U, }3 l2 L 8
8 Q) @: D: }. J$ ~  b. u2 S9 ^ 9 ../host/app_host DSP5 ?4 s- x4 p( I6 Q$ D  v" K
10   B0 D/ G5 u( V8 Y( l( m) O8 {
11 ./slaveloader shutdown DSP1 ~6 w+ K, B9 l$ \& v' v  \  S4 j9 [

$ L7 v! V. k! b; t2 F" a% B
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05( u, }7 `8 F( j2 @/ \" ~. ]0 f
建立工程1 X4 a  k) B' M" n2 Q9 ?

; Z" I5 K0 f$ _: }) R+ Q 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
$ b: }8 k7 V3 n
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
% K4 F+ d; M' n# s6 m建立工程! _! {0 E, q. K- b1 M
! d- l- b) I% H5 U$ r- `
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
9 }8 I* ?( ], U! _4 C( w
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2085

积分

创龙

Rank: 8Rank: 8

积分
2085
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:400 C/ D7 T) V* F! t
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
2 X/ f$ M0 s% i; r
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-14 18:50 , Processed in 0.045228 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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