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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8147|回复: 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 f9 R5 t/ m2 b. sdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。7 Y% B7 O' P  j. R* n3 X
) h& z# L2 P9 V5 A+ u! |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
! |+ q& f! @3 V" I
" Z+ W: t. F3 z' Z* a4 L1 b 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。- ~' \- t1 ~. e/ I- J
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。: d# e$ D$ [0 }! Z. z( E
 “清理”过的例程的源码如下:2 ^. `2 I) P( u; ^- Y/ t9 W3 Z7 P

0 o* O- B0 `; Z. |2 N: I! x├── dsp
% Y4 l; \$ k1 c: d$ X/ M! X+ i% b│   ├── Dsp.cfg! e- a' y) h9 V+ x% x' v. W; @" J
│   ├── main_dsp.c
7 _9 b, V, J! K: @* [# y2 l│   ├── Server.c, [8 D* o1 ^4 n' a
│   └── Server.h/ i2 H3 a$ m5 X  ~& F
├── host) X. G. b2 N) y+ g1 H
│   ├── App.c
0 o3 e6 w! I6 X0 M/ J9 G$ n│   ├── App.h1 q9 u1 `% M7 M
│   └── main_host.c
/ C3 h" b4 j: L& F1 Q└── shared+ R- g4 m' [+ m
   ├── config.bld
" s' p8 z% T# z7 C+ g/ d   └── SystemCfg.h
% H+ `' i0 d+ y" I3 j. i1 k9 W- ~ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
, k$ g. m' \- P5 p. v8 q9 b4 s* R/ B% q* G* v' n4 G
./makefile
. l9 B6 n( }: E. m/ A
8 j- n6 H2 h( y) w 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
8 r: e# I& o% k) N" G6 ]. { 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15% v1 h& i0 H2 y
3 7 i# Q! k( W9 H6 {. M7 S+ x1 ?
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi! ]2 n/ l4 D/ ?' h7 i7 B! _
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-8 t+ R; u: D4 R; a6 M# \5 R
6
( K" N5 g% ^4 L( U3 v2 U 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_505 w+ l* H" d" G
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72) p% @+ X' h+ P9 S% c
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
# Y- Y- O( O+ ~) o, i  z: Q; u/ ?10 5 I; G; V0 N, c; N2 t3 L) R
11 export SYSLINK_INSTALL_DIR      \3 o: Q5 e% i% u) H8 i- P
12        IPC_INSTALL_DIR          \
) S  `. T2 U, t4 m) g# T& D' P( _13        BIOS_INSTALL_DIR         \
+ k( H  X, L# d14        XDC_INSTALL_DIR          \$ Z! |7 h' \: o# ]9 S5 t
15        CGT_C674_ELF_INSTALL_DIR \' M- g0 F+ a( C1 o+ _
16        CGT_ARM_PREFIX4 d+ y- u8 T1 _- k0 W
17 ! I' f7 l) @) I" |0 e7 @4 W# _# w
18 all:4 I* P  ?& s7 J; N' x' L' I. H
19     make -C host all" l0 R5 H( }+ F1 l
20     make -C dsp all4 L  [( ^' X3 f2 O/ o& R/ ~- W; N& J1 g
21
" f3 k$ G8 p, p22 clean::
0 n9 E$ V) V- Z+ x: I3 S; t& R3 l7 D23     make -C host clean
% `8 M+ t- \2 Y, l3 C, T24     make -C dsp clean
1 }1 i' `/ r0 b& g./dsp/makefile4 b9 U( G' s) G# Y  A& q

: w* ]( t" N" D+ _8 m0 F/ x& e 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
8 b9 a2 Q* \; [ 2 objs = $(patsubst %.c,%.oe674,$(srcs))+ |9 N- Y9 L$ u
3 libs = configuro/linker.cmd
) E; }, a. _$ b+ [* H3 N- F& o 4 5 \; J, f" }) }( j$ X3 T+ T
5 all: configuro/linker.cmd# i; I4 i' C) L5 C0 x
6     make server_dsp.xe6747 v4 x8 d2 R4 S  i; f7 N4 ~4 o) I
7
( \0 _% x3 e8 H- v1 M  {, q 8 server_dsp.xe674: $(objs) $(libs)0 O" B2 ]5 u- r) O9 L" @
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
+ b. G% N+ l8 f10
! E5 M+ i5 \& ~9 j8 `; ~11 %.oe674: %.h
  f% {4 R' I, `$ v/ b$ i12 %.oe674: %.c2 {' _# `  h' g+ V& b
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
3 }1 J1 v- C) R9 e5 _14 5 p2 f+ {: @% V; Z* v  m  N
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
; z+ Z- L1 L# I( Q! {# F- q0 c3 v* J16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
& ~2 X8 {. \, h, G0 R3 i17             xdc.tools.configuro -o configuro                        \
6 n/ h4 u4 W7 S% v3 x18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
7 Q, V' V0 i% O, ^$ v  B8 Z3 d19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \1 i! ?$ R, u6 }$ H+ ?+ L
20             -r release Dsp.cfg% p/ e# ^' W1 G6 z: G7 q5 j
21
8 N# _4 G0 X$ ?' Z, z  N6 d22 clean::7 o3 h7 F" z! N
23     rm -rf configuro *.oe674  *.map server_dsp.xe6745 K* O- V0 \; A+ I- w
24 3 y* G  k+ h  X
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
" m8 S% h) `& O9 c4 z26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
  ~+ L/ G" z/ p+ U27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages3 E( e4 c: M) S" K
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
# [- Y! g1 M7 _* P9 \! e29 7 r# R- K: V+ l, U, O
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
6 D' m8 a: {1 z) T31
. s* G& M" a6 {$ r6 J# X2 [! c32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 b' `' V5 U. }8 S33 AR = $(CGTOOLS)/bin/ar6x rq
: h' |* d" w8 \5 ~% P34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
) A1 w3 K5 U1 M0 K( t( a% O35 ST = $(CGTOOLS)/bin/strip6x
0 g' O+ m; Q) ?; p, @$ `, N7 u36 * V& _7 E! S0 K. ~+ V" B
37 CPPFLAGS =
6 i2 y: {; I) Q# E; T( k: k3 ]: p38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)1 x! y# a6 }/ q3 N
39
% I' p8 ?* ^" Q9 X40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)" s& ^5 F6 T# [
41
+ @; Z9 M, ~: s' l3 c' r  v  p9 o* a0 x42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
2 z: Y7 V. W5 j. n3 f7 s43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
; A5 y% Q0 m: n; x./host/makefile
! g2 `( e4 }; d1 r
) |' N! N4 W& a/ Z  p 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件5 I8 f; F2 Y2 p1 |* u
2 objs = $(patsubst %.c,%.ov5T,$(srcs)), P4 D: t/ d; `- J( ~) c0 c5 F
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug" P, h! a# k% O, c: @
4 ' g4 {" }% L6 o8 ?( i( `/ M5 K
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
# p( ^# r; o3 p+ E) j/ @- W! @ 6
1 _8 v7 f) [1 W' u 7 all:% w9 ~* h; ^) w. z4 \  g  D
8     $(MAKE) app_host
3 n) S! V4 H6 d2 \; I 9 0 Z8 `$ C9 j# R/ I+ T6 T# u! j. X
10 clean::% `& u' ^; z: Q; B. {# o: p
11     rm *.ov5T* *.map app_host
, p! N1 y, l8 U7 p' O0 M4 k, G* }12
, C, W3 z2 m# b/ B9 J" M) }13 app_host(objs) $(libs)
3 X, w  ?; [5 q1 t) ?4 u3 S14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
" O* x' l: g9 x: p$ {" I15 ! v5 u! i$ z1 f7 ?" n
16 %.ov5T: %.c
3 c) Q/ ?6 c+ s; d4 j17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<& s+ L4 c  ?+ {4 Y3 `; H
18 4 }  ]& j* U! K% d- F# x& L
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
, d* ^" z  q. E  `- q, s20 AR = $(CGT_ARM_PREFIX)ar cr$ z) B0 _! u! u
21 LD = $(CGT_ARM_PREFIX)gcc
% S& X$ L" Q8 L+ H6 I( _9 l) u4 I22 2 J: ~- Q, P& L
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \( B  F* g8 l/ p' n8 J
24            -Dxdc_target_types__=gnu/targets/arm/std.h, e, y' Q$ B+ [" I5 [. y: F+ d8 a% o
25 5 v0 u3 l* F/ W" C4 c" E2 ?( u& c) V1 Q
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径: F! M, @- A5 S5 l
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \7 W0 t* e, K1 b" `
28          -I $(BIOS_INSTALL_DIR)/packages                           \8 ]9 [* u* A5 O7 f% z9 k; x
29          -I $(IPC_INSTALL_DIR)/packages
  s, q% R* A% @. a! C5 ?30
- E: b  _, M, W  E; R5 d31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
" r# c5 ]+ ^6 p32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
$ T, ]/ |1 b% Y/ ~' v5 {- `9 U编译工程) f" G: s9 H; [  T; s& o

. F* p5 ?9 _* O3 L* J8 F' c makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
& B  U3 o& h# q) `+ g5 u! x0 v
) b% O; \$ y2 N1 ^& I5 e运行工程
7 [" E+ k' s% ?: F! s9 u
* n; E* A; E, X; X/ r% x) W0 _  F3 ? 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。" w, H# d' a, v. H, q: W7 d* v3 p
! y* W* p: ~+ l% u4 O) W
1. insmod syslink.ko                    # 加载 syslink 内核模块) H0 V: z: h/ z+ M/ M
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序- @+ a. N& Y/ A( V
3. arm_app                              # 运行 ARM 端程序
5 Z6 |+ j3 L5 H/ M$ o. a4. slaveloader shutdown DSP             # 停止 DSP 端程序
* {4 e; ~5 s8 {; p4 |. d6 ^7 v sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 $ j$ `# T7 ~, C
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。! k8 p, D# X' M# `* g
9 w+ M5 c  _& r; d
1 #!/bin/sh
7 @! g9 r5 K# u% u( h& Q, O 2
# C& i, m! ?7 }/ D9 z6 {6 y 3 set -x
" L" A8 P9 v4 H$ i2 N2 l; h 4 2 T# O) L# y4 ]
5 insmod syslink.ko
5 ]* ?8 b4 d" H+ ~6 t9 S" U 6 ; |: q, s) z1 O0 r
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
8 h3 j8 [- [7 [+ F9 g1 g 8 4 Y, k% [. b# G  [7 c2 D! R) \
9 ../host/app_host DSP
' e$ X& O2 m7 l  z; \  A10
6 {/ O6 P. E" H( e3 [2 N; i1 p# G+ N% Q11 ./slaveloader shutdown DSP0 T" m/ T% R! Q. a' ?

, ~- L1 k, @! W
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05% z  e5 M0 k# h
建立工程, y% B6 j) o. y1 U
! c3 T0 B, K' }0 A# W* ^- A
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

3 S  n2 d2 P; |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:056 N1 l4 M* P2 G) a7 z
建立工程) k) \6 Y4 `) v2 ]) {6 t2 J

, J! k; ?' G2 [! D8 H+ |; s5 k; a 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

8 v$ c; q' t. P5 m' ^slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2122

积分

创龙

Rank: 8Rank: 8

积分
2122
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
3 }( r' S6 n7 T+ O. Hslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
* D1 z" p% }+ \, ?5 Z
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 20:46 , Processed in 0.044044 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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