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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,, l6 s1 s2 x- H$ p3 `
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。: v" G( t! s  r6 y$ l  @
; O* u" U) h/ R3 }5 ^4 p0 B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
. W5 Z3 I5 T% @* V3 M, a/ l$ f6 E0 e: i3 a4 d& q  J4 \
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。, D- E. Y0 @) Q) @0 ]
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
$ O8 R  p" P# c$ P1 m “清理”过的例程的源码如下:
0 w( `3 u1 x6 i0 q! \8 K0 Y( I
$ R. F- Q0 @9 A1 ^7 P/ o- e/ g3 L├── dsp
( K  L2 w2 N) }' C* ]4 W- T+ q│   ├── Dsp.cfg
% T) o0 j) a& ~0 i5 W( e. ?│   ├── main_dsp.c
. a0 y2 Q0 v' e5 H/ Q# [│   ├── Server.c/ I- F8 r8 }" t& p' L
│   └── Server.h
" t  e4 r6 P1 g, F├── host( ]5 F/ m0 r4 [' |
│   ├── App.c' H/ w6 m3 Q5 ]8 \. ?8 m
│   ├── App.h7 H: h5 |4 s$ c3 u# L
│   └── main_host.c
" e! e$ ?7 f) t: {└── shared
  x+ ~$ L. H( l/ E   ├── config.bld3 ^6 b2 M- _1 O4 A( j  a  p+ L
   └── SystemCfg.h
" b0 j/ k9 s7 I: r; M& x* ?1 H0 e 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。+ u! r# C  u. v% {
% x3 v& k! e7 _( i+ l  T
./makefile
* b4 v' K3 X; m! ~# q$ Z. b; e0 H" [
9 t$ |1 ^0 Y8 P" W( g 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05
$ [3 |! Y1 V/ h$ c; D5 ?9 A* C% w 2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
0 R1 m- Z; W8 h1 I. w- e 3
6 L/ \! e9 x) @ 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
9 B9 s; `% O% p! D/ g 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-2 i) `8 p, d0 J- ~' n8 R' Q# x
6
# U7 p4 v  `1 f 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50- h; B& s& G! T# @
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
% d5 N. N1 [! i+ F 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
, ?5 H8 }) u, k6 X* B# R# G10
3 t% }) r% R, r9 Y4 L11 export SYSLINK_INSTALL_DIR      \
2 T4 {; h0 U9 C' W* }% Y12        IPC_INSTALL_DIR          \, \7 k  T2 H- R1 B; o  w8 N0 k: _& A
13        BIOS_INSTALL_DIR         \, G/ e5 {+ I$ [
14        XDC_INSTALL_DIR          \
5 ~4 \* L- j5 B( n/ Z15        CGT_C674_ELF_INSTALL_DIR \
, o( E9 i  m7 A+ f# l: V  U16        CGT_ARM_PREFIX0 D' S1 Z( G  f) N7 f! J/ S& L
17 7 Q! z5 z& `; w; J! E0 c
18 all:
. b& g7 e1 ?" j5 i& i+ ?19     make -C host all
4 d2 ~* }: ]# E& @' d6 u1 Y20     make -C dsp all
! e' a. b: n3 _5 i21 4 p4 W# f; s3 K9 L- n- ^% n: h9 C
22 clean::- |# Y  ^( }) i% {) I- M! t
23     make -C host clean
" q2 R. d+ q& }" v24     make -C dsp clean1 J$ Z: b8 s( j: p$ \6 b8 e' o3 Y! p
./dsp/makefile" r( e* W. n. z: i: z* C

* Q4 J. K& ]' Y- J. T; ^0 Q 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
  g- y% z/ i9 A6 G1 q) x 2 objs = $(patsubst %.c,%.oe674,$(srcs))
: K- v2 Z# b, X; ~) Q 3 libs = configuro/linker.cmd8 h, W; f, ^: A+ Y& ~7 ^
4 4 a- o' x, x- k# w/ s
5 all: configuro/linker.cmd4 K# d5 u8 U/ g  Y( i
6     make server_dsp.xe674
, D1 G3 {& u$ l' Z 7 ) P# H0 r4 K8 W7 C' _# Z
8 server_dsp.xe674: $(objs) $(libs)' z* o5 W/ ^6 K% V
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)# j/ `, L% b8 H
10
1 Z* j( }! Z% E2 l6 H" k11 %.oe674: %.h2 N( x1 H% A: e9 l4 O2 u
12 %.oe674: %.c2 J/ s7 h6 x* t; S
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<% x1 F: f: m. F- x
14 . ^2 T, H, S: {, V! i
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
/ m: i: g: B, P/ N16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
# a/ {4 }- i: p$ O, o* A0 L0 F8 a17             xdc.tools.configuro -o configuro                        \/ G& W. N8 p0 K/ k
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
1 D! I# y, _% n* ~9 y( _$ M$ A19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \+ t: I. ~8 e( d9 T
20             -r release Dsp.cfg! j% N& n) b9 h- ^% [. u: c
21
: l& A0 E0 a6 w! }% ]7 G* V22 clean::7 X, ]4 |3 T) K/ a# ~/ z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674" ^7 C: u8 B" D9 m1 U6 c1 r' _
24 . i' B! M, @/ j- }2 ]6 b
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
0 U2 R# C! t+ d* N& z26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
8 Z" J" E4 L( J27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
8 S8 r, I: f+ |4 z, V28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages" @# E1 N/ ^# P/ c4 @
29
; f3 N$ b& }, ?3 u& r8 _6 e8 p30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)7 e) e" r$ x0 Y: Q: T
31
# f% z1 j9 V4 j7 ]" W4 h0 |7 w32 CC = $(CGTOOLS)/bin/cl6x -c                         : U, p: D9 d- ~8 t, a3 ^
33 AR = $(CGTOOLS)/bin/ar6x rq
# C1 h* w% R6 E; B7 l8 d34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi& o. Q5 c4 V1 i; P- D6 g
35 ST = $(CGTOOLS)/bin/strip6x7 ^7 z( L0 s  r
36 ; H- Q  n8 g* |4 I# h
37 CPPFLAGS =
2 w  @9 ]) _3 {7 y' O1 y  B38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
  f( i8 _0 q; Y$ N; `( C% p39
" q+ ~% X5 H  q- s2 I/ e' _. T! m40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)1 z1 o8 A8 c+ W1 N6 M5 X  D
41 % d# F& n- M3 S& U
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
0 l1 j8 g5 O, o- h43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序/ ~3 V6 y. r- x  G- x. F
./host/makefile  J) Z% `8 d* ~: q1 w  f% A( H7 j2 y
) r- h( ]& B7 e9 j$ @
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
. M+ h9 {  K$ {; r+ H" p% a 2 objs = $(patsubst %.c,%.ov5T,$(srcs))* Z& h: ^# e( J" C( L% w
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
* R8 \- `0 Q% L 4 ) I( E- ]8 L' c" ^5 f' [& ~; {9 n
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
+ H. k5 Q9 C  j& ]( b9 z 6 & g! p, F$ O" ^6 @8 `4 F9 `  Y
7 all:
1 t' h( l/ m: { 8     $(MAKE) app_host
- n5 a, x' H: w$ S/ ?7 Z 9
# Y0 t0 F: Y: n" W: @1 ?10 clean::: {$ {2 W# V" [2 y, f1 [
11     rm *.ov5T* *.map app_host! g9 p% W2 a7 O" n  x* w2 e
12
6 e! i$ ]: b" \4 b9 `13 app_host(objs) $(libs)2 r- B6 _, d& @# Y/ g
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
9 m5 p1 g  [' G2 D15
5 C4 B0 M" b: i+ M& h/ t4 g16 %.ov5T: %.c
& ]+ n. I) D4 }8 ]5 z0 g, S# L8 ^3 B17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<" M; s. x2 @' Q  L
18 * a5 O2 S6 ?$ a
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
& Y+ Y$ i5 Q. p) U0 `20 AR = $(CGT_ARM_PREFIX)ar cr
4 Q' k' @, q7 ^. E21 LD = $(CGT_ARM_PREFIX)gcc( P3 E/ ~- t' T# b
22
  r6 A( b- y. O3 R/ f3 N5 T; k0 k: j23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \6 F6 z! D! x3 n# U' d( L
24            -Dxdc_target_types__=gnu/targets/arm/std.h
3 R1 E( _" q9 o- B* s25 6 h0 F/ C' C- f3 j; H- N) O
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
; y$ |) {( v& Y0 o9 O) t8 h+ w27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
( ^  P5 e: R! i% h28          -I $(BIOS_INSTALL_DIR)/packages                           \
. P1 |# `' _. q5 K29          -I $(IPC_INSTALL_DIR)/packages* e0 e! Q% g% t& U* p9 @* G
30
9 d7 O2 d* t5 R1 U4 K5 N$ f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. C4 E+ y8 h0 m" P: q8 C; ?9 Q5 A+ @
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序$ G5 W5 f2 N$ D+ z2 _3 d& H+ b
编译工程: m7 J* ]" a' c' ?& p' M
3 ~* }( D6 n# F& X
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
  H2 R0 C" N: g7 D
4 c! N+ J3 ]' k8 N! h2 O# A7 p; \运行工程
8 U; l; L/ ^9 L: Z0 e6 ^' P% U. M2 M' \7 d; t/ J
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
( w* O) W: Q  k
8 V3 Y( _6 h. X. X- E1. insmod syslink.ko                    # 加载 syslink 内核模块
# X7 @' |$ j, Y7 O2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
5 O& y2 O0 `2 z1 ]9 `( v- o3. arm_app                              # 运行 ARM 端程序
9 ?8 \3 J% E5 i9 Y% F4. slaveloader shutdown DSP             # 停止 DSP 端程序
! m/ C; U8 t. h0 f! m/ r sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
; @. p0 S  d' j  l 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。0 z) {4 X: ]+ n
) E2 a* ^& X/ Q5 h4 A1 O2 P
1 #!/bin/sh  h8 S& V+ n' v; G
2
6 e& ~, X) F& K  p& q 3 set -x9 C7 h5 |1 [% J
4
$ ?$ k0 R6 B/ p+ F+ ` 5 insmod syslink.ko. g1 D0 H9 n: r! L8 D9 t  C
6 . ^$ i3 N/ K4 R1 W2 H7 T1 p
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674) \6 H/ i4 f: G7 S
8
: w" p) K; B, U/ e) I% R 9 ../host/app_host DSP
" r1 \- i2 q! L7 y10 ; Q$ p' {/ @9 I; T# |& F' @- g
11 ./slaveloader shutdown DSP
  x' ^# }' b7 M! T. G5 p4 G- D- K% n6 w! T
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:052 D) C8 H6 X4 }
建立工程
% K, C. i/ C& `: R) f+ S6 J, m2 r' C
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

4 D) S2 G' `+ A+ lslaveloader 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
2 K) k1 g) E$ o* o( \- d" p建立工程# z9 t7 G% T4 M/ D1 s
, ~9 W" i  K( I8 w8 h1 d& [
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

0 l) h, G( ?* y4 d9 |slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2163

积分

创龙

Rank: 8Rank: 8

积分
2163
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
+ N" d1 A  S, Z, K  cslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

3 b6 L; q$ ~7 E, _! Ndsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 02:07 , Processed in 0.083689 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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