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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
1 S! O3 q7 ^7 R  ^. A. P% Wdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。& c9 h( P9 u& d' J4 M( c: V& D% N) k

) ]2 h- g4 w# N5 a5 r/ x# Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程! Z* t4 F: \0 H2 p0 r; {
- ~- L6 Q3 {8 }0 a& b
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
/ l) S- t: o% ?! e! T# y- @ 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。/ e  {& w3 B( C2 z
 “清理”过的例程的源码如下:
' E, `4 p6 F, C1 A4 t4 p/ S2 ^" Q+ d# h0 S) S8 o' d
├── dsp
: e0 M. U. A+ B) N4 y5 R  }( `& `│   ├── Dsp.cfg5 h, Q+ g6 ^. y6 y8 b; H
│   ├── main_dsp.c
- B0 e4 P% ^8 s0 f# A1 W% V│   ├── Server.c
. U, _! a% s0 Y: f4 b( |% v│   └── Server.h
. b  j0 n1 S- X+ O├── host% D% P" ^; R/ k8 m! G, h. F
│   ├── App.c
* v' j" g! J. y│   ├── App.h+ V' x. g2 n) K# t3 o  N" F9 x# d
│   └── main_host.c
. Y! ^' v, X! @4 C└── shared. P9 m( n$ B/ K* @* y& `, U
   ├── config.bld! s/ \/ z. Y5 l% A
   └── SystemCfg.h8 Q$ E9 [7 j% T3 A% f3 m, a7 F9 E, i
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。: D$ m% p1 t% [, a3 d9 |4 A
9 H6 M" u% c5 e* v, ]
./makefile
* Z: t$ Z$ Q+ M" c0 c  P1 z" x2 ~& P" p& b* W+ M* p2 x+ z7 O
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
: q6 j& n" B9 @$ {; i6 t( h 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15- ~6 q; r2 g9 `( V
3
, a9 U) Y* I) t; P8 C( c$ q3 F! v 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi1 `, H  a" u, J) a
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-3 ~6 Z* c9 }4 [$ f4 ]
6
. h" [7 U' A2 t: k' W 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
, x, r  ]. S" \% n0 U' _8 o' }0 h5 l3 E 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_720 `, q, J' |2 b; a
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4/ y) B) {9 j% w: |1 J# F& A& ]' o
10
/ P9 ?/ I: q/ M/ \11 export SYSLINK_INSTALL_DIR      \
! s* d3 q% M/ M2 C12        IPC_INSTALL_DIR          \
4 S3 Z# j/ Z9 i* a" ?# i* z13        BIOS_INSTALL_DIR         \0 t8 x* J: H! [
14        XDC_INSTALL_DIR          \; Q$ z1 _2 p  T! ~# j$ k8 w$ j
15        CGT_C674_ELF_INSTALL_DIR \  N% l/ X3 [3 |8 t
16        CGT_ARM_PREFIX$ y' d, a+ ]8 d* j4 \0 ^! n- {5 L4 G
17 " o3 y* Q: N6 n' Z+ H
18 all:
4 \: [1 M) E: K; _19     make -C host all
& K) B. _& G1 e20     make -C dsp all1 f4 A4 I! Y6 E2 ^
21 ; @* u, I2 D" Q* J4 @8 q' s- ?7 e  ^
22 clean::; z/ B, G% D+ B9 T% z3 x
23     make -C host clean
, ^7 T0 P4 s  M. q24     make -C dsp clean4 q8 W2 \& p. U; [: I1 l
./dsp/makefile+ h: g: ]  h0 I# z

$ {* Q8 y9 m# ?# O' x 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件; G6 {7 W2 x2 n1 U
2 objs = $(patsubst %.c,%.oe674,$(srcs))- n: h, P6 p. T. g% @: y: Y$ s
3 libs = configuro/linker.cmd! ~2 I" ]- V- @/ j( x; [
4
/ B' m% s5 V1 t3 r7 V, b5 A4 d 5 all: configuro/linker.cmd
$ P$ r: k0 ~6 @8 @& y$ E 6     make server_dsp.xe674
6 [6 b1 ~  G7 H0 {/ ]6 b 7
$ f- B9 A1 Q% K+ b 8 server_dsp.xe674: $(objs) $(libs); L3 ^" R( a! S# I- C& n+ |9 G
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
3 Z( j; p" y( A0 }5 }9 e3 Q10   p2 g( Q1 q4 B' l; D
11 %.oe674: %.h
1 x6 Y  h& x. H. |12 %.oe674: %.c
8 f5 i: g0 ]1 p* `13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<# ^9 ]. z- O& p7 j/ p
14 : ^3 }! a6 X- a6 S
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
8 N- g2 Z1 Y- U  n/ ?2 r, C16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
9 y1 K& ]) I1 {) Z* s17             xdc.tools.configuro -o configuro                        \
& \  }( B2 c6 T% `2 o; \0 r, C! c18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
1 e  E! s/ ^0 u9 U5 ^' P19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \' w& \) ~3 M9 V: \( A+ h! d: r
20             -r release Dsp.cfg
5 ]* ?; v4 F: q5 i! w; t7 o7 C21 3 N1 g9 n" r* M% @& W, A
22 clean::
( F' s/ B1 V+ X6 b$ ]23     rm -rf configuro *.oe674  *.map server_dsp.xe674" T& y7 o* {: e5 c. _  w  T
24 # A1 _* O% ?# M( P9 [* C2 c# n
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
  d$ ~4 {3 W. @. h' ?$ R26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages/ e: S' `2 u: C3 w. b+ T
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages1 n# K1 v* H4 {8 p. H& |
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages! p) ?' R  {3 m% E7 v7 T9 D
29
# ^; x' ]; `1 T2 M30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
6 Y; |2 i2 h, x% z$ y31 : A0 `7 X+ m7 Q! v" _" |0 B: Z- g  p1 t
32 CC = $(CGTOOLS)/bin/cl6x -c                         0 o- v: z: y+ u
33 AR = $(CGTOOLS)/bin/ar6x rq
3 Y; Y: ]9 h7 D0 Q, ]34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
- \) t. F6 Q1 l" X7 \1 V35 ST = $(CGTOOLS)/bin/strip6x
: c0 A8 ~  L& {36
" b: D$ a- E( [9 n  d3 e" E" g37 CPPFLAGS =4 [+ O' A: {, x4 Y. P6 [
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)# n( G6 j) b6 K& ]; Z, I, _
39
+ i2 h& ]  O4 K, h3 y% J  u* q40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
3 k6 V# j: \3 j6 z41
4 K7 f' N% ~4 b  Z3 @42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
  k+ }: b; K0 H1 Y8 Y- I3 d3 k0 h43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序( P" E+ q( R6 r+ T
./host/makefile0 m/ v7 @7 p. _0 L/ @

/ i, k. _6 p2 }2 u( z6 `% S 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
2 y7 @" m) p' S. b3 @) {& G 2 objs = $(patsubst %.c,%.ov5T,$(srcs))" d; z# Y! B! j/ S  W$ T( K
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug1 p8 [9 `. w& I) W
4
) U# D2 n  h9 l( T4 F 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
; X- o. R; l( t" ~6 t% \ 6
! M. r! y0 d2 { 7 all:, `5 a0 b7 x( ], q& l4 {0 F
8     $(MAKE) app_host% D! i8 {3 S* d8 f% D+ [; M
9 ! ]# G" U- r8 l' f" b
10 clean::
) k0 q( E( e. \. T' y11     rm *.ov5T* *.map app_host
2 g9 }: b+ G& n12 " }9 u6 u6 ~$ J# r, M/ x
13 app_host(objs) $(libs)
9 P! E4 t9 N. A& `8 v6 k4 M14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS): |% d3 N4 g: y4 W2 [! [( H
15 + G2 f% L7 m' L
16 %.ov5T: %.c
2 p: |& |+ z& j4 J7 K8 A17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<1 o% l; H" v: l4 ^3 G# _
18
% X  `7 \& o8 E0 Z% g/ P19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t, T$ n0 Q# K& p8 N6 X% Z
20 AR = $(CGT_ARM_PREFIX)ar cr
6 L, v5 ?4 @5 a/ ?3 v+ Y0 M( Y21 LD = $(CGT_ARM_PREFIX)gcc
5 e) U2 S5 w4 j8 W! K4 b22 / X; g# P$ K" N  T" o5 y
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
. W7 e/ x# s) J24            -Dxdc_target_types__=gnu/targets/arm/std.h, v, c( y) \7 ]" H
25 ! F0 D  i' M- O- Q9 F
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
# t" X* D. e& G' T5 Z27          -I $(SYSLINK_INSTALL_DIR)/packages                        \9 D) X& H, P/ \( [
28          -I $(BIOS_INSTALL_DIR)/packages                           \
/ @. X# p: m5 ]- I+ k, e* ]29          -I $(IPC_INSTALL_DIR)/packages
5 ~. {3 y8 j. Y6 W) ]8 U' o30 1 i3 r' {  {+ {0 E# U" B
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
; g. a4 ~- a- h6 i. {( V3 r32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
- E  N% B' I+ N+ C7 g. q编译工程8 u- F6 C8 }3 B# q1 V
) I- M" w1 [4 F4 t
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。  H3 t+ o' V% ^/ M$ T

8 p5 ^6 r1 p1 Z! h9 ]6 v运行工程
5 D/ m  \5 }! ?5 d  j) A
3 A, Q, y! _( ]6 R" v$ i) l! W& ` 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
" c! ?, y- P8 I" M2 R( B+ N1 @9 U" p* @' r
1. insmod syslink.ko                    # 加载 syslink 内核模块/ Z5 I' M6 d+ Y" j0 q. g5 j
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
, x2 V! R/ G- o/ N$ R3. arm_app                              # 运行 ARM 端程序
/ |; G1 L6 v# l- d( S4. slaveloader shutdown DSP             # 停止 DSP 端程序
( H8 u' l, o5 O" }$ ] sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
+ _. j- [  ?* h5 s; m) l: s5 y 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/ F( N& B8 v" D& e% Y  d
( ^3 t# M( S5 ?/ b
1 #!/bin/sh5 z$ B8 o2 z* b/ V6 O6 e
2
9 w; O# k7 W0 E) S: C3 ~$ s) q 3 set -x
" e, u% `8 k: f( W; X# K4 p 4
/ f  B4 A1 S' x7 U 5 insmod syslink.ko
6 t  `; `. W0 j7 ?4 s 6 : |: k% m  K5 e$ [
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674  f6 h. c+ z6 T; B1 k
8
# m5 X/ n" n4 M3 N 9 ../host/app_host DSP, x6 N+ |2 \. b& @! R3 ]
10 4 ]# m: O- `6 @3 E1 z1 e, Y
11 ./slaveloader shutdown DSP
5 A2 t+ Z8 m; |
) f' q/ \' }2 y& c2 z
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:059 ^/ V8 c1 h# M5 o$ X2 z
建立工程& }8 l& [; ?* P2 i) v% S0 |
* s0 s  @) z" ?6 I
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
7 p' w9 l& c9 j) }) h2 K7 q8 z
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:059 T' N* q) N! @6 a% y6 X4 T
建立工程
4 i/ Z+ v0 H+ X$ w7 y6 D
4 P8 l0 F; @2 J- X 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

% ~' {& ?% k1 xslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2096

积分

创龙

Rank: 8Rank: 8

积分
2096
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
1 S5 d+ q3 l, x6 ~/ Rslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
* S! N- O; j# }. J' d+ U. g
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 15:41 , Processed in 0.053253 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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