建立工程+
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& X
3 f6 Z5 B2 `" d- s
./makefile.
p! R; q8 s: r4 T
1 SYSLINK_INSTALL_DIR = your/mcsdk/path/syslink_2_21_01_05
2 IPC_INSTALL_DIR = your/mcsdk/path/ipc_1_25_03_15
3 -
L) c) a# h7 Z/ c
4 CGT_ARM_INSTALL_DIR = your/toolchain/path/arm-none-linux-gnueabi
5 CGT_ARM_PREFIX = $(CGT_ARM_INSTALL_DIR)/bin/arm-none-linux-gnueabi-
6 2
M5 c6 h( I/ y4 `( J% V: y
7 BIOS_INSTALL_DIR = your/ccs/path/bios_6_35_04_50
8 XDC_INSTALL_DIR = your/ccs/path/xdctools_3_25_03_72,
m$ Y; I& I2 I1 M) h% a: c
9 CGT_C674_ELF_INSTALL_DIR = your/ccs/path/ccsv5/tools/compiler/c6000_7.4.4-
[5 j0 W/ T* r: `* c% k6 i2 k
10 8
V/ K( U: Z% S- _* i8 ?8 T
11 export SYSLINK_INSTALL_DIR \
12 IPC_INSTALL_DIR \7
Z+ e% i0 B* s+ ~3 ^( n
13 BIOS_INSTALL_DIR \
14 XDC_INSTALL_DIR \(
s% V" m( b/ W- W
15 CGT_C674_ELF_INSTALL_DIR \/
v& Y. v1 W2 K% E7 T! H- }+ P& Q
16 CGT_ARM_PREFIX-
D! _+ Z* W$ S/ {4 Q
17 :
D- R; Y! E% a5 b
18 all:
19 make -C host all
20 make -C dsp all
21 :
n" o# o$ Z2 [) G3 V" c r
22 clean::
23 make -C host clean
24 make -C dsp clean
./dsp/makefile
' E6 e* Q9 h0 d
1 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 H
4
5 all: configuro/linker.cmd
6 make server_dsp.xe674
7
8 server_dsp.xe674: $(objs) $(libs)
9 $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
10 )
x( ~% b M3 d9 F$ _' P
11 %.oe674: %.h+
V* d9 E2 [2 q8 L3 z
12 %.oe674: %.c)
u$ l' D- ~9 Y
13 $(CC) $(CPPFLAGS) $(CFLAGS) --output_file=$@ -fc $<$
D j9 g4 c: _: X
14 0
c7 [; b9 L2 ?0 W+ u) X9 T
15 configuro/linker.cmd: Dsp.cfg ../shared/config.bld
16 $(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; T
19 -p ti.platforms.evmOMAPL138:dsp -b ../shared/config.bld \0
|% g* A7 R# u( {% X8 U* M
20 -r release Dsp.cfg
21
22 clean::6
J7 L- q- o% K
23 rm -rf configuro *.oe674 *.map server_dsp.xe674
24
25 PKGPATH := $(SYSLINK_INSTALL_DIR)/packages3
w) E2 q9 d1 _4 S
26 PKGPATH := $(PKGPATH)+$(BIOS_INSTALL_DIR)/packages
27 PKGPATH := $(PKGPATH)+$(IPC_INSTALL_DIR)/packages
28 PKGPATH := $(PKGPATH)+$(XDC_INSTALL_DIR)/packages$
v1 x" W4 Y* P- a6 P) x
29
30 CGTOOLS = $(CGT_C674_ELF_INSTALL_DIR)-
e% }4 {% N. x& _* ]5 e( j5 K
31 %
R0 x' ~3 n$ a
32 CC = $(CGTOOLS)/bin/cl6x -c
33 AR = $(CGTOOLS)/bin/ar6x rq
34 LD = $(CGTOOLS)/bin/lnk6x --abi=eabi
35 ST = $(CGTOOLS)/bin/strip6x&
g7 w+ C4 P7 c& A2 G6 V
36 7
p# L1 ?' I, D; s
37 CPPFLAGS =
38 CFLAGS = -qq -D_DEBUG_=1 --symdebug:dwarf -I. $(COMPILER_OPTS)#
C- }! g. R w( w
39 U(
E/ I! z6 F- C
40 COMPILER_OPTS = $(shell cat configuro/compiler.opt)+
x# Y) ?& @ {/ B
41 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. R
1 srcs = main_host.c App.c # 在此加入 c 代碼文件"
c2 D) M! C: k$ X+ s% n
2 objs = $(patsubst %.c,%.ov5T,$(srcs))
3 libs = $(SYSLINK_INSTALL_DIR)/packages/ti/syslink/lib/syslink.a_debug+
P' V/ N. I. m2 M" v, T
4
5 -include $(patsubst %.c,%.ov5T.dep,$(srcs))
6
7 all:#
l# a5 K; \/ r) G8 M
8 $(MAKE) app_host
9 &
l8 ^: Y4 K# }$ [- `
10 clean::
11 rm *.ov5T* *.map app_host%
U; _" s. i- n
12 7
R! g1 _* s6 F5 K( p0 C
13 app_host(objs)
$(libs)
14 $(LD) $(LDFLAGS) -o $@ $^ $(LDLIBS)
15
16 %.ov5T: %.c
17 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $<9
y7 C8 x& r4 ^! ~
18
19 CC = $(CGT_ARM_PREFIX)gcc -c -MD -MF [email protected] -march=armv5t
20 AR = $(CGT_ARM_PREFIX)ar cr
21 LD = $(CGT_ARM_PREFIX)gcc
22 2
p! ^6 ?3 v: B, ]+ z B
23 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 ~$ F
26 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& L
30
31 LDFLAGS = -ggdb -Wall -Wl,[email protected]
32 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 i
2. slaveloader startup DSP dsp_app # 加載並運行 DSP 端程序
3. arm_app # 運行 ARM 端程序#
z, T2 X$ k) V2 w4 h
4. 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/ |# g
1 E( c- m+ h& @0 G; G5 T
1 #!/bin/sh
2
3 set -x
4
5 insmod syslink.ko"
a+ {# p) U6 a. N6 i4 F
6 *
q3 z( ]9 i6 q( b2 l
7 ./slaveloader startup DSP ../dsp/server_dsp.xe674
8
9 ../host/app_host DSP
10 3
d& J% ~8 D; {! ~% l& v+ r
11 ./slaveloader shutdown DSP0
建立syslink雙核工程和make運行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
omapl138移植uboot系列之官網獲取BSP(第一篇)
明故宫的记忆
2020-05-31 02:07:00
基於syslink的雙核通信實例
doumeile1
2020-02-23 05:06:20
omapl138移植uboot系列之官網獲取BSP(第一篇)
明故宫的记忆
2020-05-31 02:07:00
OMAPL138 + SPARTAN6 DSP+ARM+FPGA核心板方案
专注DSP+ARM+FPGA
2020-03-18 02:47:01
基於syslink的雙核通信實例
doumeile1
2020-02-23 05:06:20
OMAPL138開發板硬件說明書
广州创龙电子科技有限公司
2020-02-21 20:22:23
OMAPL138之linux-kernel 5.01
MouShengWuDu
2019-03-26 23:34:30
omapl138在中斷基礎上實現異步通知的按鍵驅動(針對開發板上的SW8和SW9按鍵)
嵌入式青蛙
2019-03-23 21:56:42
Omapl138實現中斷方式的按鍵驅動
嵌入式青蛙
2019-03-23 21:56:42
OMAL138.gel的設置問題
MouShengWuDu
2019-03-16 23:36:52
ubuntu 16.04安裝提示end Kernel panic
MouShengWuDu
2019-03-15 23:45:59
Omapl138雙核通信中斷及共享內存搬運的代碼實現分析(一)
旅行的青蛙
2019-01-12 22:09:56
如何給開發板設置靜態IP
旅行的青蛙
2019-01-07 22:47:57
AIS文件分析-(using the OMAP-138 Bootloader)
旅行的青蛙
2019-01-03 23:23:58
Omapl138中AIS文件分析(參照Using the OMAP-L138 Bootloader)
旅行的青蛙
2019-01-01 19:01:30