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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
* W) J' t* {0 v' `+ J. o" ]dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
( R2 k! T# J# _. q) C" E; t$ P0 \+ P, I- Q4 G6 J+ V( q, _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
* |- S$ m2 L9 B  A: W+ g5 F  }
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程# g3 e' j: B% ~# O( {

& n( c; C8 s8 o6 K2 l4 A 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。% Z$ M9 U1 w' R0 K
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
. }& v% M6 }% _3 G “清理”过的例程的源码如下:, I# j: p5 Y7 h% b3 Z* |
1 E9 e+ t6 H, U% ]& q$ r: W. j
├── dsp5 @* V/ V. c- S( }9 y
│   ├── Dsp.cfg9 h6 d! u/ M5 Q$ w, A. b; j
│   ├── main_dsp.c1 c3 a/ t6 U3 P# q. ~/ m
│   ├── Server.c
& @$ I6 k' X/ N, \& i% y4 f) |; {2 J  g│   └── Server.h
) i7 V9 Y/ J$ Y0 @├── host$ |9 A* Q# S' ?/ W; M. K! E
│   ├── App.c
/ z* j4 v+ [& `  y; G, `  a│   ├── App.h+ e6 k" {) [/ D
│   └── main_host.c/ L, q; A0 v' k; Q* S8 W$ ]5 v, N8 o
└── shared4 t1 h) q% |$ d2 }: T7 C0 h4 l! f
   ├── config.bld2 p. ]" D. j! D  j# v2 a* }+ e
   └── SystemCfg.h
$ k1 `9 ^& l1 S! ~* W/ Y 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。* J/ @  j" w3 V5 Q/ M6 H
; D, n  R( r0 T( L2 B. a
./makefile  K" r- X9 P3 F6 O, A

4 D: s# T; i0 }- m- F 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
' w# c' K  C' y" [2 i 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
( i' O1 I: Z7 d% C1 V! ]8 @" [ 3 * H) Y. K' X5 Y; _
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
$ O' p* T3 V6 |4 X5 z 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-# w) v6 r- P+ B2 V4 U* s3 N
6 % l# V8 Y' K3 v. v: y; I& s( F
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
% s6 D/ i0 Z) |9 d 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_727 [0 L! i$ v1 }1 X1 L2 k
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
4 e7 {' C3 s: x) x( c10
( b" v* K9 _0 @8 i8 ^9 X: r11 export SYSLINK_INSTALL_DIR      \, N, v$ \* B, \: ?+ ]0 \, \$ P
12        IPC_INSTALL_DIR          \5 N/ D* v" q, ^' G6 ^
13        BIOS_INSTALL_DIR         \  V% T+ b5 t0 p6 D- r; y
14        XDC_INSTALL_DIR          \
; ^* m9 f3 Q; K: c15        CGT_C674_ELF_INSTALL_DIR \: d% l& O& _3 r7 c
16        CGT_ARM_PREFIX; B- F3 P$ M. o0 h( {0 Q" J
17 4 L8 V7 o7 b! l: q' h/ F2 y
18 all:
( o) w6 c$ R4 F. d  V7 M& O$ j4 H19     make -C host all
) e( u# O# i1 M. F1 D20     make -C dsp all# c7 E( v, Q1 h# r- l7 s( e$ B
21 % N( s1 D9 z( R8 q
22 clean::3 }& v1 V% `5 @0 M
23     make -C host clean
# O8 Z7 Y0 b9 T1 ~2 W24     make -C dsp clean& e$ h  }. p  a
./dsp/makefile
6 u+ Z. Q% [+ n4 V8 o& v
5 h8 U6 c" s& v8 Y) n0 | 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
" E! F/ ?' }% w% e 2 objs = $(patsubst %.c,%.oe674,$(srcs))
, m; x1 T" w( B 3 libs = configuro/linker.cmd* E) R6 }. R0 w  T
4
6 G* l' |' \' \4 G! [ 5 all: configuro/linker.cmd
# v, J6 ^6 p6 H8 d6 K  s 6     make server_dsp.xe674' o5 G* z( J0 C& C2 g9 X
7 ' F& Z- G# J1 ^% _' U1 A4 B
8 server_dsp.xe674: $(objs) $(libs)3 W5 z- L' o% T
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
/ f" @$ {! e( |& R# {10
, r4 X# [, F% P" u( F/ y# M% H" F11 %.oe674: %.h
: \3 q: P( D& C/ A12 %.oe674: %.c8 e3 U- k+ b8 Z; s8 K; t
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
: g: s. H- T1 ^( D# C% d" X14
2 Y. t4 t; e6 `3 T7 v15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld! H# N' {0 K/ \
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
( a7 \6 z& i$ k$ r1 v2 D17             xdc.tools.configuro -o configuro                        \
* l$ C9 w! T7 M* L- M9 c. [! X18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \) ^6 w# ^; p& z( O. e1 m
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
# j# L3 \1 q  n. M20             -r release Dsp.cfg
$ q: k) ^. n# Z% |21 % q2 @, r, p' `! u+ }) ]& V6 y6 i
22 clean::
# t1 X& _4 r- Q0 }8 K5 V7 k; C23     rm -rf configuro *.oe674  *.map server_dsp.xe674
; M3 y; c3 a3 |24
% Q3 U6 W* p1 P- b25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages; _! q8 W0 a; \' h" X' }" z; E
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
7 X3 w# [% n& f. }27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
$ H1 P* p5 i+ D+ _7 ?; }( d28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages1 M5 l+ C) t7 C  Q; L; U7 n
29 ; i4 a6 Z# X2 r
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)7 F$ @- p0 B, y4 v4 Q
31
( m. S4 _: G* \0 T& K8 {, J% H32 CC = $(CGTOOLS)/bin/cl6x -c                         ! l7 z; ~% i# b$ |2 L0 v) Q
33 AR = $(CGTOOLS)/bin/ar6x rq
: G! p# e3 l1 L$ |34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi, T8 i8 {3 T& k8 K% J
35 ST = $(CGTOOLS)/bin/strip6x
3 j9 l( A; G# [' Y' Q& @36 / S1 N; V0 t4 v- C+ B
37 CPPFLAGS =1 V5 b2 A% e( @& z: M, M* m- o
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)3 Z( [: Z$ b9 u
39 , ?4 L4 a" N# t- T" v$ z; ~9 O
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
; T* y* E! |8 w2 h. @41 & F6 u$ k0 c; y
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     " _& q. t5 d' }3 g
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
3 w- E9 P. Y/ ]/ G( _7 o4 U./host/makefile5 v7 U2 c7 u. V

. ]' |  t( [8 O, F& q9 n1 L7 e 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件8 C: C) U4 k% ?8 N$ b) G! k
2 objs = $(patsubst %.c,%.ov5T,$(srcs)), l* |' j, I, [9 D* p- ^0 ^
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
; }8 v" B' s2 m0 H 4
% x7 `. t" `) B$ {# i 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))( Z# w4 S7 x9 v% X3 r$ G
6
  P- a; S; J* [7 k 7 all:$ X, K& o& V  |9 K/ l8 {+ t
8     $(MAKE) app_host
  O; [6 O5 s" R  `% l8 i 9
8 L  U) Q# ~8 g) n& d10 clean::
) ?/ D# m4 F) ]7 L11     rm *.ov5T* *.map app_host
5 L) O1 B  _0 U6 b- X12 4 l8 Z' g- ?; s- t0 _
13 app_host(objs) $(libs)4 W" t; w. n9 Y$ s5 Y& ~9 g( Y
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)( W3 |7 I! n: |/ d. T0 T. S
15 ) C( ~% ]9 `  s- X  r: x
16 %.ov5T: %.c7 }3 f, h4 A, }5 h
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
% {$ q7 l$ J5 w18
) r0 Y( z7 d6 {# U19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t9 M; |' ~2 g  n8 O) ]
20 AR = $(CGT_ARM_PREFIX)ar cr
/ l( i5 r. G/ r$ b' k+ R1 i: \) j21 LD = $(CGT_ARM_PREFIX)gcc
2 o$ R$ v8 l3 X0 [) H22 2 i% Q2 Y* t: X& p" c" s
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
; K9 i* b0 N: G4 O# ?+ ?6 X. X$ ]- o24            -Dxdc_target_types__=gnu/targets/arm/std.h/ e# _9 E2 J& T3 M6 a, n
25
" z0 x' s1 _) d) e! P26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径, S* }" q( h1 i
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \* J! q3 [4 z* J' c! W, P% ^" s! z, [
28          -I $(BIOS_INSTALL_DIR)/packages                           \
1 q/ T1 l+ ]" r3 ]$ B2 P9 _3 E, {29          -I $(IPC_INSTALL_DIR)/packages
0 M$ z: u- o- k, h4 c30
9 j& W! u0 o6 F& U7 g8 _/ {31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. U* h9 z) x# h
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序$ A8 c" e/ ?7 n0 v, o) V- N9 e* I) M
编译工程
. o- T& h7 d( E; q; Z" h
4 B+ d$ |0 D) q; \  U* g* F$ g makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
/ q6 F+ O9 A2 w% C& G( F% T: _4 ^6 f7 m/ Y$ D
运行工程
$ X- @6 p0 L9 q% p2 Q" H
8 d' A1 Q- T1 ], l- k9 {: Q- c+ k 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
4 K4 h( A: N8 P/ L8 \) g+ b! T2 T; h* s8 L2 F5 C
1. insmod syslink.ko                    # 加载 syslink 内核模块
6 ^8 B" [2 y% Q9 z6 e) |) j2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序  c" ]. Y4 n4 d4 C# w
3. arm_app                              # 运行 ARM 端程序
/ s+ q7 B/ Z- O; }0 I; t0 K! E4. slaveloader shutdown DSP             # 停止 DSP 端程序, d" }) C% D6 j
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 0 f9 v5 B  o$ E8 X# i+ S
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。* e5 ^3 s9 p0 E) n9 Z; e
' Y% d2 M; {8 Q6 Y" Q
1 #!/bin/sh
  H6 @% v- F, B1 E* G; h0 k 2
  H3 R, h. b1 Q/ r' I 3 set -x
  l1 G+ ^- m+ k6 g 4
, T, Z% I! @1 D# i* m! s 5 insmod syslink.ko7 |1 g, V8 t- a1 X2 \
6 4 z' p/ z/ V0 z0 m9 r0 I" m! M& R  c
7 ./slaveloader startup DSP ../dsp/server_dsp.xe6741 V3 l4 L, ~7 D+ T& _: @- R
8 5 [- o; y4 k# P! H
9 ../host/app_host DSP
0 C  A" j: L! F. [% L1 w4 q6 G  H10
/ I+ U4 S- e" l# a% L11 ./slaveloader shutdown DSP( F+ Q1 v. S( G4 Y

0 s. m" ?5 W' Q5 @/ Y
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:054 v0 g0 ~+ y: @, q9 x% Q# \
建立工程
, R% H8 Z' [: y
; p* S; k: X7 M. Z- S' ] 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
1 x8 g  l- w' |  H& T# c, j# S0 e
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/ _; x+ z4 T/ g+ z
建立工程
/ J+ G( u& ~6 E: u8 Q* q+ v! v6 u& r% t" x2 T
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
* b' i! a0 T) Q6 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

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
9 M& n2 T# }2 K+ j/ [3 Dslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

- V: K4 s) e) K  o9 vdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 13:29 , Processed in 0.045894 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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