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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
跳转到指定楼层
楼主
发表于 2014-9-19 08:25:34 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
刚接触OMAPL138,软件都装上了,例程也看了,不明白的是例程里面有 dsp,host,shared,makefile,products.mak,run.sh,# n" r2 k, O% F1 h! P* d
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。1 A% I5 @- z! e

2 J) f2 k0 d- \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

积分
139
推荐
 楼主| 发表于 2014-9-22 09:33:09 | 只看该作者
Dsp.cfg,  config.bld,SystemCfg.h这三个文件感觉不太好修改。能给推荐一下怎样编写这三个文件吗?
) k: `5 i  D" V( y7 R/ i
回复 支持 1 反对 0

使用道具 举报

0

主题

113

帖子

2020

积分

创龙

Rank: 8Rank: 8

积分
2020
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40* W9 ]7 r6 F2 b3 m: h/ g! o
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

1 R7 v+ h) M! Adsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
5#
发表于 2016-6-15 16:40:40 | 只看该作者
tenny 发表于 2014-9-19 18:05/ s, d) G$ J" s& E7 V) [
建立工程; w( w* B' i7 y- t; c- L! ?

( Q7 _, [$ `8 J& H2 H2 \2 r0 }( ^ 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

1 P% M- V. k% Y0 X% Jslaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:05
5 o- \7 O& E& A" e% N* d建立工程& a/ f( l. U2 ]% T

" g; ^# ]0 b0 S/ x# R# |! H 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
1 W' `& r' X9 \% n0 ]
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程
/ u0 y! R1 T1 Q& }
1 {& K( n7 n5 w& O2 m/ S0 W 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。  V9 i' f/ X$ b/ G' ~
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
. f5 C3 B0 b$ ]8 _ “清理”过的例程的源码如下:
# j6 y5 i6 W6 B) s5 u( P; C2 z2 S- q" O" r' y/ v7 x* C! P
├── dsp
. H$ W) Q1 s3 O; v. j+ [6 x: R9 F│   ├── Dsp.cfg: M; Q; G9 r$ G& T9 w9 b
│   ├── main_dsp.c
4 e4 E& ~6 A8 X( n* _* v$ g( z│   ├── Server.c
5 X# h! q* S1 L4 W% z│   └── Server.h
$ V7 G( y, F2 k1 e; x8 J├── host
9 p: Y5 U6 m. h7 x│   ├── App.c
! Z* U. {( c: K, y1 K│   ├── App.h
: [! \% V2 Z. V! @( M9 C# P7 C│   └── main_host.c) v& L2 z. [. D: i3 b3 Z! w- E9 [
└── shared
+ ?$ `% ^/ h8 G2 R1 e7 E   ├── config.bld! ^# |1 \( r+ P, U# {
   └── SystemCfg.h  N7 ^$ D! H, I5 O
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。+ g' i+ C  A/ J- ^9 \
( A/ l/ A. }$ g7 r3 \2 w
./makefile
6 ^! T8 \" L. v; ?5 }4 a5 D7 p7 v) r6 e/ @6 ^
1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_05/ p! x$ c$ v5 s5 t6 O, J" }) x
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
* {4 d$ G) H+ | 3
4 ]' n% M$ T3 x- B1 ~( [! C 4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi
. F9 g; s5 M- J9 A. L3 S% P 5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
% Y# n1 x& U; n6 X' f 6
/ c' M+ R' C4 U5 R2 _# y# v( k 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_50
0 Z) r$ _5 x1 m 8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_72  W1 z. V! L3 c+ Z6 {3 o, `; W
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4: J% m2 Q; O$ X  |4 h
10 * s" h0 c# `& Z: D
11 export SYSLINK_INSTALL_DIR      \" _- e1 e9 ^; L0 }% S* \6 i2 S" Z
12        IPC_INSTALL_DIR          \
# o! K7 T& f/ m1 S0 v+ f" b. M13        BIOS_INSTALL_DIR         \
) t( s4 v9 m+ r$ w5 P14        XDC_INSTALL_DIR          \* f9 p; A3 A; v; l" e# E( U, D8 W
15        CGT_C674_ELF_INSTALL_DIR \
: N7 A+ k, y& X; i$ R16        CGT_ARM_PREFIX9 t! {  T6 ]' N& F! s
17 & G; d6 a+ ^' r# O/ U$ N
18 all:
. L1 h$ k( C9 g2 n19     make -C host all
2 ^" v9 W% o3 S/ K20     make -C dsp all2 T- `: ?4 F( t' }' D' V& q# ?
21
8 t' ]1 `# L2 ~0 ]" {# b22 clean::* J" _  s' Y) f/ z+ B
23     make -C host clean
2 B4 p" X$ n1 s) N# h0 [24     make -C dsp clean/ }- p# g6 p7 q6 |% d) H' H" E
./dsp/makefile
; _. O! Z( ^& B- F) H. ]0 c/ A  `; j
( v% Q4 X' ^3 v6 |* B  a+ [2 F 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件! ?7 a$ m7 I' `3 m
2 objs = $(patsubst %.c,%.oe674,$(srcs))
1 d7 R# s: u4 o" w 3 libs = configuro/linker.cmd& W& u  @7 l+ I, \4 G8 n; |
4 0 T0 Z" o3 J! c7 {2 ]
5 all: configuro/linker.cmd5 c. D! `8 K7 G- D# g! R% ~! b
6     make server_dsp.xe674: b) b! Q. b  {, C# G6 j6 p0 T
7
3 T! m1 ]# G9 S) n! z 8 server_dsp.xe674: $(objs) $(libs). A: p2 D0 H, x: a  p" n* N
9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
0 q  o3 n2 z: M# U8 j10
9 [) S/ e! F) h11 %.oe674: %.h
4 U8 k3 p& {$ i2 Q! a; I  C; t12 %.oe674: %.c
: v2 G' F% t3 E. o0 b% u3 x: P2 L13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
9 z( P5 I4 k; s6 p( ^14 8 U3 J% N+ ]0 s
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
3 j9 i* L1 s, @' g- `7 h16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
" f# g/ c3 B# U' Y17             xdc.tools.configuro -o configuro                        \
4 e! y/ H) E, R: O18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \( c6 S2 U7 J% l: ]9 \9 z" D
19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \
& }4 B- @- K; Q% K6 Y+ d: t20             -r release Dsp.cfg
4 T5 K, f% U6 O! o21 . h4 c" P7 ]) y
22 clean::. ], u9 N4 t8 J  o, ]3 z
23     rm -rf configuro *.oe674  *.map server_dsp.xe674
3 t* q! A, S* W7 k5 A  M: d24 7 g, O" _" k  U# v/ T: V# {5 D+ L
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages
. `3 d9 Y$ p  S26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages1 {6 h: s/ H0 s$ ?  `" b
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages5 j7 \+ V: b" a
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
  ~; P& c4 b0 C0 f  q7 k$ ?) R29
# D5 i! _' V+ z0 Q2 f30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)
/ q/ V3 I& ?2 V& z% P+ o1 x$ ?) J31
% \0 Z- a2 J' E& ^* g8 y9 Q32 CC = $(CGTOOLS)/bin/cl6x -c                        
: A8 \. t; a- z. H: K33 AR = $(CGTOOLS)/bin/ar6x rq
! p7 ~( Y8 c& G) d) p2 k34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
4 F# S: s- Y! p& B35 ST = $(CGTOOLS)/bin/strip6x
% h5 i" S" C3 Q( u36
. E0 b2 d* d! V. d37 CPPFLAGS =) J- s8 g% C, ]# k
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
- Z2 d2 N% r5 S39 ! c( `' c5 h$ r  H& d  q5 j
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
: V) L/ I! X: t7 ?9 p- N41 ! H) W' v# i1 }" X7 t
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     4 M, T) ~/ |1 g/ J. l
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序& P- |6 E8 T% d2 A+ i1 T& X: Q
./host/makefile! O% U: V, J: Q7 f, D% @' i

" ~; K6 N' {8 ` 1 srcs = main_host.c App.c                       # 在此加入 c 代码文件3 h) ~( f% P- h* l) j0 h
2 objs = $(patsubst %.c,%.ov5T,$(srcs))9 @- O0 @4 A8 R: B" J
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
( C4 t6 w" f0 Y! t5 g. q 4
" C; v1 O' J( H' [; l 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
6 `1 {! [% C% L! A$ F4 T6 D. X" y 6
/ R* }% R, G# d7 V# z9 h( k6 } 7 all:0 `( h9 ?1 e4 A" I: b: j
8     $(MAKE) app_host8 N% x" j% ]  [" u
9 * r/ p- S1 N& B- ?* ^. z/ _
10 clean::. [; _2 A4 X+ Z5 O
11     rm *.ov5T* *.map app_host- m  Q9 _: p7 A! p4 P2 P- W
12 . l& e7 c# z. A6 y- g
13 app_host(objs) $(libs)( i: ?4 N+ m* [/ G$ D
14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
0 E& Q2 O0 h$ g15
( L% F# R+ S" I16 %.ov5T: %.c
" B# c4 Y" @8 B& v17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<
) D0 D$ Z3 f3 o, B! R2 ?18
3 F" C: Q) }" E; v2 b19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t5 e' u  J4 x3 U+ A; j
20 AR = $(CGT_ARM_PREFIX)ar cr
4 X2 d% s# t  m* d" t4 P21 LD = $(CGT_ARM_PREFIX)gcc8 |9 o/ I" E3 _0 v7 `( I7 k
22 , v" L; d3 y. N; V: V! k/ d2 ~( U
23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
& q8 M" e/ R5 F- I( _0 g$ @- x9 Y24            -Dxdc_target_types__=gnu/targets/arm/std.h- @( h5 H" k( D4 p/ R% b
25 4 i( W- Q* x' ]$ k/ M2 e
26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径# O3 z0 D7 m. P- `
27          -I $(SYSLINK_INSTALL_DIR)/packages                        \" ]. G. J5 h$ ~0 M  K5 c" N; \
28          -I $(BIOS_INSTALL_DIR)/packages                           \
; T* f' T( Z" @. Q1 |29          -I $(IPC_INSTALL_DIR)/packages
  N9 V; n' `: ?3 l$ h9 r30
7 s& A" S" \5 c5 p# r$ f31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
( [) N0 U7 I( B32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序' V, q5 n$ n% m' y" \; P3 R
编译工程6 O7 @+ M# l8 V* }

$ o/ O* s8 f: }1 Y makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。
6 X7 \# t7 x  s& i! p# b$ L  i/ Z, t" E8 S, \
运行工程3 }) M8 q9 Q! _0 R+ a. F2 K
6 w" e0 X( ]/ G- L
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。$ ~0 z8 Q2 v* G8 U. Y1 k

- A) l9 D4 Y) n8 [1. insmod syslink.ko                    # 加载 syslink 内核模块: d9 S3 i7 r* ^( r0 p
2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序
, [! e( s+ z* e% f' R( q3. arm_app                              # 运行 ARM 端程序
4 ]6 Y) o; N; i; g* H! q4. slaveloader shutdown DSP             # 停止 DSP 端程序9 [" Y, y2 V2 Y
 sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
% E. k: ~. r; u* d) z 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。- J0 i( ]9 z4 ]$ ^5 w( @0 Q; F( q
1 n3 I2 H# y1 h7 b
1 #!/bin/sh
5 E/ t9 X% R+ g8 I 2
3 U5 X4 S6 h) V$ ~ 3 set -x
1 @% ]) K: x, o2 T9 p. i 4
2 x! h$ J* H! D( ~' ?, Q 5 insmod syslink.ko
/ d: m1 F8 d, D2 _' f 6 7 _; y/ ]4 x0 |6 x% E4 X& I
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
& w- t. d4 M/ F9 O9 W% r# K  z 8
1 f* i+ P) p/ ?* y5 D# X7 R: P1 C 9 ../host/app_host DSP
- |! d# o+ A% g10
9 {$ t' `+ B+ G% A# T11 ./slaveloader shutdown DSP
7 a& h( {# N2 x9 I( f  ]3 f( g. V7 a  [! R
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 12:45 , Processed in 0.042902 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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