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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
: |/ q: Q6 ?) d! `8 J3 Edsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。$ E+ [0 G* c2 L
- ^) {! P: m, ~" w; y0 \* ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?% k/ p( t7 h+ R. C2 K, W/ {0 Q6 _
回复 支持 1 反对 0

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程4 t1 Z$ K9 j) Y9 L: @2 i

1 H# g/ ]7 d1 k3 C. P& G' g 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。6 l4 z2 @! N' h* d' o( x" W
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。7 i/ y5 k: h: V! G7 L2 j; M; D
 “清理”过的例程的源码如下:$ v' a; Z; `# u7 }) w' r- N+ U
0 ~! j) P, i! C5 Q. [0 A
├── dsp
; o  V3 ~* p& V│   ├── Dsp.cfg
0 M' k9 m# @/ P0 ~+ `4 P│   ├── main_dsp.c
, V8 |7 \) Q5 n5 h# t& v│   ├── Server.c9 U* R3 j& `2 `, F4 ?' i
│   └── Server.h. S6 o: r, Y) ^0 A+ d4 {9 n) a' G
├── host
- p% J' ]! ]$ F3 z! U5 i8 a3 j│   ├── App.c
/ E% Q" f% D& m3 r5 T# }# {0 s6 m│   ├── App.h! u7 }. E% e2 T% |
│   └── main_host.c
- v3 Z+ e# k  T4 E# _' X/ B└── shared! m3 E5 |9 x; `% P' h0 [
   ├── config.bld
/ O9 M! R7 {- C1 @   └── SystemCfg.h
8 Z. V5 \5 l. c/ d# b) y9 V 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。  v% _/ Q/ @7 ^% Z/ [! K5 T

; \1 U: H; I/ L* n2 Q* I, S! O1 a./makefile- _& O2 H- [/ j5 P
3 R) g) w9 {1 ~5 P3 K
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05: y5 W. h- y# a
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15& C5 h; ?/ G3 b) }1 o' F/ X
3 ( ^  l- p' S7 v& d* B9 O9 \/ C
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
' r0 G- b& y. y- U! n2 v0 O7 _ 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
; d; J: A2 R- p9 Y+ v/ `. c3 O1 F* T 6 1 s& n- ^/ O9 z! |( p
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
" s2 X* }5 O; [$ d+ L! } 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
# ?' W7 m1 `# c, f# @ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
( ?( S- A# i0 ^' R0 y10
% o+ k- h! U# h# H+ }% j11 export SYSLINK_INSTALL_DIR      \" A0 q. i+ W! b! i3 R
12        IPC_INSTALL_DIR          \2 Z2 `* Z4 f; l4 w0 |5 M
13        BIOS_INSTALL_DIR         \
7 f0 Y! A' ]6 R14        XDC_INSTALL_DIR          \$ G2 y) r, X. Q# ~
15        CGT_C674_ELF_INSTALL_DIR \( Z9 [# s3 G% h1 T4 }: `# j
16        CGT_ARM_PREFIX
' c. {9 l9 Y" y17
  V2 G" |- Y% ~18 all:
+ f/ K8 B, c% Q, j19     make -C host all
$ m1 g1 q& P% a, Q) ~20     make -C dsp all
6 t( \7 q! W+ g( _4 r21 % h7 _0 K' `: J; X
22 clean::
! O2 @; W; D9 z! \' }23     make -C host clean
) [8 |0 _+ y0 Z8 w24     make -C dsp clean
7 W( ~" q! v5 E) [# u7 M- L, y/ j./dsp/makefile+ J% j( H( B1 Y  N: g9 P+ r7 ^- C4 W

1 n' C7 C& i7 X8 _+ M. v- P 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
5 `. c7 c  _* V" I. h 2 objs = $(patsubst %.c,%.oe674,$(srcs))
6 a9 X3 {% E* Z. i# c! A 3 libs = configuro/linker.cmd
* p. s) Q; H2 H9 Q$ F- C8 l 4 ) t0 ~- \( z. T, ~
5 all: configuro/linker.cmd' u# K# s8 y3 X8 L6 _9 v; j
6     make server_dsp.xe674
+ K6 N$ T2 q; y$ @ 7
1 q: W# `5 Y2 b8 s# h3 B$ |7 h 8 server_dsp.xe674: $(objs) $(libs)
" f; Q. _5 w& L8 h 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)/ p# z( S8 p) _- w! `; O+ c# {
10 6 S, F2 [# V* R' |7 u; N
11 %.oe674: %.h
- v. W. P$ R+ F12 %.oe674: %.c
% @& }7 w0 D5 W& e  Z' w2 h13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<* b6 K7 V$ ]) W* R: ]
14
- F5 D  z1 B, e2 v% h# e15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld/ ]" H+ a: Y- K* }0 F: a! w! H
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \" e0 r0 l- J2 u% O( @7 w5 G& Q
17             xdc.tools.configuro -o configuro                        \
/ B& s" P/ F# M  ^7 Y6 t18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \% c; S/ I. \! Q; N0 ~* G2 M
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \7 o/ c9 O, D8 F# E4 P% ]
20             -r release Dsp.cfg" J& r5 V9 v+ M. z
21
5 Z: R! [( J) s5 f0 f. q6 v: L22 clean::
4 E" }3 E$ z! H: V$ a. S23     rm -rf configuro *.oe674  *.map server_dsp.xe674
6 R2 ]6 k, J  m7 G2 I; P24
/ S$ y8 D, v, s% r3 Y25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
% W" u" H6 I+ G' ?7 N  u26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages) j) l* k7 E  R& C9 {3 f
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages1 @1 _) T, @/ |( g( [( }
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages1 P+ ]* u( O# g
29
/ Z1 t- B3 V+ o  b30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
, x" }+ \; t  \; L, [9 u5 b31 + \/ {" f' ?- P" a! }
32 CC = $(CGTOOLS)/bin/cl6x -c                         ( Q1 y  W' H  Z7 Q2 j/ L9 n2 Y
33 AR = $(CGTOOLS)/bin/ar6x rq4 ^" n* T% O3 q0 ^  d7 @, O
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi+ W# Z# ~# `$ X  E- f) o: J) C2 X
35 ST = $(CGTOOLS)/bin/strip6x2 \6 w5 b. k' A
36 ) E8 P) B& _& t( A
37 CPPFLAGS =
& t5 c: j3 |) G+ `9 L$ @38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)6 C2 V! W) @0 B: ~7 W
39
7 M# T8 g5 `- h1 U8 G9 [40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
6 L8 ~6 ?+ V0 b  x) w: r41
  Z- g+ \+ ]# g3 C8 ]4 k2 ^42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
9 x1 o. h, M) M43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
! t4 G; w4 V* R+ x: }7 p- }% j1 ^./host/makefile
3 e" k6 X' K4 E6 H% Y) n0 F, u/ X2 B, V% C+ B3 b- |: R" R
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件
$ [: Q8 d, K& o$ @, |2 m& d6 ~, @ 2 objs = $(patsubst %.c,%.ov5T,$(srcs))
# Z6 n) v0 E/ ]8 { 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
# J+ w. B: f& n4 d1 J8 t 4
/ b* y, N1 y) D, @$ V* r% M 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))2 H$ n# {2 H  w; x! f- c4 E
6
% C( c# t" ^# V/ ]4 u+ Y 7 all:1 W' X4 N  p7 h5 q$ `3 t) Y- H
8     $(MAKE) app_host4 _& @6 U( w# [5 \" X
9 ) o  r: h, L3 y8 ?& F
10 clean::  C0 N8 t8 ^0 P3 b* A) ^9 B5 T! Z2 N
11     rm *.ov5T* *.map app_host6 j/ a( x+ D& E: i5 ?, u4 C7 }
12
7 A# |! x4 m* S$ D- F* c13 app_host(objs) $(libs)2 f4 d/ D" b; b& z/ ?( ~$ J
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
9 P( d' }& V3 u5 |+ g8 H: b15
) R. H" q4 w( M# @( ?16 %.ov5T: %.c7 _2 ~& O3 u0 I) E# e) H
17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<1 U4 r7 q0 p* p/ C4 e* k9 T+ U
18 . U! U0 k% ^' o" H) J
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t
* q0 `; T( p& S6 u' G20 AR = $(CGT_ARM_PREFIX)ar cr
8 D' C: ^  s: W21 LD = $(CGT_ARM_PREFIX)gcc! ~6 `# @6 d. B$ F' @; y
22
$ Y. X2 n" j3 R9 ^. F/ y23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \/ s2 o  n; l2 i6 v* Z, H& f
24            -Dxdc_target_types__=gnu/targets/arm/std.h
  ~4 d9 ~; r9 A7 i25
1 ~5 W* @; k0 k; i- t26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径- _/ T+ D" A+ x4 ~' z! H! t% l- k7 k
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \$ ?. M# O) ~/ A( R1 h
28          -I $(BIOS_INSTALL_DIR)/packages                           \  c8 ]; h. R) g' Q% Q) L3 m! u1 d
29          -I $(IPC_INSTALL_DIR)/packages/ Z# |  k2 S9 I; @- p
30
/ [& D. _3 J+ D31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map. f  ~3 G/ a( E+ C4 R" o
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序$ {( _' T, a" Y( k" J9 Q0 V/ b
编译工程3 a  }* T, E8 w) a# p# m
4 b2 O% _  x) v
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。5 Q% J- F( }3 Q7 S

3 M8 G* V0 S) M8 s1 A* t运行工程
/ X# w2 A. J9 a+ d6 y2 [0 [
9 `, B4 G+ Q% Z5 T9 s 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
5 \% E7 \- g" i0 D7 E, T9 I( W  d0 r- b; C- M
1. insmod syslink.ko                    # 加载 syslink 内核模块3 C, q7 H+ D) y$ x7 ~* N
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序4 D6 V+ F! @& y/ D# N: W6 V
3. arm_app                              # 运行 ARM 端程序9 s0 K, S1 i6 Q; t7 T6 B7 n
4. slaveloader shutdown DSP             # 停止 DSP 端程序
. k" D* C: a2 O. g2 G& i: p- e sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 ( O; p7 t9 d  \
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。9 Z( _5 U# ~0 c/ k5 J4 z$ W
+ u: y% L$ b" c' l
1 #!/bin/sh( d" a6 X  Y8 T! k
2 ) k$ |0 I$ R  g+ f+ P* w
3 set -x
8 P2 w2 F  J9 [3 P6 w5 E 4
2 _' s! `, _% B 5 insmod syslink.ko
* w7 F5 U; S' D 6
; D  |# Q: Q% ?$ A" ]- v/ y 7 ./slaveloader startup DSP ../dsp/server_dsp.xe6740 N6 k+ K2 q: a, U' K! G
8
6 V: K' ]6 t- }! m; a 9 ../host/app_host DSP7 z. I' q2 @) `
10 8 y% C9 Q2 [) k7 H2 t
11 ./slaveloader shutdown DSP
* Z- |9 L5 c* j6 {. N. p
. \1 [8 V4 N& d
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:053 i2 h" }" s: A9 z: U
建立工程
; |2 I+ Y: A2 i5 {$ r& u* s2 Y; J$ ]8 @/ e- z
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

1 t% J# P" }7 A8 yslaveloader 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
. _; p/ c# u0 E- V4 k5 q建立工程$ H: e4 \1 T0 u" Z  F9 r- d

! t0 U5 B1 f- _ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
- N- v' @2 Y5 R  l# I6 h7 b4 U
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
4 Q$ `" ?9 b! v, ^slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
( `8 E4 E7 X/ y! x
dsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 15:22 , Processed in 0.043741 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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