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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,$ g" R  P0 ^& B3 d: g  h
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。7 H* }8 T" Q: Y3 v

! B: ~  U3 O- O6 n" g2 R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程# ]  x: o. g6 d7 h% Q  {
2 W: L. ~. Y5 ]% Q! ?7 r) G( S
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。; \2 t( ?7 R& `, ^. e
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。2 O) B, H& }- `1 B. H- l- Z  q
 “清理”过的例程的源码如下:
" \; R1 O' {# B! E' Y' r
5 x" W1 R$ c8 Q$ G/ O9 a" b├── dsp0 m/ l9 X  h3 W8 F( t$ U# p0 q+ s
│   ├── Dsp.cfg
6 V6 Y# W& H5 L' M# V│   ├── main_dsp.c
3 O' ], Y6 O! Q+ k6 ]  [│   ├── Server.c
$ V7 y+ j9 M! \& F2 D2 G' J│   └── Server.h3 X* T4 }/ ]9 H
├── host
1 D. S. m2 U6 @6 Z1 ?) K│   ├── App.c
, R8 t/ b" e! I  H% n) k) _│   ├── App.h6 d; }0 ]- @3 Y# \  J
│   └── main_host.c
5 H3 h7 s. T& m└── shared5 D! O- D& R3 }4 u
   ├── config.bld$ K) p9 ]5 w3 j& `
   └── SystemCfg.h4 [9 F  R! a8 l- x) J- p7 n
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。( g( B1 b* s' `2 m* e: d
' g) R8 B* h& h- ^: j5 K
./makefile" v0 l1 H  a% y6 H5 _( _* o8 Q5 U

, r* S$ ^8 V# g- G  p* I3 _ 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_054 e8 z' I# n! G+ @7 M- q+ k" q
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_151 @1 m8 R+ c$ w: }! k
3 9 g# r% o" S/ `; D0 D  S
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi" y" Y& P6 N; f2 {0 G( O
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
9 n. m9 ]9 a, s  Y 6 8 ]: ]0 n' d  P8 V$ Z8 Z
7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50' V; x- C8 B- L! d
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72
' o# E) k5 k; ^ 9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.46 J  S5 \/ k7 m8 ]; x
10
9 X$ ~0 X, E* c( ]% ?9 [0 x4 ]11 export SYSLINK_INSTALL_DIR      \
" [1 x# Z+ t6 p8 Y4 R6 n12        IPC_INSTALL_DIR          \
- A( P- _+ q9 t9 }( M13        BIOS_INSTALL_DIR         \& X9 W# Y/ o2 J3 R; ?
14        XDC_INSTALL_DIR          \
: E) Z% _# ?* {% u15        CGT_C674_ELF_INSTALL_DIR \# s3 Z- P; X$ b& ?, @. P
16        CGT_ARM_PREFIX
6 h* l+ b  ]3 @& z. r17
, F, z; t' m' M0 W18 all:
! q8 L4 P, M% \6 |+ G& ?. y7 U19     make -C host all$ M6 Q& ?( c! C4 {0 f+ n
20     make -C dsp all$ a: W* z" Z; t) {  e' F9 H4 ?7 a
21 3 d5 U/ c) i8 q7 w
22 clean::
, F; @" b& X' r% J" b+ y23     make -C host clean
+ \& e  a6 ?% l; _+ B24     make -C dsp clean
' V/ s& |7 B) J# v" C./dsp/makefile5 y1 }% S4 a( c& Y
5 e7 F% l* C4 B% r
1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件' D8 \& `( R* m# _9 j. F- a1 W
2 objs = $(patsubst %.c,%.oe674,$(srcs))
; C$ Q9 n/ H  c3 z9 X4 a! ` 3 libs = configuro/linker.cmd
* \- L- z( i' Q+ r 4
6 `3 Z  I7 e- o+ t5 ?4 U6 l 5 all: configuro/linker.cmd, Y4 a/ z& B" m9 @: M' G
6     make server_dsp.xe674* E# {2 ^1 E/ j4 R
7   V/ A# o- b5 B  J/ ^3 H: z
8 server_dsp.xe674: $(objs) $(libs)$ g( X2 h3 h. H3 i4 H& \1 o; t0 \
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
$ i0 b! ]7 Z/ ]; g5 N10 . A* a  A. f, m
11 %.oe674: %.h+ c& E5 l% `2 ^) Q% W6 d
12 %.oe674: %.c
( G9 ?" s1 G# K& S' I" S+ K$ f' U! ~13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<# G9 z  w, b) _6 J8 c8 E
14
6 ~- J( k: s+ Y' L  {( q15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld+ M- |* M5 [8 h7 L
16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
- w$ z+ F+ x; \6 h7 o( f) d+ e) x( q( V17             xdc.tools.configuro -o configuro                        \: m* s+ G0 s6 C9 d9 Z
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \( s+ i4 X# ~. X3 u# H
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
7 \' R+ I/ l( D( G/ N20             -r release Dsp.cfg2 V5 d, a5 a% b5 {, J4 G
21 & }) C. N2 p5 f( z
22 clean::
' T2 ?- L" }. `+ o23     rm -rf configuro *.oe674  *.map server_dsp.xe6741 O* e9 c* Y" ~1 q' v
24 6 N( J4 ^) }$ Z+ X6 Q
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages: N* ]  P" G) ?, N; C, J/ _& q
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages: z; _2 N$ c7 G- m. c( B# [/ I
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages5 ~+ B! A7 V4 |. i# z* U  h: y
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages( Z) {8 U1 \9 `5 M6 ]; G
29 " l7 }. `% c2 S( X+ D
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
8 t$ o/ W& n$ I. ^$ u3 C31
0 ~$ Q. W/ c+ L  D# \32 CC = $(CGTOOLS)/bin/cl6x -c                        
2 E9 {7 G' Y/ m& }33 AR = $(CGTOOLS)/bin/ar6x rq
5 V3 n; ~- W1 s0 v34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi8 t( k  O, \8 n
35 ST = $(CGTOOLS)/bin/strip6x
3 l, |% P' N9 M7 x) C36
$ G7 H, f; @2 r# ~' r4 C37 CPPFLAGS =
& C; r+ B' Z9 F7 n: H3 |38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS), c, `# ~3 U3 z
39
/ R! h2 t5 v, l9 o40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
6 y2 O( e1 M" h$ i0 u' n41   H" v5 A! C; I  t: c& ?' `& b, \
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     ) z/ d9 P% [8 Y8 R$ j, S
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序
0 g5 ]0 u6 G; y  m% k+ y3 _./host/makefile# W4 J/ K9 o! ?* m8 V
4 F! H* B% k' M1 s3 K
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件$ R- ]0 T: X: |# Q! p+ U
2 objs = $(patsubst %.c,%.ov5T,$(srcs))+ w& r; i# ~- ^8 X9 A5 v2 a, q* x
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
! d8 `1 n  n+ e% r7 x: B 4
6 b( @( r% l: e. o5 G! s 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
. k' c; B) r+ ^8 D 6 / j1 U% B/ E4 P0 ~. J+ c
7 all:
; [/ M9 r- H' A$ J6 ^) n; r 8     $(MAKE) app_host2 U- K9 F2 b3 c
9
9 V- w8 l' j4 y1 p- `5 w10 clean::
, G7 I) i7 J. F' G11     rm *.ov5T* *.map app_host! N7 d7 q& W" V  f. @( Q
12 , D8 [# i% K" Q
13 app_host(objs) $(libs)
' l& |1 i- p0 F0 B4 D. o14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
& E1 g3 y! b3 [9 z) x9 x15 " V. z+ ~! u' N: O1 D0 p' v
16 %.ov5T: %.c
7 o% w$ ?/ W/ s" O17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
/ O* Y# ]0 t7 h$ ]% y' Y# y18 6 w( o( k  h4 D, M5 _
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t; @" ?/ l4 T! Q
20 AR = $(CGT_ARM_PREFIX)ar cr- A. @$ s. W% P
21 LD = $(CGT_ARM_PREFIX)gcc
* ?' z' v; ]# Z8 `# r22 / M) q" Q: E/ G
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
. G2 x7 q5 I) U% v24            -Dxdc_target_types__=gnu/targets/arm/std.h
% L; @3 G& w3 @$ F5 m7 M$ M25 9 A, G8 q# C- T6 S9 s3 b' k% D; z, a
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径2 h( W6 R2 o# q5 @! N& Q  Y
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \+ w/ v8 i7 H! n! u; j
28          -I $(BIOS_INSTALL_DIR)/packages                           \' F" {0 T: H4 Y! V
29          -I $(IPC_INSTALL_DIR)/packages5 @- g! O0 ~( G9 D! ^  ^2 n& H
30
1 i. G7 H1 e1 j8 j31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map* l/ v0 s+ p6 a3 {) G6 {# {: A
32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序6 i; v" i9 x1 y
编译工程" k7 C/ z2 z. b9 h$ ^. D2 M2 H( b, N& _

( i3 k& j- i; S; H makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
; d; q( @7 z6 T; o
! t' j/ R2 v5 h* R运行工程
- n8 T7 e, r# W) l+ J3 X5 D
$ p1 @5 C5 e0 |: H 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。
: T8 ]% b4 X) _# E# o( |* C) P) ~* ^
6 r. _: a  a8 V* w+ M1. insmod syslink.ko                    # 加载 syslink 内核模块, L/ |7 S- H. L3 i- T3 h3 n' \" h
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序1 S' B; Q$ h) `7 R+ @' g$ i$ j
3. arm_app                              # 运行 ARM 端程序
7 r1 p6 _; `4 A# E- C# [$ w4. slaveloader shutdown DSP             # 停止 DSP 端程序
; o- A% |! b! N0 w" M( a sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 0 W: K; W& p$ }" X3 E+ Z  P& N
 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
# i5 ~) L( m0 r9 ?' U% o* Q: o+ u& ]7 ?6 ]  T; v
1 #!/bin/sh
. \0 z) t7 B+ ~' P) p( \5 \ 2
1 w( y* G1 t! J/ p1 ?7 J 3 set -x
8 p/ ]- K$ M, A) w9 F 4 . H; Z! W* k7 \" W) m% `
5 insmod syslink.ko4 N% K  A: Q4 a
6
( r4 a0 T1 P3 ]% Y 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
1 K7 m' @- h* | 8
- G* W4 t5 B3 i 9 ../host/app_host DSP
- ~, N: \4 L) K- e# N- e10
5 V- E) m0 ^* q1 j5 L$ y11 ./slaveloader shutdown DSP5 E2 F# m. w( t+ n& _

0 @) M" H0 L; D& S
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:050 P* h( G3 E; F4 q" V
建立工程; o: }5 c! h' P9 E: y
0 w; n4 c# q- w* e5 S! C: a
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
( h$ C; S9 v1 O. N$ z4 _# ]4 c
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
0 O$ h! I1 b) [& X9 j建立工程- s- ?1 D+ \4 L3 a$ B
7 ]+ s) I& w$ D7 c8 `* r7 {
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
; A* M8 @, i, s
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2110

积分

创龙

Rank: 8Rank: 8

积分
2110
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
3 A) q' h; J, u* H$ sslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

! U* t# Y  ~; T. R2 w/ Xdsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-16 00:10 , Processed in 0.043789 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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