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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,# E9 C$ }+ ^7 x, o6 ?  u# L
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。1 k7 [2 L, V& w5 c5 d. y

4 {8 g) P8 M& o1 V# F& S! r! z, S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
2 |7 K" G9 B0 q% a2 M
; }3 w4 E( r& k8 ~7 c0 s 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
0 j' A! K8 i; B2 U" b: R2 z: G. `) \ 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
2 C! `6 F% `6 f5 H8 A' T “清理”过的例程的源码如下:
  @7 a3 z, P% H9 E& O
$ }! x9 k+ W' n. j8 y$ ~# G├── dsp. c& O. \. s/ Z" e: A- Q  h
│   ├── Dsp.cfg; B4 E+ L2 |& `$ e, V# y# W
│   ├── main_dsp.c
. _* a* S* k) `# v' X+ n2 F6 a! O│   ├── Server.c
2 q- N' ~5 O4 e/ V│   └── Server.h
% L2 L# x. {4 k: D├── host/ h7 ]( z5 T: p
│   ├── App.c
9 o  e+ u, }0 V; d; V/ O│   ├── App.h3 q! f. E! E; L! n/ i& R6 x* X
│   └── main_host.c8 ]5 u3 j9 i/ M' ^  n9 |; S$ E! e
└── shared( j- ?+ w% f6 z. ]4 ?. u2 }
   ├── config.bld
6 @9 q- M; T; a3 R3 T+ ?: _7 E   └── SystemCfg.h* Y2 K% {4 B2 |! f* b$ N
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。8 ]9 K: T  V1 d+ B& G

/ P3 G5 D, J; u./makefile
% m4 q/ i& f: Z+ [
; H: G$ `. Z2 X$ I! u# d! ^0 V) x. T5 A 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_052 ~( e" K0 L8 {4 E0 a
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_152 {4 Q5 ^; z: O* _7 ?
3 % ?0 G' v. J  V; G9 B
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
5 U) n" D7 @. q4 \" g, G% l 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
: _, Z- |: s& F- t0 X# _, Q$ ^ 6   p: c, U% T6 s5 q# C3 j! P
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50; O* u+ U! f* i5 }
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
: k* n$ d# n3 y% v 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
2 f+ O$ Y9 I8 j5 [' r10 3 R( f, W6 v. k! Y5 ~5 H
11 export SYSLINK_INSTALL_DIR      \4 B! G; Z- ?8 i. ?
12        IPC_INSTALL_DIR          \
4 P9 N  p! _% n+ T8 j: A) j7 F13        BIOS_INSTALL_DIR         \
5 w! _' v7 Z5 K+ O! c; m14        XDC_INSTALL_DIR          \
- X- G7 D1 T' K; G. u4 a% ?15        CGT_C674_ELF_INSTALL_DIR \2 Y7 u# m2 n! h$ y4 n" ^
16        CGT_ARM_PREFIX
0 ?+ f" X- b' e$ s17 ' i" n4 q' Z7 j
18 all:
& h  a/ n  c( A5 U4 J3 T$ Z19     make -C host all
' ~+ @. M/ A# s20     make -C dsp all
6 ^- W( r0 f( s21 , }9 |/ l2 c& j3 E& K! a; @- c$ I
22 clean::! {7 P$ O( ^% q
23     make -C host clean6 M% _% w) O# ]* B2 [) |- |
24     make -C dsp clean: c, B( [# [+ y
./dsp/makefile
1 J$ O. i3 M, S( n1 T# A$ I- m" F6 r) q/ T8 E) M
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件1 G6 D4 E: M2 E& q1 `: N
2 objs = $(patsubst %.c,%.oe674,$(srcs))4 v. w( E! v; ~7 B: m, b! m
3 libs = configuro/linker.cmd
' w2 q  U5 p7 o+ c* ]1 ~ 4 ( ?! K# s! T( ?4 j' ?. Z' U
5 all: configuro/linker.cmd7 R; |  F: Q2 {
6     make server_dsp.xe674
6 |, h+ @. i& C3 C( D 7
. @- J, V' m2 c$ ~8 x 8 server_dsp.xe674: $(objs) $(libs)
2 y) g$ b2 n. ^. C' `9 w8 x6 \1 D 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)9 X2 y* O* ~) s
10
. t% B; B8 J8 M% I11 %.oe674: %.h
7 E& c8 T1 }; w8 y12 %.oe674: %.c: Y9 X9 A( ^$ n( ^7 b
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
( x$ j0 Y4 k& l, ~# \1 _" [% K14
; Q$ l3 Y4 Y2 x# c) _15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
: ]) E& j8 p+ V! M16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \, g9 C& ~# H7 W+ A: u
17             xdc.tools.configuro -o configuro                        \
$ o5 V2 u6 N8 X0 i: V0 E: d18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
! l4 M. h1 i! B' a) e" |2 A: ^: n19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \0 v% `  @0 ^6 a
20             -r release Dsp.cfg
* a( c* D& ]+ t$ _, j1 _21 $ ], X' _) i  p! y8 R! H( X) h% Y
22 clean::
* Y& Z9 r" z0 x0 f, k% r23     rm -rf configuro *.oe674  *.map server_dsp.xe674( x7 v; O5 x2 U* x/ v' ?
24
, e  q* i* _- B% w+ B25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
+ t2 d" @" [" n6 t) b, _26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
1 \1 z2 v) p0 m, A9 N27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
5 z( T7 v5 y/ c8 T, m' h28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
" o- ?7 H7 @* N0 ~! ^" g0 G29
) v$ z4 q2 e3 U1 _: i# j5 n30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
  c& v% T- ]3 M31
, k0 e: w9 U, t' ^# s% C32 CC = $(CGTOOLS)/bin/cl6x -c                        
" g9 x/ c: V9 e8 D0 Y6 t33 AR = $(CGTOOLS)/bin/ar6x rq
. q: T  {) b" ^9 B2 H0 \& s7 x34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi& t9 o+ M4 V/ a
35 ST = $(CGTOOLS)/bin/strip6x
: F! k2 V6 R, ?9 {" g/ ?6 T) s" n36 5 j5 T7 _2 B! d5 x+ D
37 CPPFLAGS =
8 g6 ]/ ]9 ~: p38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
; r  t8 K5 b" ~- P) s% j# h8 U39
  E/ x. a. t( x6 s, f& O40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
8 ]" L7 b7 q: Z/ U/ H41 / P6 k1 y* z, ]3 }
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     % J8 n4 E' c' ?) \
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序6 W, I% C$ @8 I. |& t
./host/makefile
2 e3 E* e# o) E% b
, m8 l$ w( A% t- } 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
; A7 Q: j4 }1 ?9 A2 c( k. v 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
6 j4 ^) I/ I! F& e! m7 l( ?6 L- q 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
$ U! ~/ `  {  w1 \ 4 / A1 ]- t* }- w2 f8 l& o
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))) O) \7 z* F6 b$ }1 S' k
6
0 s- V; K% w9 z3 ^ 7 all:8 X0 S& J4 T$ N
8     $(MAKE) app_host
. P4 h% d- ^8 L- Y+ M) ^* p 9 3 K# @9 P( m. p1 y: y0 d  D
10 clean::
$ ?) X/ g: ~6 l5 K# z11     rm *.ov5T* *.map app_host, g) v# w' F( E) p
12
& T# M7 T; l* c; U13 app_host(objs) $(libs)
$ z! o4 x+ ~$ y" k% a9 O# R14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: w8 e" g2 D: K/ @2 P% V) j( i2 k15 6 [9 a2 n( u& B" u
16 %.ov5T: %.c
; C8 d3 v+ F0 K. w0 K/ l& b7 ?17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
# A; K( q5 b. E! j18 . t5 D% w8 Y% K/ |6 [; A9 L
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
/ v1 V* S) E6 k& p20 AR = $(CGT_ARM_PREFIX)ar cr
/ T. Q; j) T; c+ B7 y21 LD = $(CGT_ARM_PREFIX)gcc. A6 s, S, u( i1 k: ?- x; `4 Q
22
! _7 G) Z1 d8 U, G/ a23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
# ^9 d9 V; O, O! U1 r6 n3 l' L/ R24            -Dxdc_target_types__=gnu/targets/arm/std.h) D! ~3 b$ K1 R- i. W: H! W. h
25 $ ]# H0 U( e, f
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径8 G* m- Y) i9 Q5 `
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \8 D: h- w/ `; {+ u+ D) O1 x- f
28          -I $(BIOS_INSTALL_DIR)/packages                           \
2 u$ m3 X$ W/ g: F: C4 X" r29          -I $(IPC_INSTALL_DIR)/packages1 |/ [6 M3 \; Q' a  d3 P: l. F
30 , ]! F8 |9 i: k, h7 B( r7 X( C
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
5 G7 r% `" X! I/ ?! {  u( O$ `* o32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序* M5 l4 ]+ z  X
编译工程
, A9 C' D* m" f. K
4 F+ ]9 S/ }& ]2 y  [6 Z makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
; H  J9 s, h8 [8 n9 S/ v  D& M  }4 L1 \5 G: i
运行工程
6 D6 m$ R) |6 t; `% P
* `$ e* F& ?# W0 v1 q, \ 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
$ e5 a. C  x' r* H, m8 ^6 b+ B0 G) N; M# h/ `# h5 Y1 X( l; X+ D
1. insmod syslink.ko                    # 加载 syslink 内核模块* ~7 t& m! ]  C+ P& K
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
2 ^) q. F  ^3 ?  [+ J1 w( h3 g3. arm_app                              # 运行 ARM 端程序
: q# R' a0 D# D  F( s8 N4 H  I4. slaveloader shutdown DSP             # 停止 DSP 端程序( B4 A% S/ Z0 z* ]0 A
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
7 ^5 [  S- y& F& b# F; i5 s' q 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
" V0 Q2 j4 C, ~' C% W7 w: V! b
+ T: d: p, z9 U1 c* m 1 #!/bin/sh" i% B: }3 N; B
2 . G9 O' _0 I% @  Z% M# |3 \! @
3 set -x% T" B% ~, c4 r& r8 A
4 3 D( c8 C; {; z" D
5 insmod syslink.ko
* |. x9 j2 R+ N$ v0 z# a( H 6 1 [' a  \2 V" r  f
7 ./slaveloader startup DSP ../dsp/server_dsp.xe6740 P$ q5 }+ ~/ |3 [1 O
8 / \6 ]- U1 G, s: h! f
9 ../host/app_host DSP
8 H; \) X- I( s8 @10 & N" k% B! j3 |/ ?, v4 Q9 P
11 ./slaveloader shutdown DSP
% Q! M  Q' b, \7 D' p) f) k/ O1 q- }- @# O7 ]
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05+ A% ]* f4 t  Z) D* t- V+ d
建立工程* c, K2 ~5 Z! u0 B3 O1 m

) c. [$ D$ z  c5 T9 y9 z 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
; m  t7 y' ]. c
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
9 g1 a* U4 h/ t) V6 C. D建立工程
7 n" Q, b$ l# j7 ]: T
7 a* y2 z( Z+ ~7 K# S 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
3 o' [$ a% I7 {0 y
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2110

积分

创龙

Rank: 8Rank: 8

积分
2110
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
) r8 ^' [- b$ I5 h( Sslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
0 s6 ~# p6 h! ^: w0 o2 [4 Z% P  j
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-18 19:31 , Processed in 0.043212 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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