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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,
8 `7 z0 U% |4 V8 r; j+ o6 kdsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。
+ d/ w( u7 ~4 g. F7 l+ n0 ~- ]1 j; p7 f- r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程  ~" f) o8 z$ H" Q( b9 p
) ^$ M2 O+ x0 g* O
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。7 k% l2 O1 |1 a
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。& F/ q7 u1 ]3 a! L/ c! i
 “清理”过的例程的源码如下:9 o' a, _; Q) Q* [0 w
8 D0 `, b) N9 y9 w  C
├── dsp3 Q) W% P: k; t& s
│   ├── Dsp.cfg
, S7 C1 g# A4 T- m: J│   ├── main_dsp.c
5 S' Z* @& [+ `( H* {# D9 g0 ?6 _0 b│   ├── Server.c1 ~3 ?, U6 x/ N; k+ O0 q' E
│   └── Server.h
6 {) P+ ^% o) \* x├── host7 u5 s, N" _& B0 F. S
│   ├── App.c
7 E5 D0 Y/ @4 Z& D* b& [│   ├── App.h9 e- b: @/ w" @, k$ {5 a
│   └── main_host.c* @) H$ J+ c9 n* E( B( k+ L3 b
└── shared. T% z- k# a3 W) P  ?
   ├── config.bld4 c% B4 e' e9 [% |
   └── SystemCfg.h6 Q0 C/ `, w- _$ N
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。! U2 P6 n! Y9 K8 r

; i1 f* I$ l& g( \: n./makefile
8 z/ d# I5 b6 N1 o' k
" U7 v3 p0 @( }+ H& K 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05( h1 N& ^* c. o4 h0 o
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
9 T2 S2 O$ f  t) n) C$ F4 A 3
! Y# W" K( D3 t/ r& Y5 p# U% l* n( j  A8 o 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
7 j9 X: m' \/ A) S) ^/ j/ B! N* R* F 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-. ]8 o# h& Q  i) t# }# T
6
8 Y% r$ |# {: Y" M 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
$ c8 d7 s# N2 E 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72) k( `7 V4 O' b( e! s
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4* P# ]& k7 t% m, d% c: ]5 X
10 ; v' z8 G4 u- [* j3 N0 U/ W
11 export SYSLINK_INSTALL_DIR      \0 E1 z6 b* ^1 d6 n
12        IPC_INSTALL_DIR          \
4 F6 Z$ W& m, X13        BIOS_INSTALL_DIR         \. [% N- }8 X* h1 _" z4 u
14        XDC_INSTALL_DIR          \7 Y4 O2 m7 o2 `5 o/ ~& w7 ~
15        CGT_C674_ELF_INSTALL_DIR \/ S; J- k5 v; G* n$ @
16        CGT_ARM_PREFIX
/ V8 e) j  R7 L0 c: L17 . `; a+ G6 {1 ?# P
18 all:! C$ G  o% O3 @% g( k/ Y
19     make -C host all. l- u5 S6 c6 o  w
20     make -C dsp all# X% W  b7 ~- }3 ^6 E8 l+ E
21
0 P2 I6 t+ j! B4 n; @4 {, e22 clean::
0 k! z, q" i/ |5 c0 b23     make -C host clean' w9 [. u/ K8 q& D* S9 \
24     make -C dsp clean
& U& L+ y* |- Q$ s: d, K./dsp/makefile( w. `. V- s9 _0 A0 K5 N0 A
7 J% A3 s& S- }, T) {! C
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件1 \; |7 |& X- x! M+ L
2 objs = $(patsubst %.c,%.oe674,$(srcs))
, j9 v' N1 Y3 F. e4 [ 3 libs = configuro/linker.cmd
. n: O' R7 x6 V! M& u& c' c) D' B- S' V 4 + b8 P* V( p; J* Z" Q0 z
5 all: configuro/linker.cmd
9 `; a1 t& c6 \9 T/ c' x7 t 6     make server_dsp.xe674
7 I" Y6 e4 a6 y6 \7 _ 7 / a/ F9 j) E" v! X3 D% a1 ^% ]+ k
8 server_dsp.xe674: $(objs) $(libs)
1 \6 L# s9 N! ?' q1 o8 Q& X 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
1 j% d: O$ t/ N% S# Y- j5 R- `% `10 , F, ^1 Y, v0 G- S
11 %.oe674: %.h
4 f' l) m. m+ j- J4 u12 %.oe674: %.c
! c$ N2 r/ a7 F& E13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<  g9 e3 w5 y. @& b9 A) j
14
0 |* C3 _' d- Q15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
5 a' i; D- ?) B0 g2 I16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \3 d7 I" @0 ^0 u& a4 n; l& W, ~
17             xdc.tools.configuro -o configuro                        \
  g3 G( N+ t! N% c6 ]/ z18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \. A' m" `# r! j
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \( _, H% q) h9 s; e7 R4 ]
20             -r release Dsp.cfg
% ?+ w$ \( p. t6 O1 F+ _! }( M21
  s1 ~# o2 Z; @22 clean::4 E# n- k) S0 X
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
3 O* z4 m( s- `; {2 @! m2 M24 ) P% n4 j0 j* \
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
' h0 J  q& x9 G& m26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
  d$ ~/ ]% H# s5 I27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages* o) h' i. c) v7 q/ E+ `
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
. o& M9 v7 \. S  J9 [4 q1 b29 3 v/ W' R* z5 q* N. \% c& o
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)) c' r6 o. b$ l
31
4 E! h3 a2 Q& l: n32 CC = $(CGTOOLS)/bin/cl6x -c                         & c6 M9 u* Z: t3 C' }
33 AR = $(CGTOOLS)/bin/ar6x rq
$ W$ a; k' J% H6 u9 P34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi0 X3 }1 c0 h0 Q0 m
35 ST = $(CGTOOLS)/bin/strip6x$ B- I4 E. f9 @* \, M* g
36
  r! i5 a* ^3 a9 _6 V' C6 L2 K37 CPPFLAGS =
% r! R- P  j* o' G38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)4 u1 V; p  Z$ |/ O1 h. h
39
& X* f  F5 W3 Z  u+ p40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
+ e& e) x, _# f7 D) V* u41
( i* n1 C- N! D1 p' r( s42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     
* g& _& ^  B4 I43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序  R7 C, v: t; y, X$ n7 y
./host/makefile
% r/ s8 i& P# _1 T2 M0 T
/ ^+ @2 p: O0 S/ i( l 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件: A- @$ W2 m( J" e4 ~$ X4 E( q
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
& k% m% M# l( s! V: Y' ~$ { 3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
9 O2 b; W. H& f% F. _ 4
% P, i* x5 y: ^ 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))/ d# q( {- t; }5 k1 t# w
6 . E" R( u" h" J  ~: T/ I5 P
7 all:. K' A6 y5 Y- {' G, m" _
8     $(MAKE) app_host# k7 `% h: C( I
9
6 O3 `6 {# g% Z' _! m10 clean::
- c0 a) j+ u7 \/ l11     rm *.ov5T* *.map app_host" k  s# l2 r& F% |( I; ?
12
4 t. T4 s" ^2 T1 q1 ?% U& \' s13 app_host(objs) $(libs); |4 F+ Z/ d' k
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)! b) _# L6 F5 R( ^* L# o; n
15
$ o5 d# ^4 \, @; Y1 J2 K16 %.ov5T: %.c
$ D, W$ K! Q9 Q1 p' y5 O17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<. s0 S/ S4 }% E( r! p. N1 G* z
18
4 N+ g- m5 E* r$ {) Y2 i+ w19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t6 s. M* M, m3 n! j
20 AR = $(CGT_ARM_PREFIX)ar cr  F8 i( ?( Q) G# G* J
21 LD = $(CGT_ARM_PREFIX)gcc
: c' }% k# ?: h$ W- c22
0 @% Y+ g4 J* x23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
" t  u5 b% ]* ~# [3 L8 U+ b24            -Dxdc_target_types__=gnu/targets/arm/std.h/ u: k4 Y1 C+ p2 q! K
25 % E. w! l5 x! {" I4 @8 W+ ?
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径+ k! x" Y5 }1 y+ p  g+ Q! b7 e# @6 G
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \, H" o4 g# t) Q
28          -I $(BIOS_INSTALL_DIR)/packages                           \% }3 V3 [0 ]4 W$ K( q8 ~9 f/ s4 F
29          -I $(IPC_INSTALL_DIR)/packages! v9 r2 ?9 q" Q, J( G1 E3 h
30
2 G7 _9 T& K) F, G  S* w& K( q31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
2 l: V# _6 S% @1 R, G5 g32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序! {8 Y" }' m5 p- x* h* ]
编译工程9 _% V2 y4 F0 K' M8 U+ `8 |2 q

; v0 a" m! C5 F( X) I makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。6 q6 ?9 |8 o8 h4 `* a5 H* M
, \& G7 a5 O8 M4 G3 q! s8 S- L
运行工程
6 k. H# X! S2 t: S6 i% ?$ U& e2 d/ Q3 S# `* z7 }6 S
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
) M/ n3 c, ~7 i" p) N3 O9 u  R5 j1 l. l
1. insmod syslink.ko                    # 加载 syslink 内核模块2 l' A8 M9 y; n6 \" h/ v
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序% H( Y. r# v- c
3. arm_app                              # 运行 ARM 端程序
4 k4 s$ g) q: H; X% p1 M  R; i: _4. slaveloader shutdown DSP             # 停止 DSP 端程序( q. q: d3 F) ^9 G/ h& x
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
3 P) O( s9 Q8 @# e0 q/ R* h 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
( W/ j/ [( X# Z( z# J1 d1 j+ C( Z" F* R' B
1 #!/bin/sh
8 Q! b/ H1 S/ G3 v  Y4 j 2 1 x, m+ e/ }& ]4 N0 j' d
3 set -x/ x4 I- {3 i/ y% N7 w, ]5 X8 N; `
4 * L% Z" E( N& X( e; _6 R/ u) f
5 insmod syslink.ko
( O# E. z' b' t5 ` 6
; Z' z9 F+ b4 t2 D6 {; D4 R4 R  ~2 `0 ^ 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
% P3 g! G: s$ V9 M( f& j 8 - i3 i( k8 C" _
9 ../host/app_host DSP( H. j7 [% M8 k/ O
10 , F. C" o7 V4 w5 m( K  b
11 ./slaveloader shutdown DSP1 X; Q2 Y% T& P! R! C

: J. l) Z$ O+ K& @& g' h
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
! _" y' U$ v8 v2 e- m( p建立工程
: d/ |8 c3 g+ K" f: y; o- N+ Y! n2 {/ j8 {* v! n9 }$ ^
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

" K7 r) Y( c0 O1 B* k& t  h6 Zslaveloader 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
; x- n) G9 j, Z$ T+ ?' U0 B建立工程
/ R0 K8 f9 l* Z2 P. T. y6 M7 z" \: ?* M* V
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

; b- t8 Q& Q+ `1 S0 fslaveloader 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  Q& r. q- k8 d, }
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

# N. [) S0 ~  Udsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 18:13 , Processed in 0.043046 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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