怎样创建一个双核(arm,dsp)的工程 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
) a% O4 t5 _. C4 H3 {dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
/ C. O* E, |  i2 k. y
$ R) J7 Z+ G' ?- y+ m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
: R: l( o9 a3 s% }$ @* X7 z
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
- j5 f1 ?, L3 r" Q! P: U4 a
3 |! v$ E" F" o 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。
/ b, ~) f6 D' x, y 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
3 H& n% M1 K; W: y( ~9 K “清理”过的例程的源码如下:8 L$ r, K/ @0 @0 K$ \% k, O
; O% T+ @! a9 M" s9 S# T# K: q
├── dsp
. j; Y/ C* i7 w: c# G  |$ U! E│   ├── Dsp.cfg* U) S2 Z+ |1 e+ q4 G7 x1 P
│   ├── main_dsp.c
* O$ s+ h7 V9 J3 w  l8 `│   ├── Server.c
" R6 g4 w2 A+ g+ I6 r: R, V│   └── Server.h  o7 z' @  U# {
├── host
0 y* f% k7 P6 z  N│   ├── App.c
% Q6 c5 H! Z8 I6 S% \# P0 f2 K│   ├── App.h- v. P. k7 r- g0 x
│   └── main_host.c" l* |- v# X! K
└── shared! ]. c: S! r# z& u! G6 [+ H: v
   ├── config.bld
0 Z6 v( R/ B/ i; q6 `   └── SystemCfg.h: \7 B" _# f3 ?/ B6 W/ |( _
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。7 a* G9 `0 S6 l" J* n
- j! g5 V, Y4 Z7 L
./makefile
- \; A5 {5 F4 R2 O- J. E% T% o1 D
6 U% D! {1 m5 V% w3 r$ r 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05% \  z$ _1 l; e1 \
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15. n- f$ _# ]# w9 ]" [# K8 r
3
. q! H/ q: T& O: R* e 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi- `4 A. x: b/ ]) S
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-( ]) U7 V2 ]0 ^' K- v8 g
6
* c% J  M& s* A( [! ]. y 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50. w( [( v! a% @+ N3 ?# @: i! S, ?% {
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
7 r' d7 s& s+ C: z. T; w 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4& @  h4 Y7 H6 p
10
% v# [; T9 `4 f9 W8 Z* A7 [3 F* r7 m11 export SYSLINK_INSTALL_DIR      \$ c% Q6 l+ _  p0 q3 C* r1 A1 }
12        IPC_INSTALL_DIR          \
3 D7 V* p' h; w" ~  w13        BIOS_INSTALL_DIR         \
, U& Z/ |) P: x1 c14        XDC_INSTALL_DIR          \
' B3 ?3 a5 I! j& y' T* o" V15        CGT_C674_ELF_INSTALL_DIR \4 C/ P0 p+ _) I/ S
16        CGT_ARM_PREFIX
8 e/ P0 E, ^0 p1 d1 r, s4 d4 M17
5 u3 [. e1 i+ P9 n/ ~, O& c18 all:
# T+ q' x$ u5 B, P7 o- |19     make -C host all
) U. i% ~- @' x# x  a* `20     make -C dsp all, y4 z/ p7 K; D" @
21 $ G  L3 e+ U7 C, N9 \5 y% ]
22 clean::
7 d& v9 T+ Y+ W9 N4 m23     make -C host clean
9 E# M( Q+ R3 g& a24     make -C dsp clean
. I' |  D. e9 A./dsp/makefile, [4 E& G0 U. Y, c. Y

) @7 C8 `; i1 T- u7 s- P 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
9 [; v0 q8 `; V9 K. G8 S9 x7 G 2 objs = $(patsubst %.c,%.oe674,$(srcs))
# G/ Q3 o: R' ?2 E0 y0 R2 `; ]& @ 3 libs = configuro/linker.cmd
8 F7 B: L% a: W, i& a 4 " R& u! I) ]% _, b3 T$ f% V1 N# M
5 all: configuro/linker.cmd
" i% U& x5 n4 c# V8 ~0 l3 e 6     make server_dsp.xe674$ s* u( E, g6 J) x, \6 G& q
7 0 ^4 z+ p& X2 t& M6 u
8 server_dsp.xe674: $(objs) $(libs). [: g  V/ N3 H! H3 P' P. C7 G
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
  H% r. }4 ?3 U4 y$ ?1 U10 $ ~  S* p5 V! \% l% ^: j
11 %.oe674: %.h
6 I% v8 G' P8 m  D; n: x" y12 %.oe674: %.c5 ]1 E+ W, v3 t
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<$ b/ a. t+ R/ F4 l) a2 M6 g" M) @
14
8 {6 A0 Y7 _8 s3 ?15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
% i- D0 N( j3 `0 B6 B16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
# G$ w$ o) Z  O8 U! O& _17             xdc.tools.configuro -o configuro                        \% f' `, R$ e# b+ h% n. v
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \- ^) L; F7 I" K3 H" C6 t4 u
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
1 H$ V3 U; ]. ^4 B4 ?6 s20             -r release Dsp.cfg! G7 Q1 |7 {/ f+ L
21 5 y) \+ g1 ?! ]
22 clean::1 W5 @, L. y5 b- B- x- W6 c" ~( Z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674' X" u2 s7 @4 p
24 % D) P; F8 `& G5 d$ p% d
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages' L9 B- h3 D4 F5 a. W
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
0 D% N5 p  Q8 _- }3 l$ O27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages  W- Z' w, Y. B# `+ o& z
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages' E; t' D$ G1 A  F* c
29 ! x+ [2 S9 N4 O
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)0 A8 X& {3 T0 Y- l
31
0 _9 }$ @! L. R" B1 [. l* `32 CC = $(CGTOOLS)/bin/cl6x -c                        
! M$ a+ ^& y( X33 AR = $(CGTOOLS)/bin/ar6x rq
- e% C6 U3 A2 _2 |1 p" `34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
6 h+ ?& h6 b' U" l) B35 ST = $(CGTOOLS)/bin/strip6x. C' X: F' J5 O: D% h
36 * r3 ]" ]  @% p; R% w1 v
37 CPPFLAGS =
+ k4 m, e" ], J38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
- w! M0 u& [9 C6 i  a) V  \, G5 x39
# k8 G- q5 j( L$ C! j& ~% p40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
4 y5 L+ g3 ^* m4 ?" l/ S41 % V8 ~1 Z: ?4 x4 j  V6 K
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
$ c, \5 T7 H! q# v" ^9 C0 c43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
+ C4 I$ A; o6 F! z6 p  {' g3 d./host/makefile
, h; i$ J9 W( i  |/ q. Y8 j, d" F% ~
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件9 I+ T, D* ]6 G% b) K8 }# |
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
, O3 [) f. B. c 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug5 T4 T- }' }  y  d  e
4 3 o6 ~2 R1 T% g* ^# j; T6 T3 {8 r
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
) F! a" P# k$ B& F( b 6 + B7 `1 E9 I2 B4 |- i9 m: |% y
7 all:5 W. M+ ^! E' R( M, n! T. D+ p, ]
8     $(MAKE) app_host
* k8 ]) ?* N2 L# B8 e) b 9 % _6 y& B4 E6 s' h
10 clean::$ ?$ \8 X- ?- d& ~, M9 [
11     rm *.ov5T* *.map app_host" \5 Z) I2 b$ I; g$ G5 D
12 6 W( M# X$ N# a
13 app_host(objs) $(libs)
0 A( K& ^8 S3 ~  z  @, w14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
0 y2 P# k+ |: o( f: L# E15 : m9 k6 @/ Z/ u; c' b" f8 O2 X
16 %.ov5T: %.c
. i% e# n. q" E+ C- z0 S2 W1 R: x17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
3 H. H  t0 _6 J5 W0 G18
. T4 U. L5 ^0 c6 t" e# _19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t% Q5 N* p2 y9 N3 P! l+ n" t' Q
20 AR = $(CGT_ARM_PREFIX)ar cr
' @1 C8 ~* p% t2 }. _$ p9 c4 V21 LD = $(CGT_ARM_PREFIX)gcc
7 V. h( v5 I  H$ V% u# K, x3 j22
8 R5 s! u/ l$ t8 S. A. w23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \8 k6 ]+ Y- R4 f4 r/ k# k
24            -Dxdc_target_types__=gnu/targets/arm/std.h, K) F. ~1 V3 s( u
25
- R1 Z0 {8 C7 f" c6 T26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径+ v  [+ z2 S+ i- {
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
/ p2 [$ K3 R. ]( f* P28          -I $(BIOS_INSTALL_DIR)/packages                           \
  T; d0 h  W/ ?' Q, w29          -I $(IPC_INSTALL_DIR)/packages: m8 v% W# i1 ^! W* t  ~7 i
30
# R* {. l7 A7 o31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map- z; j# A/ r' ?8 I# U: R
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
: m) B4 G8 p; n6 S编译工程! q; l- o0 ^% x3 p
: q# `) G1 i+ D5 o
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
  }9 ^0 a- \* G2 R. k+ I; v" d  g' u! z
运行工程7 N0 \  m, g% a! F: r/ |2 {  `" ]+ P

  z: D$ N# Z8 g/ Q0 {: K; G 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。+ x  M2 y$ Q7 Y5 }) W. q% h# X
2 Q- E/ c! ~3 \5 J* a) Y0 `
1. insmod syslink.ko                    # 加载 syslink 内核模块4 B5 S# _" M9 t1 f, l
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序: n% U1 Z7 ^, J6 U4 T
3. arm_app                              # 运行 ARM 端程序
. V( d7 }3 O' ]# S9 p4. slaveloader shutdown DSP             # 停止 DSP 端程序
; O8 R" V$ T; e$ P# r sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 8 A/ ?5 f  u  @) ~
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
, K2 {: p- l" V$ @
) c' {, d/ n" T8 m  d 1 #!/bin/sh
: i& Z: F, D, I* d! S6 a: ^( e 2
" |5 ?& r. h1 d  O  F" y: c 3 set -x) }( d* C. G# ]
4
. W2 l/ p4 T: F1 G 5 insmod syslink.ko
% d& r& V/ o6 k 6
( `9 c% H. `0 B5 T8 F+ O 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
- _* \9 ?# G) w9 R' H! D. P, ^ 8 . N- f" E! z2 |6 z
9 ../host/app_host DSP
# y) o3 w/ ]+ q# U1 G+ _! X1 g10
, r0 h7 Q  o$ x* s- W& r6 Q  c11 ./slaveloader shutdown DSP2 R; t( O5 T* A+ a% P" [
; e' ]( a/ C; f7 u: c; q, w* _  n
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05* p: A! u5 t& }9 V) d/ _
建立工程, V7 s- A  S: e6 W0 ~
( `' Y' [) B9 Z# y* q
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
# `. P! ^( @# V1 ^% Y9 w4 {2 s
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, c* q8 n! k2 {! M& Q- W, u- L
建立工程
; ~( _4 }% j/ |* e$ I' i5 T( y  j2 J. h% N( V
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

$ |) b, S) ^% f; tslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2190

积分

创龙

Rank: 8Rank: 8

积分
2190
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
! W% F7 t% c5 p6 Z" `5 u+ aslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

  ]7 N7 y  R5 j/ bdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-17 05:17 , Processed in 0.051863 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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