建立syslink双核工程和make运行
生活随笔
收集整理的這篇文章主要介紹了
建立syslink双核工程和make运行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
建立工程
+ 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.c 2 ^# 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)/packages 3 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 $@.dep -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,-Map=$@.map
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 DSP 0
% 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.c 2 ^# 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)/packages 3 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 $@.dep -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,-Map=$@.map
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 DSP 0
總結
以上是生活随笔為你收集整理的建立syslink双核工程和make运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB笔记之简单的增删改查
- 下一篇: python批量下载兰科植物网站的图片,