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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
3 G& P! D0 F: ~2 d$ Bdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。6 S: a% I" _4 B5 o+ F8 M  Y
3 M+ h2 B* K4 }# |. S9 y1 m0 S1 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程3 \4 }  w- d% _7 M1 E9 U9 Q

: J6 _4 V  k, C& P5 q0 i 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
$ V+ v% Y. `5 N' x' ~# c, d2 i 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。! j8 o3 H/ K4 J7 v. d" G
 “清理”过的例程的源码如下:; t. G# q" Y3 X
9 Y+ _% ~  N9 l+ J0 `
├── dsp
/ K* W' @7 ~& S9 g% w5 z│   ├── Dsp.cfg
5 g- w4 N5 [. A. P; e, C│   ├── main_dsp.c
+ b$ L6 F+ d" ^+ p3 z% ~( t│   ├── Server.c9 e! `9 c1 W8 {* \; s0 R4 ^
│   └── Server.h
$ h0 T; r2 y0 L) H3 m8 R5 `! \├── host
! Z  S& C& y9 H* p: @│   ├── App.c
4 m' D+ U' y: z) l│   ├── App.h
" G. q+ q* q$ P& o│   └── main_host.c3 ^6 j% j$ L7 p: ?# U# {
└── shared3 C+ U( ~9 n( n3 J+ N' N
   ├── config.bld# {5 ]3 ?* `* s5 b% @, }
   └── SystemCfg.h
; S1 q7 v, ~2 \4 {3 B/ _, h9 m 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
* g/ |9 E: ^' B. _9 x+ d: H3 h/ x" b
./makefile
3 a% R/ s! i! y1 _5 V1 F' v1 e( l# t. V
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
6 B0 l6 X- ^5 E4 g0 S" u* v 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15; _0 }$ z5 u' ]) D; d% s
3
( t2 _+ T1 C5 W- w6 m4 l: } 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi( B* A, u2 c, g
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
$ S4 h) \2 T. B" l( E  ` 6
- U7 o# d; P! B- \ 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_501 M+ G6 m/ M4 Y7 r
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
, }+ Z0 n1 j- n0 [ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
; O7 i1 Z2 z* Q& Z. s6 t, q& t0 j$ Q10 2 S, K  e# W! J/ b- E5 w3 J( q: T
11 export SYSLINK_INSTALL_DIR      \3 B$ w# D/ H8 m
12        IPC_INSTALL_DIR          \
3 S8 k1 O  K) J1 P4 h13        BIOS_INSTALL_DIR         \
5 O: t, [1 E7 h& F! J5 Q14        XDC_INSTALL_DIR          \
9 C. X! C* p* `15        CGT_C674_ELF_INSTALL_DIR \# E% Z# M6 A; H
16        CGT_ARM_PREFIX
9 u* w& Z1 D6 D: Y0 ]: O17
0 q1 F% w9 T8 x$ s3 y) _6 f5 }5 F18 all:
% {* C& O) y# X0 N/ J6 D( p19     make -C host all5 j7 U! N( Z! G% n
20     make -C dsp all
2 Z  \& ^! h+ A  ]6 r7 F21
) y1 w5 P/ @/ {+ ]( ^22 clean::8 p/ W2 p6 T. H* X3 S
23     make -C host clean
- V) ]0 w' |4 B" ], S- _24     make -C dsp clean& d( m1 Y" Q1 ?( `0 S
./dsp/makefile' f$ e4 N; g* Q8 a9 j$ Y2 u4 N$ a

$ z9 f! d# |; }' ? 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
. L$ c8 i6 E: D3 S 2 objs = $(patsubst %.c,%.oe674,$(srcs))
6 c  U. K8 {( R; Z. W( T2 _+ g$ c 3 libs = configuro/linker.cmd& K* }* g6 ^; O3 k/ J
4 + r5 `1 m, y& C: Z1 C
5 all: configuro/linker.cmd
1 j! @  n' B2 ?  a1 b" v2 x3 K 6     make server_dsp.xe6745 i; e# R  `. h
7
. @; W) u8 ^' y! e" e/ }* D 8 server_dsp.xe674: $(objs) $(libs)8 }. w9 V& w! |! `1 x
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS); o- ]- g4 s0 X& Q# t1 ~" O; D" |
10 2 `; p, Q: S2 q& E/ E
11 %.oe674: %.h# m- c3 f2 z8 L1 q
12 %.oe674: %.c
8 z( v  y6 f+ w) A# L, U4 n13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
" L. s4 y- r, S3 L3 Z6 e2 Y14
: ]# G7 I3 s' ?1 m& M$ q' l! E/ p15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld& ~1 s7 ~/ N$ W/ F  w. K; K  m
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \" i( T- A2 i7 x* S2 Z, \
17             xdc.tools.configuro -o configuro                        \
4 v9 x& N/ b! r6 ~* p9 ^' v% q18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
% o, V% Z; x: ~( V7 J# q( s19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
! C' [" x% W% o2 V! b/ R: d20             -r release Dsp.cfg
6 B! s* q  g) Y# I21 . Y0 Y, M3 z! {4 _, X& w6 `0 R
22 clean::
$ s! }1 u. k% G" c$ d23     rm -rf configuro *.oe674  *.map server_dsp.xe6743 b% x! U# R1 h" n
24
& n  _: o8 M& b4 @; v& o: Y25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages/ Q+ |. Z5 i. `5 J7 ]. g  Q0 z
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
% t; }4 t+ u2 y6 A# v27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages9 k2 V% K2 \: k7 \. t  ]/ C
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
$ o" a- b; F: _% B3 [7 `29 + x' h0 o# ~9 Z2 Y+ _. _6 v  e
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
8 ~' w# j( k' W- _: ]/ Q31
7 g; e* W* f0 e1 V: M2 Z+ Y" H, F32 CC = $(CGTOOLS)/bin/cl6x -c                        
0 A  e9 P& f' _, S33 AR = $(CGTOOLS)/bin/ar6x rq
& s6 d; [- O* @2 C/ ~34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi" J; J. X6 x; ^0 {
35 ST = $(CGTOOLS)/bin/strip6x
! P# N9 h& u1 h: v" ?: z36 + t+ T* Y: S8 y, D# E5 {
37 CPPFLAGS =
) W" _& Z9 ~* A+ G38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)/ v. ~6 `7 z7 M5 y# B) ~
39
+ L4 U( O8 D3 |* }6 p1 T5 y1 y% E40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)/ h! [4 y6 m* |9 S# ^
41
% p( g# X% M+ S42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ; `9 O. }2 i% h9 i0 T% R2 r
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
1 B6 K0 z, G2 X5 @: l7 O  ^% I./host/makefile
# i! b  ^7 u% }8 t# q6 L/ Q
/ j" [6 o3 s  ?& ?, D 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
& A: _/ {! E" u, G6 h: ^$ Z 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
; E6 B! Y, ?9 o& u 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
1 s$ M2 p. x+ H* j 4 . q- }$ o1 d( G, h
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))  n8 n7 B, S/ z9 L
6 + c1 |+ R7 Q0 K; w0 v
7 all:* `) F3 w, U& n* ~% F9 }& X
8     $(MAKE) app_host
8 u* d& E% x% n4 p9 B/ U# U; A 9
' f# O, u0 N2 r0 t$ o2 h- Q! B6 Q8 E10 clean::
" @; ~! D. Q, O* p7 a" C# [  B+ G, o11     rm *.ov5T* *.map app_host: S+ C! |2 a1 V1 Q: F) t( M
12 & ^) U0 v: ]  T# i# |) v6 l: ?; f0 Z  a
13 app_host(objs) $(libs)% v1 F! {  A2 |; ]* f$ e
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)% t# w. @4 F! M3 I8 [6 F  q+ R
15
7 ^6 F" r% @7 `0 c! S! G  S- e16 %.ov5T: %.c
+ q1 ^5 J# ^) ?17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
! E3 W0 U; E4 j- _% h+ X$ v2 Q18
" j$ O8 w4 v" l* S" D* G19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
5 B  _. m' i- m0 |, l" V+ D20 AR = $(CGT_ARM_PREFIX)ar cr3 V0 W5 A4 T! f9 h& O7 q
21 LD = $(CGT_ARM_PREFIX)gcc0 X9 F+ E0 t2 I5 r& Q
22
. U3 C1 t7 I5 I# t# [23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \( S7 T$ P- f5 A5 y
24            -Dxdc_target_types__=gnu/targets/arm/std.h
- N; K/ B& x" _) z' v* [9 x25
2 W; Y1 n# O. o3 a/ O26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径  `. w7 e1 S1 P4 G  }7 a
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \) ?9 ^% t3 n! ~: i' }0 v
28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ |. R% Y" G* z+ A29          -I $(IPC_INSTALL_DIR)/packages
1 Y5 r( D' Z  w30 . U. z( y  T4 \& }; t6 p& F8 y
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map9 y& W  Q1 m; L. a' j" b- B: t" c
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序2 Y8 v. N9 h) I6 {/ K4 E" }* I
编译工程: T# n: h6 A8 z

# t" k+ g& P: J4 S! D makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
+ a$ s# u: J# n, J2 d' z! v! D4 i3 F$ U8 C8 Y
运行工程  S( n  F( P0 X3 E

, L9 X$ [8 ~: ?- P! ? 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
5 E( z& b3 K6 V( {. {7 j: @% r2 W4 {6 k2 f
1. insmod syslink.ko                    # 加载 syslink 内核模块; y+ Y$ g, w2 Y3 f! ]8 r+ j
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序- @  A* @$ u1 f0 J' Z
3. arm_app                              # 运行 ARM 端程序: l. p# ~5 r. M- l
4. slaveloader shutdown DSP             # 停止 DSP 端程序( `" y- u4 W2 @" u; |
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 * y) T$ Z# F7 |$ K3 I
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
% K; o. ?: h( [6 M8 ?7 r8 p; m) B% E4 `
1 #!/bin/sh
; L% a* X9 D; u9 X8 [9 W. O 2
) A$ A5 [5 e/ ~ 3 set -x  x8 p; t* L, z8 }+ G
4 9 t. o& a3 W$ [- `
5 insmod syslink.ko
, x1 G1 S( _) W; ] 6
# V7 l" d4 a$ H% M" f$ F 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
. G9 b# W: b; G/ l7 i  N- T 8 $ q1 x7 {5 f6 ~# B1 T6 n
9 ../host/app_host DSP, L4 h* o8 d7 B6 C
10
  v- l% c- g! f' f11 ./slaveloader shutdown DSP" o' ]  H  ^3 D9 ^( ?* M

' Z! _( n. o& `! G3 r6 Z% O+ i
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05" I: z$ X7 [* b+ ^
建立工程
9 K0 \6 S5 C( `# K4 H. q8 D5 k$ \1 Y9 b( X
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

0 w) F: I: e+ M9 H: s8 C' yslaveloader 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
1 s; G) f/ ^# d9 D建立工程1 v+ P! a. J0 ?3 k
) ]# q6 s3 Q( F  ^! {( Q8 ?6 P
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
% C2 W: I( y. e! I$ s- e6 G
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2144

积分

创龙

Rank: 8Rank: 8

积分
2144
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40( z! l( V8 o+ B& w! ]& u
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

( y6 D) G5 i( y; e( K4 Vdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-3 05:09 , Processed in 0.044195 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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