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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
  C! D( U4 B% Q9 i! Fdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。) j: K3 V! U5 g# D9 `

7 M2 v5 S8 x3 r: ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程' K/ S  _6 l6 b& s/ c9 J
( u  }' L, i1 Z
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。! r5 B/ f0 \! ^& [
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
* q  t4 x! x0 R; G “清理”过的例程的源码如下:
' S% A' X  J8 q7 z. q
, j* y' n4 e. V$ w4 i3 l├── dsp
+ B' d; r/ o' T1 h, B& ?: ]) D│   ├── Dsp.cfg5 ?' }9 h6 S; c) K
│   ├── main_dsp.c
4 {! b  {0 A7 X4 U6 a│   ├── Server.c
! X* L# _" i5 c$ @* q4 W# u│   └── Server.h
7 a' K+ F: n% U- D+ d, w; C├── host
  n( g7 p" @$ _& G  P│   ├── App.c
0 l; l5 w' b3 t6 U( B& s8 k. R│   ├── App.h
6 L% d, g# _5 P! G' S8 m│   └── main_host.c- H; p" ^- C( u4 m, q0 q
└── shared% l5 y' z! X7 c9 |  V5 X
   ├── config.bld+ ^; l( o$ S# d/ W/ F
   └── SystemCfg.h
* g% L/ f. j  \ 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。
- W0 c  u- X) W- _: j1 A7 r; E9 \, n4 R4 L/ _8 f
./makefile
) f, E. _& x& `' T7 S  C+ l6 v) F! C5 H6 i  b- \' Y& e8 V
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
% x0 R6 k7 U6 ]4 k 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_159 n6 ~- f$ s9 c' c
3 & O$ T0 i7 C$ [) y, J  s, ^) I
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi# ^0 g1 Q! A* z1 t/ u7 ?! z0 n
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-- R8 ]! W8 n3 b) m7 @+ c
6 / E! P0 s. c4 q* P2 U
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
  X' p7 G7 P# \- Q6 v8 B/ p 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72/ U1 W% b' C& e: Q7 P! m
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
$ r7 c# i, A* e7 R. ?9 P10 9 u2 R9 x% o+ k  ^! x
11 export SYSLINK_INSTALL_DIR      \
4 Z5 b* l2 U2 v, ~12        IPC_INSTALL_DIR          \
6 Q( h3 @# h8 `3 ?13        BIOS_INSTALL_DIR         \
+ N: q' C. ~7 _$ G2 t14        XDC_INSTALL_DIR          \8 P# S3 m! T7 R, Q6 }- L& F
15        CGT_C674_ELF_INSTALL_DIR \& W  n$ B# r2 e. m7 H
16        CGT_ARM_PREFIX1 S! i1 W2 M. A$ f
17
" H6 e, s: w; P6 C4 B, C18 all:' }9 u4 e  t9 ^0 G
19     make -C host all
) x; Q0 j0 L" H$ p# v) E/ X- ]1 |& h20     make -C dsp all
& ~- e( j' ], a9 ?) o21
1 S- N2 I+ n& D3 W22 clean::
0 G6 s* b6 A& t" n( I3 Q23     make -C host clean, U5 W( z: ^- S. L& G+ K) ^% A
24     make -C dsp clean4 w! f0 h9 l4 |( V" |
./dsp/makefile
( j! d3 x0 E; u, h0 e3 l! u  Q- @' ]+ ~) U3 C# i  D. B* _
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
/ F/ i3 ^- P. ^  L: @4 \7 w' C 2 objs = $(patsubst %.c,%.oe674,$(srcs))
9 ~  i/ C0 u7 f$ `- B; B) | 3 libs = configuro/linker.cmd
5 |* T7 G/ @% G* f7 V" h 4 ' V" b% ~/ Q) B$ C) H2 T. G" `
5 all: configuro/linker.cmd
9 b- c& Q/ p& G2 }8 \- x6 E 6     make server_dsp.xe674% V2 j1 b7 C% O# l4 p* I0 ?8 f
7 ) S/ u* \! j7 f$ F- o
8 server_dsp.xe674: $(objs) $(libs)0 P% A% O( }6 k$ T6 N
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: f. R6 K% j) ?* _10 6 B" ^7 b# U! f; N, ]  |' f
11 %.oe674: %.h
9 w3 s7 ^+ y. O% Z0 u3 Z* j! v+ v. @  m12 %.oe674: %.c
3 v* j$ q* B6 O7 a# |: s! ]13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<+ w; M/ A( W+ h
14 8 E: p) @$ d# K: w/ u
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
2 V& m' A- A4 c+ o; j2 |6 \16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \" N, V/ w- _7 F: K1 S  {4 e
17             xdc.tools.configuro -o configuro                        \
% R( n* @0 ?  P, l' [' H2 L18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
0 `+ d8 |* p4 [8 v19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
! t7 d! i7 x1 v# z6 f  J20             -r release Dsp.cfg
" z# k* ^" a, M1 ^21
; p* _8 D+ K5 @22 clean::
2 s* f# y! }6 D& l3 Y5 o7 ]23     rm -rf configuro *.oe674  *.map server_dsp.xe674' X$ [8 L* f5 q, C6 f4 P
24 / J- E$ x3 f( ]: l
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages/ `  E% F$ t0 U4 N( G/ d* |  R) x5 Q
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages$ N+ Z; U4 @& L; t/ l% s
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages" w1 X- q3 S% ?3 h) Y4 ^. v: j4 S
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
: V! v5 I% p( ~29
( K5 n/ o( b7 M! K30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, `9 d. s! a" v8 P* ^2 U3 a8 c31 " A3 b( |; k6 ]/ R
32 CC = $(CGTOOLS)/bin/cl6x -c                        
8 }' Z. |  {! ]' L33 AR = $(CGTOOLS)/bin/ar6x rq0 m* }% H9 s! y8 Q, S
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi/ A5 F  T$ y+ A6 H. i' c
35 ST = $(CGTOOLS)/bin/strip6x" U9 X$ K4 G2 J4 g' J
36
* ~: l. [9 G$ J- J4 ]6 Z37 CPPFLAGS =
! T1 u5 x( v, s( T! n38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
' y; g+ U. F; t8 `: n; o, x. [39
: d4 n2 J( H4 j7 a1 [2 R0 H0 F& R3 x  h40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)$ g9 C* w' Y/ B6 W7 z/ b8 M0 S3 k- \
41
2 e* g9 y3 L8 H* ^3 o, n5 v* _42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     5 N3 K& [7 f5 W6 x4 K# v
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ [7 F1 T1 i, o6 _./host/makefile% @& h% J. K6 A9 d% b
! c+ [1 t' i7 D
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
& o4 v8 n, B  R) h 2 objs = $(patsubst %.c,%.ov5T,$(srcs))" k& U+ d8 j3 b! C' o* `& Y
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug6 K+ {7 `; y+ ^7 Q6 ?9 _# b) y* w- N
4 4 S0 l+ I) W: P! o$ f
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))0 d/ E4 a$ n* N- V4 A$ F6 x4 ^
6 # k4 `" t! L6 K( e
7 all:
6 t( d# n7 `* ~! M  m 8     $(MAKE) app_host
1 V7 R- D0 q# v5 t& N 9 6 M5 B. B2 p9 N' Y* |' u
10 clean::) a# K4 u' W" |- v+ B  X
11     rm *.ov5T* *.map app_host
# J0 V* v' \7 p# Y/ g5 P12 4 Q! o+ {7 ^3 k5 C
13 app_host(objs) $(libs)
/ u7 u3 u$ J1 a, e14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)5 N2 d$ e6 b  r1 [( \
15 5 ~0 ~* F- X" b' J/ X
16 %.ov5T: %.c
" G7 `$ R; a' T; d17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
% |/ k7 K: x1 k1 G1 a6 }18 7 ~4 C4 ^8 n9 V, \
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
; r" I9 o3 K/ H& }6 i% c20 AR = $(CGT_ARM_PREFIX)ar cr) ?, ]2 o. _3 o7 d$ o5 n
21 LD = $(CGT_ARM_PREFIX)gcc
: o% o9 i' S- g! b* {22
1 q9 V, l! [' Z# Z/ x) }. |23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
1 Z; U8 `/ f# v. Q" B( H24            -Dxdc_target_types__=gnu/targets/arm/std.h
7 \8 K7 f9 M/ E( x( @25
. G% ?( b4 q' X( \# R' E26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
- I0 v( `, S& W5 \27          -I $(SYSLINK_INSTALL_DIR)/packages                        \: F& A7 \+ `' d# F! w& V+ z/ D
28          -I $(BIOS_INSTALL_DIR)/packages                           \) ~8 [# ~5 Q3 L4 T2 s
29          -I $(IPC_INSTALL_DIR)/packages
) e" h% j2 T  n1 X+ Z$ s; P30 ' z+ k. [. ]3 [7 Z, G, p
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
* L6 u% z+ ?" \2 j32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序) r5 W* M2 f8 [$ ~- S
编译工程$ _' [( z5 i6 P. U7 ?/ x3 b0 \( q+ ?

& ^! Q/ U' ^) H' Q; i makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。8 H& d& [. `9 h) b; t

  \8 h3 v: q0 B运行工程
( o0 u7 Y9 J8 v6 N; J
# `( J; `& N' t 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
' l2 J& |3 A( ^3 S- q# p; z) L  S2 K4 m2 Y' h  k5 Q! [
1. insmod syslink.ko                    # 加载 syslink 内核模块: t7 K9 B6 E# P- z+ K
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序, X. f$ S4 i4 \
3. arm_app                              # 运行 ARM 端程序
2 j, z' d3 p" c9 ~4. slaveloader shutdown DSP             # 停止 DSP 端程序' I% q! h% y& B+ Y7 M6 @. \' U
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 0 ~3 k9 P4 {  _" g' L  G7 R
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
/ T3 H: Z  y& X8 v( S- H0 R
5 B0 Y) S  \6 q3 i- z 1 #!/bin/sh
0 K; }% ?* ]/ } 2   O8 C8 O6 b% W9 _  I, w
3 set -x; u" ^2 T8 ?% s) n
4
9 h) ]* T6 A% s 5 insmod syslink.ko
7 b7 n! l4 n: A3 f( J+ n' g! ? 6 5 n5 n# _) k* [' Q& k
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
# `% {6 S* [3 }' A7 u7 P 8
. _( g* r$ c7 E8 b1 P 9 ../host/app_host DSP( W( h& M2 z6 ~& t0 l8 l
10
; H1 R/ W& E) q( a% q; i11 ./slaveloader shutdown DSP$ L# U* Y$ n1 g+ i/ E

! N$ \* W6 S7 T* c5 s
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:055 f9 s( @3 S" v' o8 b! z' s; M, `0 w
建立工程
1 ]  j# V% N! N9 b( {4 N; X
8 b4 m$ L! k  ^% ]5 S 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

8 B6 B" R) p. {2 }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. {! g! r% g/ V  Z1 d
建立工程
+ j1 O) u' r: Y2 j$ {+ E2 O+ N" i$ ^
! q0 P2 W0 n/ Z 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

6 c8 m( n/ U* A, Kslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2138

积分

创龙

Rank: 8Rank: 8

积分
2138
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40/ o, P0 j! `6 \: T# Y
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

6 n: {0 M4 I% m* D) Q& X  ndsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 10:10 , Processed in 0.046254 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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