建立syslink双核工程和make运行
2019-07-13 10:55发布
生成海报
建立工程+
j! |; `9 ~8 l d0 D% I5 C1 A1 _: W) i 这一节将涉及到 ex01_helloworld 这个例程和 GNU make 这个工具,但我们并不会进行源码的解释和对 make 工具的使用方法的说明。 现在我们先查看 ex01_helloworld 的例程源码,然后使用 make 对其进行自动化构建。为了便于演示,我们尽可能去掉了那些“干扰”因子。.
P) k; V7 T( N; X6 [ P: W “清理”过的例程的源码如下:" U2 v- N" Q3 n }├── dsp A;
k2 c+ Z$ P9 j% n! f4 A( m│ ├── Dsp.cfg│ ├── main_dsp.c!
@, Y+ ~$ J3 h& {│ ├── Server.c2
^# e6 a) a9 b# j9 |& M7 V; `│ └── Server.h+
e+ t4 `9 q5 T├── host│ ├── App.c│ ├── App.h│ └── main_host.c└── shared ├── config.bld*
k$ f" B7 `/ G; X' ~; c( J, K. u └── SystemCfg.h 现在,我们开始为其编写 makefile 文件。根据目录结构,编写 ./makefile、./dsp/makefile、./host/makefile 这三个文件。0
Z' X Y a' G0 k4 l& X3 f6 Z5 B2 `" d- s./makefile.
p! R; q8 s: r4 T1 SYSLINK_INSTALL_DIR = your/mcsdk/path/syslink_2_21_01_052 IPC_INSTALL_DIR = your/mcsdk/path/ipc_1_25_03_153 -
L) c) a# h7 Z/ c4 CGT_ARM_INSTALL_DIR = your/toolchain/path/arm-none-linux-gnueabi5 CGT_ARM_PREFIX = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-6 2
M5 c6 h( I/ y4 `( J% V: y7 BIOS_INSTALL_DIR = your/ccs/path/bios_6_35_04_508 XDC_INSTALL_DIR = your/ccs/path/xdctools_3_25_03_72,
m$ Y; I& I2 I1 M) h% a: c9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4-
[5 j0 W/ T* r: `* c% k6 i2 k10 8
V/ K( U: Z% S- _* i8 ?8 T11 export SYSLINK_INSTALL_DIR 12 IPC_INSTALL_DIR 7
Z+ e% i0 B* s+ ~3 ^( n13 BIOS_INSTALL_DIR 14 XDC_INSTALL_DIR (
s% V" m( b/ W- W15 CGT_C674_ELF_INSTALL_DIR /
v& Y. v1 W2 K% E7 T! H- }+ P& Q16 CGT_ARM_PREFIX-
D! _+ Z* W$ S/ {4 Q17 :
D- R; Y! E% a5 b18 all:19 make -C host all20 make -C dsp all21 :
n" o# o$ Z2 [) G3 V" c r22 clean::23 make -C host clean24 make -C dsp clean./dsp/makefile' E6 e* Q9 h0 d1 srcs = main_dsp.c Server.c # 在此加入 c 代码文件2 objs = $(patsubst %.c,%.oe674,$(srcs))3 libs = configuro/linker.cmd#
f- K N& C% D: l: y' ]- G: p7 H4 5 all: configuro/linker.cmd6 make server_dsp.xe6747 8 server_dsp.xe674: $(objs) $(libs)9 $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)10 )
x( ~% b M3 d9 F$ _' P11 %.oe674: %.h+
V* d9 E2 [2 q8 L3 z12 %.oe674: %.c)
u$ l' D- ~9 Y13 $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<$
D j9 g4 c: _: X14 0
c7 [; b9 L2 ?0 W+ u) X9 T15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld16 $(XDC_INSTALL_DIR)/xs --xdcpath="$(subst +,;,$(PKGPATH))" 17 xdc.tools.configuro -o configuro 18 -t ti.targets.elf.C674 -c $(CGT_C674_ELF_INSTALL_DIR) &
x8 f" s- [) J; T19 -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld 0
|% g* A7 R# u( {% X8 U* M20 -r release Dsp.cfg21 22 clean::6
J7 L- q- o% K23 rm -rf configuro *.oe674 *.map server_dsp.xe67424 25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages3
w) E2 q9 d1 _4 S26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages$
v1 x" W4 Y* P- a6 P) x29 30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)-
e% }4 {% N. x& _* ]5 e( j5 K31 %
R0 x' ~3 n$ a32 CC = $(CGTOOLS)/bin/cl6x -c 33 AR = $(CGTOOLS)/bin/ar6x rq34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi35 ST = $(CGTOOLS)/bin/strip6x&
g7 w+ C4 P7 c& A2 G6 V36 7
p# L1 ?' I, D; s37 CPPFLAGS =38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)#
C- }! g. R w( w39 U(
E/ I! z6 F- C40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)+
x# Y) ?& @ {/ B41 1
y* c8 B) ?5 o0 _42 LDFLAGS = -w -q -c -m $(@D)/$(@F).map 43 LDLIBS = -l $(CGTOOLS)/lib/rts6740_elf.lib # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序./host/makefile/
x; W: z# ?8 f! T- Y7 ~1 _- @1 Q$ |1 d. R1 srcs = main_host.c App.c # 在此加入 c 代码文件"
c2 D) M! C: k$ X+ s% n2 objs = $(patsubst %.c,%.ov5T,$(srcs))3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug+
P' V/ N. I. m2 M" v, T4 5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))6 7 all:#
l# a5 K; / r) G8 M8 $(MAKE) app_host9 &
l8 ^: Y4 K# }$ [- `10 clean::11 rm *.ov5T* *.map app_host%
U; _" s. i- n12 7
R! g1 _* s6 F5 K( p0 C13 app_host(objs)
$(libs)14 $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)15 16 %.ov5T: %.c17 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<9
y7 C8 x& r4 ^! ~18 19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF $@.dep -march=armv5t20 AR = $(CGT_ARM_PREFIX)ar cr21 LD = $(CGT_ARM_PREFIX)gcc22 2
p! ^6 ?3 v: B, ]+ z B23 CPPFLAGS = -D_REENTRANT -Dxdc_target_name__=GCArmv5T 24 -Dxdc_target_types__=gnu/targets/arm/std.h#
|4 _ Y m8 `, n0 D {25 F,
T$ V& O7 {, Q- F6 ~$ F26 CFLAGS = -Wall -ffloat-store -fPIC -Wunused -Dfar= -ggdb -D DEBUG # 在此添加头文件的搜索路径27 -I $(SYSLINK_INSTALL_DIR)/packages 28 -I $(BIOS_INSTALL_DIR)/packages 29 -I $(IPC_INSTALL_DIR)/packages.
H' N% _) I% V& L30 31 LDFLAGS = -ggdb -Wall -Wl,-Map=$@.map32 LDLIBS = -lpthread -lc -lrt # 在此添加需要用到的库,如果库之间有相互依赖,需要注意其添加顺序/
h) D) V. p& S! N2 C% N6 B编译工程 makefile 文件编写好后,编译工程只需要打开终端,进入 ex01_helloworld 目录并运行 “make” 这个命令就可以了。如果编译成功,我们将得到在 DSP 端运行的 ./dsp/server_dsp.xe674 和在 ARM 端 Linux 下运行的 ./host/app_host 这两个可执行文件。+
H+ O) o# Q2 Q! d6 v/ r3 }4 I运行工程3 ?* A/ w7 O, f3 m0 | 要运行一个双核工程,需要在目标机器上分别运行 ARM 和 DSP 的两个程序。1. insmod syslink.ko # 加载 syslink 内核模块/
M3 v$ n: b% b: [) V! p F2 i2. slaveloader startup DSP dsp_app # 加载并运行 DSP 端程序3. arm_app # 运行 ARM 端程序#
z, T2 X$ k) V2 w4 h4. slaveloader shutdown DSP # 停止 DSP 端程序&
w4 N5 ]3 X) h& ]5 g sylink.ko 和 slaveloader 我们可以在编译 MCSDK 时得到。 为了方便运行工程,我们在 ex01_helloworld 目录下建立一个 run 目录,在其中放置 sylink.ko、slaveloader 和 run.sh,启动程序时,运行 run.sh 就可以了。/
m6 b. C* f/ |# g1 E( c- m+ h& @0 G; G5 T1 #!/bin/sh2 3 set -x4 5 insmod syslink.ko"
a+ {# p) U6 a. N6 i4 F6 *
q3 z( ]9 i6 q( b2 l7 ./slaveloader startup DSP ../dsp/server_dsp.xe6748 9 ../host/app_host DSP10 3
d& J% ~8 D; {! ~% l& v+ r11 ./slaveloader shutdown DSP0
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮