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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5956|回复: 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 C, e3 D7 T9 B, G* R' I3 p
dsp和host下又有cfg,makefile,c等文件,哪些是需要编写的,哪些是形成的,怎样搭建一个工程。; b. ?3 T' D1 K0 Y0 K4 _
4 a- N/ q6 b0 K. ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

15

主题

30

帖子

139

积分

注册会员

Rank: 2

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

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

积分
1246
沙发
发表于 2014-9-19 18:05:57 | 只看该作者
建立工程5 [* e2 ~, L, A; \

3 \. \& p, R' z+ B  L/ o( d4 k 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。) b! W# N* n; n
 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。
& e" [; S6 h4 R% o1 F “清理”过的例程的源码如下:
! S8 s- v7 e$ O* t* X% W! J5 X% \. s3 A( l
├── dsp1 m  V5 w  c4 ^! v, F
│   ├── Dsp.cfg# h# ~" b" a* Q( Y- d4 h  O
│   ├── main_dsp.c
! G* q6 Y8 @$ J% ^, t- ?│   ├── Server.c; ~- T6 \9 |6 ^# G
│   └── Server.h6 Q  {4 l( R4 V/ t* d
├── host: q, B$ ?7 N+ u
│   ├── App.c
4 Q2 Y4 p7 o" R│   ├── App.h
$ e# i- d* `; I; D% n) r& [│   └── main_host.c: n7 C8 }6 M$ C. }
└── shared
! @) R6 Z* k5 m) c   ├── config.bld0 G1 L! O, h5 ^$ ^. r" T: ^
   └── SystemCfg.h" i8 c5 x! m( ]0 P, |
 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。5 i& _# o- X! h  a

$ t% M2 ?/ l4 g./makefile( l* B% o* A) A

9 F4 O2 x: b' D, u( G 1 SYSLINK_INSTALL_DIR      = your/mcsdk/path/syslink_2_21_01_055 r# R( D# P/ \# x, t6 a5 s0 M
2 IPC_INSTALL_DIR          = your/mcsdk/path/ipc_1_25_03_15
" `' j/ z& z" D4 N8 j4 v 3 7 w8 G( c" p  s8 Y8 j% `, q+ ]* W' e
4 CGT_ARM_INSTALL_DIR      = your/toolchain/path/arm-none-linux-gnueabi1 B$ V) f- p1 `) b. l+ q7 Y
5 CGT_ARM_PREFIX           = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
" U8 v2 V9 ]; c% V% O 6
$ G' W: f( X* [' f 7 BIOS_INSTALL_DIR         = your/ccs/path/bios_6_35_04_501 E! k( m. j6 E+ ?
8 XDC_INSTALL_DIR          = your/ccs/path/xdctools_3_25_03_728 ?9 E+ L. Q9 @7 @* D
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4
% X/ X( G) a/ i  H* `10 3 Z& f4 w/ ?5 }
11 export SYSLINK_INSTALL_DIR      \
+ t3 b) l/ R* p9 ?12        IPC_INSTALL_DIR          \
- F5 F1 l: D1 c8 b13        BIOS_INSTALL_DIR         \7 @! U2 U$ x4 ?9 e
14        XDC_INSTALL_DIR          \
. a. o3 U+ i6 {+ c15        CGT_C674_ELF_INSTALL_DIR \
3 ]' G% t0 D5 S) K* e6 a9 w16        CGT_ARM_PREFIX0 Y( ^/ J1 p' {9 P
17
# Z3 v; e! v: `. o, m9 ?! l% E' G18 all:( Z5 X- [+ ~* V" e9 I( V5 P+ v
19     make -C host all
3 ?9 n/ E. y- n# k9 g9 F20     make -C dsp all. e9 ^/ ~: U( |' F+ x! [5 n  [, u
21
  C, R6 z9 I8 O22 clean::1 F, f; }6 _4 j( u! ^) {: P
23     make -C host clean
( N2 z: z8 X9 {( N+ Y( k5 l5 L24     make -C dsp clean) e( r8 v4 o2 U& d3 _$ I$ C+ L
./dsp/makefile
& C# @6 \# u, k2 T! n4 X3 B
7 h  E% x" A' q6 V3 H$ H2 U+ Y 1 srcs = main_dsp.c Server.c                    # 在此加入 c 代码文件
; x: n% A& i  a' n" k% z 2 objs = $(patsubst %.c,%.oe674,$(srcs))% d# P% O' J6 K* v: [% a
3 libs = configuro/linker.cmd
9 z2 }. R, e8 B" M8 { 4 * ]" g' ?0 u- x( \% k3 g  M( ]
5 all: configuro/linker.cmd3 L& j' |5 s0 t) G  s, u. C
6     make server_dsp.xe674/ ]" c8 v4 b2 g9 [" N4 @
7
) d) d- x+ j5 v! ^* ]  x6 C 8 server_dsp.xe674: $(objs) $(libs)
- o. y# {' V, m 9     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
: @' P, ?2 L' x5 \+ t: p1 D) y10
5 W, N+ d4 L6 W9 n11 %.oe674: %.h
' D: V. a, G4 I' m( j12 %.oe674: %.c4 y1 ^0 `3 a5 B/ N$ d2 a
13     $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<
- c1 X9 a  A$ \7 n3 \" ~14
$ o1 f/ S6 z2 u# L" H5 H15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
7 E$ S4 }9 e* R16     $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))"       \
% h9 Z* o) T+ Q- i17             xdc.tools.configuro -o configuro                        \: Q# |1 |: p' G) h$ ]
18             -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR)   \
5 l' t! v& X6 u6 n2 c" O* Z19             -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \6 X% J; ]" A+ K# n& A
20             -r release Dsp.cfg2 K  w! `3 Y4 q! B+ d* Q& i
21 6 g3 v' l2 H8 X5 h: Z- ^6 `5 M
22 clean::
* q9 x# w# h% u2 q* U23     rm -rf configuro *.oe674  *.map server_dsp.xe674! t# a0 Y4 Y; b
24 # k6 h% q# q) r3 ]
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages& r5 f1 M  i9 g3 M
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
8 B" G3 g* W& b' c27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
# `9 m  t5 D" _3 i# O28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages
' ~! S3 X% |/ ?* l1 [29
+ P$ P0 A: Y8 _, V30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)& m7 d$ @5 ^9 P. w# P
31
/ F( p# s' x" P1 t+ {3 Z; U32 CC = $(CGTOOLS)/bin/cl6x -c                         1 A2 m' `0 L. b
33 AR = $(CGTOOLS)/bin/ar6x rq' \: P1 H- P! \
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
- M  q/ N' ?" A: _9 a* E- ?, B35 ST = $(CGTOOLS)/bin/strip6x
4 Z  u4 ~4 x" J' _  k/ p36
2 w3 l) |$ S# V; k. @$ h' I$ e) c6 A37 CPPFLAGS =
" V) L' @5 j1 p% Z+ T: ?38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)
! l5 R3 J0 G4 B1 F( b1 ~2 t% H5 o9 l( ?39 / m+ `9 V+ C* v/ |' h
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)
$ C9 Y9 Q/ d) ?) m  d$ P! ^41 $ b  n* J' \9 H; N; a+ G
42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map     - a% Q& @0 X5 [" h' E
43 LDLIBS  = -l $(CGTOOLS)/lib/rts6740_elf.lib    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序7 T- N% S$ N( Q$ Q
./host/makefile
; K/ j- C) B, a5 q, I! L& c- K1 V( |
1 srcs = main_host.c App.c                       # 在此加入 c 代码文件- T9 q& i8 n  `9 q) d4 h/ `: p/ Y
2 objs = $(patsubst %.c,%.ov5T,$(srcs))4 }- m: u' k( r5 x- r
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug
1 X3 l( {$ A9 X5 _. L" |! a' ~ 4 / F2 f. q1 W+ ^' S$ u9 G
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
# G  n0 ]6 h; W. b* }- E( n 6 ; f- J; W8 m1 E' e) P2 t& G5 ?
7 all:
' D9 a% I1 I8 z$ @! u' E- |/ g 8     $(MAKE) app_host/ `* g0 X3 `3 L% A2 {3 F8 m
9
, u& f/ @$ E+ e* ?10 clean::7 B6 E$ b: R6 J; j' y: R
11     rm *.ov5T* *.map app_host
& K  ~% W% O4 D6 t* a/ S4 ^9 D12 1 D# l! r' h' G
13 app_host(objs) $(libs)
! J# @( h, m4 ]6 n$ g! I14     $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
/ s7 y# v' T% _- w+ M2 d, H1 ?15 ) S/ E8 l! e/ \& H% r: A, I
16 %.ov5T: %.c
9 r3 ?* z9 V8 s: t, X1 w' E17     $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<* H5 a8 v2 p( `9 q: ~) i
18
2 i( C0 D8 l8 A19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t0 O, l- K9 x0 `4 M4 Q: w1 I' d" N
20 AR = $(CGT_ARM_PREFIX)ar cr8 b6 x8 m- }& a! M) o6 ^" ?
21 LD = $(CGT_ARM_PREFIX)gcc7 l$ [- G1 j- q7 a4 e* P6 A
22
) P! d* Q9 N! H* V3 ^2 t23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T \
! O- Y+ V# W3 Q/ A4 t6 c24            -Dxdc_target_types__=gnu/targets/arm/std.h6 `- s) h6 [' b# o9 T
25
4 D: o0 Y+ \  a0 o9 y$ N26 CFLAGS = -Wall -ffloat-store  -fPIC -Wunused -Dfar= -ggdb -D DEBUG \ # 在此添加头文件的搜索路径
* z- M( q" U' x7 `7 U! X* x- B% u27          -I $(SYSLINK_INSTALL_DIR)/packages                        \
. `9 m/ P. O6 b/ e: k9 u+ \) i# k28          -I $(BIOS_INSTALL_DIR)/packages                           \
9 g; j/ p9 C6 J1 U29          -I $(IPC_INSTALL_DIR)/packages- w: z8 r8 u! Z, J" \# S
30 # a. [4 l% }, `8 n; A6 a7 t: w
31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map
+ J3 ^+ n0 C, V% Y, O; w3 S" q32 LDLIBS = -lpthread -lc -lrt                    # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序) @; q% D8 n0 Q4 b% q2 S. L8 t" A
编译工程
. j% Q5 y+ M/ v2 I& P8 P3 a, w, [/ e- B
 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。! {* l8 G3 i/ ^2 n- }$ X( W% t

$ J6 g& L& N5 j运行工程
( j8 S: s& |: i' p: u: x4 P8 j8 N0 L. k+ \4 h0 E1 Y- t' E
 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。: x. o3 Q( b0 e% n2 ^
  p) x0 N, E$ V+ A7 c( u# E
1. insmod syslink.ko                    # 加载 syslink 内核模块
# v' }. A, F8 G# ^; D/ W2. slaveloader startup DSP dsp_app      # 加载并运行 DSP 端程序- L8 W% V  g  Z$ g3 X: }
3. arm_app                              # 运行 ARM 端程序
. u2 h. P% H; T7 i4. slaveloader shutdown DSP             # 停止 DSP 端程序
' m4 z7 b3 G" i# O, j& c; d+ L sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。
  b: o6 V% j1 l3 _7 X 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。
+ ~8 ]: ^/ H9 W" z8 r9 s+ Q& ?  D" O1 t, k. [" {0 J, J$ K" z& S
1 #!/bin/sh6 K: u% ]$ A" `3 J
2 6 `. x9 l6 F% x6 u5 A  a/ O% Y& p
3 set -x( K" e( [( B& D
4
  {9 ?6 W' T7 J7 w" X" q' ?! } 5 insmod syslink.ko- u$ `: \. n$ v' a) X+ s' ^8 |0 M
6
  b7 f, N2 W; W; h8 A$ L 7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
  v! ]8 ^5 J1 [7 y1 ]9 g! \7 X 8
+ g4 C0 z8 A5 a 9 ../host/app_host DSP
  d/ r" H5 U9 R: h; d10 0 y9 J3 X. x3 W
11 ./slaveloader shutdown DSP
% p0 y. j$ K& x& k
. `, Z  l9 `( d
回复 支持 反对

使用道具 举报

6

主题

22

帖子

121

积分

注册会员

Rank: 2

积分
121
地板
发表于 2016-6-15 16:39:56 | 只看该作者
tenny 发表于 2014-9-19 18:053 ^7 i) D  I  o2 Q* F3 Q' o. h" s
建立工程' Q% t8 K( x5 Q/ w

' u: P; e' n0 n# M) p 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...

# O+ E, V/ A/ ]7 t9 E; rslaveloader 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! h& W$ G! l6 ~/ }
建立工程' t) J$ [% E: M4 e* ]
3 }9 a6 o! l- M0 N9 @
 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释 ...
1 p7 K$ H. E% c; ]+ @7 _, e3 i& d
slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?
回复 支持 反对

使用道具 举报

0

主题

215

帖子

1246

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

0

主题

113

帖子

2025

积分

创龙

Rank: 8Rank: 8

积分
2025
7#
发表于 2016-6-21 16:59:08 | 只看该作者
zxbdlv 发表于 2016-6-15 16:40
: r/ T/ n  h! ?slaveloader startup DSP dsp_app 里的dsp_app怎么生成的?

0 s8 u: t6 T) k  E5 [; ldsp_app 就是编译的目标,可执行文件。通过 makefile 里的编译规则编译生成的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 00:28 , Processed in 0.043495 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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