TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐西電版第4章 平臺(tái)植_第1頁(yè)
TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐西電版第4章 平臺(tái)植_第2頁(yè)
TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐西電版第4章 平臺(tái)植_第3頁(yè)
TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐西電版第4章 平臺(tái)植_第4頁(yè)
TinyOS操作系統(tǒng)開發(fā)技術(shù)及實(shí)踐西電版第4章 平臺(tái)植_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第4章 平 臺(tái) 移 植 1 1第4章 平 臺(tái) 移 植 4.1 移植概述 4.2 make系統(tǒng) 4.3 support目錄 4.4 tos目錄 4.5 doc目錄 4.6 apps目錄 第4章 平 臺(tái) 移 植 2 24.1 移植概述移植概述4.1.1 名詞概念名詞概念在具體移植之前,需要了解以下名詞的概念:平臺(tái)(platform):是硬件設(shè)備以及運(yùn)行在硬件設(shè)備上的可以給用戶提供二次開發(fā)功能的軟件和硬件總稱。發(fā)布平臺(tái):可以壓縮打包的整個(gè)目錄文件總稱,有時(shí)也簡(jiǎn)稱為平臺(tái),用戶解壓或直接復(fù)制后,在安裝有tinyos的系統(tǒng)下即可以進(jìn)行tinyos應(yīng)用程序開發(fā)。硬件平臺(tái):發(fā)布平臺(tái)所支持的硬件總稱,包括核心c

2、pu和芯片外圍的硬件資源。芯片(mcu):硬件平臺(tái)的核心cpu,如cc2530。第4章 平 臺(tái) 移 植 3 3nesc編譯器:tinyos提供的可以把nc文件編譯成c語(yǔ)言文件的工具程序。編譯工具鏈:也稱為make系統(tǒng),是make工具、makefile腳本文件、nesc編譯器等共工具的總稱。makefile:包括直接以makefile文件命名以及makefile格式的可以被make工具解析執(zhí)行的腳本文件總稱。本地編譯器:可以將c文件編譯成硬件平臺(tái)可執(zhí)行代碼的工具,一般由芯片廠商提供。程序燒寫器:將可執(zhí)行代碼下載至硬件平臺(tái)的工具,一般由芯片廠商提供。以上概念之間的關(guān)系如圖4-1所示。從圖4-1可以

3、看出,本地編譯器和程序燒寫器一般不包含在平臺(tái)中,一般是由芯片廠商或第三方廠商提供,如本書使用的iar for 51是由iar systems公司提供的。第4章 平 臺(tái) 移 植 4 4圖4-1 與tinyos移植相關(guān)的概念 第4章 平 臺(tái) 移 植 5 54.1.2 平臺(tái)目錄平臺(tái)目錄官方推薦使用“新的目錄”作為新平臺(tái)的發(fā)布目錄(調(diào)試和發(fā)布安裝都在linux系統(tǒng)的“/opt/”目錄下),并且參考tinyos原來的目錄建立發(fā)布目錄。用戶在新平臺(tái)上進(jìn)行開發(fā),其實(shí)就是在這個(gè)發(fā)布目錄下工作。一般情況下,一個(gè)新平臺(tái)的目錄結(jié)構(gòu)及必要的文件如圖4-2所示。第4章 平 臺(tái) 移 植 6 6圖4-2 新平臺(tái)目錄結(jié)構(gòu)及必

4、要的文件 第4章 平 臺(tái) 移 植 7 74.1.3 平臺(tái)建立實(shí)例平臺(tái)建立實(shí)例1. 建立建立cctinyos目錄目錄在windows下打開cygwin的安裝目錄,然后在“cygwinopt”目錄下建立cctinyos目錄(這里以平臺(tái)名作為發(fā)布目錄名),結(jié)果如圖4-3所示。2. 建立平臺(tái)目錄框架建立平臺(tái)目錄框架在“cctinyos”目錄下分別建立“apps、doc、support、tos”子目錄,結(jié)果如圖4-4所示。第4章 平 臺(tái) 移 植 8 8圖4-3 建立cctinyos目錄 第4章 平 臺(tái) 移 植 9 9圖4-4 cctinyos平臺(tái)目錄框架 第4章 平 臺(tái) 移 植 10 104.2 mak

5、e系統(tǒng)系統(tǒng)tinyos程序的編譯使用的是make工具,make工具通過解析makefile文件(以及符合makefile格式的腳本文件)查找參與編譯的文件并調(diào)用nesc編譯器,并進(jìn)一步調(diào)用本地編譯器和燒寫器完成tinyos程序的編譯鏈接和下載執(zhí)行工作(關(guān)于make工具及makefile文件的編寫方法請(qǐng)參考相關(guān)教材或參考本書系列教材linux操作系統(tǒng)教程)。本小節(jié)淺析tinyos的make系統(tǒng)工作原理,以便于理解tinyos的移植過程。4.2.1 make工作流程工作流程tinyos的make系統(tǒng)的工作流程如圖4-5所示。第4章 平 臺(tái) 移 植 11 11圖4-5 make工作流程 第4章 平

6、臺(tái) 移 植 12 12上述編譯過程涉及到以下幾個(gè)重要文件:makefile文件:位于當(dāng)前應(yīng)用程序目錄下,是make工具首先要解析執(zhí)行的文件。makerules文件:tinyos系統(tǒng)提供的系統(tǒng)makefile文件,一般位于“tinyos-2.x/support/ make/”目錄內(nèi)。平臺(tái)名.target文件:位于發(fā)布平臺(tái)目錄的“support/make/”目錄下,以平臺(tái)名命名的文件(如cc2530.target),用于建立與平臺(tái)相關(guān)的變量,并且提供平臺(tái)名和編譯生成目標(biāo)。第4章 平 臺(tái) 移 植 13 13芯片名.rules文件:位于發(fā)布平臺(tái)目錄的“support/make/芯片名/”目錄下,是ma

7、ke工具要解析執(zhí)行的主要用戶級(jí)makefile文件,具體實(shí)現(xiàn)真正的編譯調(diào)用和程序燒寫、下載調(diào)用。.platform文件:位于發(fā)布平臺(tái)目錄的“tos/platform/芯片名/”目錄下,用于指定要參與編譯的tinyos和發(fā)布平臺(tái)目錄,文件內(nèi)容包含類似于c語(yǔ)言下的“#include”預(yù)處理語(yǔ)句。第4章 平 臺(tái) 移 植 14 144.2.2 系統(tǒng)環(huán)境變量系統(tǒng)環(huán)境變量1. makerules變量變量根據(jù)前述make系統(tǒng)工作流程可知,所有的tinyos應(yīng)用程序目錄下都必須有一個(gè)makefile文件。該文件由命令行的“make 平臺(tái)名”命令觸發(fā)make工具解析執(zhí)行,其內(nèi)容一般如代碼4-1所示。【代碼4-1

8、】 makefilecomponent=頂層配件名include $(makerules)其中,tinyos規(guī)定,變量“makerules”是由用戶作為環(huán)境變量定義,并且指向tinyos系統(tǒng)提供的makerules文件。第4章 平 臺(tái) 移 植 15 152. 環(huán)境變量設(shè)置腳本環(huán)境變量設(shè)置腳本一般情況下,為方便用戶使用,在平臺(tái)目錄下提供一個(gè)shell腳本文件,在該文件中定義類似“makerules”的環(huán)境變量。該shell腳本文件在linux系統(tǒng)啟動(dòng)(或cygwin啟動(dòng))時(shí)由linux系統(tǒng)自動(dòng)調(diào)用,以自動(dòng)為tinyos系統(tǒng)設(shè)置好相應(yīng)的環(huán)境變量。腳本文件中至少要定義以下三個(gè)變量:tosdir:指向

9、官方tinyos安裝目錄,如“/opt/tinyos-2.x”。tosmake_path:指向發(fā)布平臺(tái)的“support/make”目錄,如“/opt/mytinyos/ supprot/make”。makerules:指向官方tinyos安裝目錄下的“makerules”文件,如“/opt/tinyos-2.x/ support/make/makerules”。以下shell腳本文件是本書配套平臺(tái)mytinyos的環(huán)境變量腳本,如示例4-1所示。第4章 平 臺(tái) 移 植 16 16【示例4-1】 myenv.sh# tinyos envsexport tosroot=/opt/tinyos-2

10、.xexport dhroot=/opt/mytinyosexport tosmake_path=$tosmakepath $dhroot/support/makeif ! -d $tosroot ; then echo tosroot $tosroot does not exist, fail exit 1else echo tosroot=$tosroot fi第4章 平 臺(tái) 移 植 17 17export tosdir=$tosroot/tosexport makerules=$tosroot/support/make/makerules#顯示設(shè)置好的環(huán)境變量echo tosdir=$t

11、osdirecho makerules=$makerulesecho tosmake_path=$tosmake_path#告訴用戶,設(shè)置完畢echo set mytinyos env success!第4章 平 臺(tái) 移 植 18 183. 自動(dòng)運(yùn)行腳本自動(dòng)運(yùn)行腳本為了讓建立好的shell腳本文件隨系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行,可以在linux系統(tǒng)的啟動(dòng)腳本中增加命令進(jìn)行運(yùn)行。對(duì)于cygwin,可以在其“/home/用戶名/.bashrc”腳本中增加命令,如圖4-6所示。第4章 平 臺(tái) 移 植 19 19圖4-6 增加命令以自動(dòng)運(yùn)行腳本 第4章 平 臺(tái) 移 植 2020然后,當(dāng)啟動(dòng)cygwin時(shí)可以看到

12、如圖4-7所示信息。圖4-7 cygwin啟動(dòng)時(shí)的顯示信息 第4章 平 臺(tái) 移 植 21 214.2.3 啟動(dòng)腳本實(shí)例啟動(dòng)腳本實(shí)例本小節(jié)內(nèi)容用于實(shí)現(xiàn)任務(wù)描述4.d.2,在4.d.1的基礎(chǔ)上,建立cctinyos平臺(tái)的啟動(dòng)腳本文件,并設(shè)置為自動(dòng)啟動(dòng)。1. 建立啟動(dòng)腳本文件建立啟動(dòng)腳本文件參考前述mytinyos平臺(tái)的腳本文件,建立cctinyos平臺(tái)的環(huán)境變量設(shè)置腳本文件,并保存于“opt/cctinyos/”目錄下。其內(nèi)容如描述4.d.2 cctinyos.env所示。第4章 平 臺(tái) 移 植 2222【描述4.d.2】 cctinyos.env# script to set cctinyos

13、env & simply commands# usage: source cctinyos.env in cctinyoss root dir# cctinyos envsexport tosroot=/opt/tinyos-2.xexport ccroot=/opt/cctinyosexport tosmake_path=$tosmakepath $ccroot/support/make第4章 平 臺(tái) 移 植 2323if ! -d $tosroot ; then echo tosroot $tosroot does not exist, fail exit 1else echo t

14、osroot=$tosroot fiexport tosdir=$tosroot/tosexport makerules=$tosroot/support/make/makerulesecho tosdir=$tosdirecho makerules=$makerulesecho tosmake_path=$tosmake_pathecho set cctinyos env success!第4章 平 臺(tái) 移 植 24242. 設(shè)置為自動(dòng)運(yùn)行設(shè)置為自動(dòng)運(yùn)行修改cygwin下的“/home/administrator/.bashrc”的腳本文件,在文件的末尾修改內(nèi)容如描述4.d.2 .bashr

15、c所示?!久枋?.d.2】 .bashrc#注釋掉以下兩行#source /opt/mytinyos/myenv.sh#cd /opt/mytinyos/apps#添加以下兩行代碼source /opt/cctinyos/cctinyos.envcd /opt/cctinyos/apps第4章 平 臺(tái) 移 植 25253. 重新啟動(dòng)重新啟動(dòng)cygwin運(yùn)行結(jié)果如圖4-8所示。圖4-8 cctinyos啟動(dòng) 第4章 平 臺(tái) 移 植 26264.3 support目錄目錄“平臺(tái)目錄名/support/”目錄用于存放為編譯工具鏈提供支持的編譯腳本文件。一般情況它只有一個(gè)make子目錄,按照官方要求m

16、ake目錄有以下兩部分內(nèi)容:“平臺(tái)名.target”文件。以平臺(tái)的芯片命名的子目錄。第4章 平 臺(tái) 移 植 27274.3.1 平臺(tái)名平臺(tái)名.target文件文件“平臺(tái)名.target”簡(jiǎn)稱為“.target”文件,按照官方要求,其為固定格式的makefile腳本,如代碼4-2所示?!敬a4-2】 平臺(tái)名.target文件platform = 平臺(tái)名ifdef platformpflags += -d_$(platform)_=1endif$(call tosmake_include_platform,芯片名)平臺(tái)目標(biāo): $(build_deps):第4章 平 臺(tái) 移 植 2828其中,上述代

17、碼中的黑體字由用戶根據(jù)需要替換為自己平臺(tái)的內(nèi)容:平臺(tái)名:也稱為平臺(tái)代號(hào),賦值給platform變量,該變量可以在后面所講的“芯片名.rules”文件中引用。芯片名:是平臺(tái)所運(yùn)行的mcu名稱,注意它的名字一定要與下面要講的芯片目錄名字一致。平臺(tái)目標(biāo):是make工具要生成的最終目標(biāo),一般與“平臺(tái)名”一致。另外:build_deps:是平臺(tái)目標(biāo)的依賴,該變量可以被后面的.rules、docs.extra和install.extra文件定義,以提供給make系統(tǒng)靈活實(shí)現(xiàn)用戶的目標(biāo)(nesc編譯、本地編譯、程序燒寫等)。第4章 平 臺(tái) 移 植 2929“.target”文件定義好后,將對(duì)用戶在新平臺(tái)上使

18、用make工具編譯程序時(shí)產(chǎn)生以下兩個(gè)直接影響:調(diào)用make工具編譯程序時(shí)的命令要使用“make 平臺(tái)目標(biāo)”。make工具調(diào)用相關(guān)腳本自動(dòng)尋找“芯片名”目錄下的“芯片名.rules”文件并解析執(zhí)行。例如,建立以cc2530為平臺(tái)名,芯片名也為cc2530的.target文件,則名字是cc2530.target,且內(nèi)容如示例4-2所示。第4章 平 臺(tái) 移 植 3030【示例4-2】 cc2530.targetplatform = cc2530ifdef platformpflags += -d_$(platform)_=1endif$(call tosmake_include_platform,c

19、c2530)cc2530: $(build_deps):第4章 平 臺(tái) 移 植 31 314.3.2 芯片目錄芯片目錄芯片目錄為make工具提供詳細(xì)的編譯規(guī)則。根據(jù)上述內(nèi)容可知,芯片目錄的名字要與.target文件中的“芯片名”一致,且主要含以下文件:“芯片名.rules”文件:是make工具要調(diào)用的主要編譯腳本,該文件實(shí)際調(diào)用nesc的編譯器對(duì)nesc程序進(jìn)行編譯。docs.extra文件:用于提供對(duì)“make 平臺(tái)名 docs”命令的支持,以生成可視化組件視圖。若沒有該文件,make工具根據(jù)系統(tǒng)提供的腳本自動(dòng)調(diào)用系統(tǒng)目錄下的docs.extra文件。insall.extra文件:用于提供對(duì)

20、“make 平臺(tái)名 install”的支持,以實(shí)現(xiàn)自動(dòng)將生成的nesc程序編譯成硬件平臺(tái)二進(jìn)制可執(zhí)行代碼,并下載至目標(biāo)平臺(tái)內(nèi)。其他腳本文件:一般是.rules文件調(diào)用的其他輔助腳本。第4章 平 臺(tái) 移 植 32324.3.3 芯片名芯片名.rules文件文件1. .rules文件的內(nèi)容文件的內(nèi)容“芯片名.rules”文件簡(jiǎn)稱“.rules”文件,本質(zhì)上是一個(gè)makefile文件腳本,被前述“平臺(tái)名.target”文件調(diào)用而后由make解析執(zhí)行。它主要完成以下工作:定義指向“參與編譯的路徑”變量以傳遞給nesc編譯器,讓編譯器可以找到程序所用的合適的組件和接口。調(diào)用nesc編譯器編譯nesc程序

21、為c程序。調(diào)用平臺(tái)硬件所需要的本地c語(yǔ)言編譯器編譯硬件可執(zhí)行的二進(jìn)制代碼。調(diào)用平臺(tái)硬件所需要的燒寫程序?qū)⒖芍付ㄐ写a下載至硬件。本書配套平臺(tái)mytinyos的cc2530.rules的文件內(nèi)容如示例4-3所示。第4章 平 臺(tái) 移 植 3333【示例4-3】 cc2530.rules#-*-makefile-*- vim:syntax=make# in order to exclude /usr/lib/ncc/, directly call to nesc1# 定義變量ncc = /usr/lib/ncc/nesc1libs = -lmbuilddir ?= build/$(platform)

22、app_c ?= $(builddir)/app.ciar_c ?= $(builddir)/app-iar.ccc2530_makedir ?= $(dhroot)/support/make/cc2530cc2530_platformdir ?= $(dhroot)/tos/platforms/cc2530第4章 平 臺(tái) 移 植 3434#定義build_deps變量,與cc2530.target文件中目標(biāo)依賴聯(lián)系起來ifndef build_deps ifeq ($(filter $(buildless_deps),$(goals),) build_deps = exe endifendi

23、f#為nesc編譯器的參數(shù)指定路徑值pflags += -i$(cc2530_platformdir)pflags += -i$(cc2530_makedir)/incpflags += -i$(cc2530_platformdir)/preinc第4章 平 臺(tái) 移 植 3535#為nesc編譯器的參數(shù)指定路徑值cflags+= -u_blocks_cflags+= -fnesc-include=deputy_nodeputy -fnesc-include=nesc_nx -fnesc-include=toscflags+= -fnesc-separator=_ -dnesc=134 -wne

24、sc-all#調(diào)用perl腳本引入要參與編譯的系統(tǒng)路徑cflags+=$(shell perl $(cc2530_makedir)/nescarg.pl)第4章 平 臺(tái) 移 植 3636第4章 平 臺(tái) 移 植 3737第4章 平 臺(tái) 移 植 3838第4章 平 臺(tái) 移 植 3939上述腳本代碼涉及到以下幾個(gè)make目標(biāo):tosimage:依賴于exe和imgprog目標(biāo)實(shí)現(xiàn)程序編譯和下載。exe:依賴于exe0目標(biāo)實(shí)現(xiàn)程序nesc程序編譯。exe0:通過(依賴于)builddir目標(biāo)實(shí)現(xiàn)編譯目錄的建立,并且通過命令實(shí)現(xiàn)nesc程序編譯。builddir:建立編譯目錄。imgprog:本地編譯,

25、且下載程序至硬件。以上目標(biāo)中,exe0、builddir和impprog是基本目標(biāo),tosimage和exe是通過基本目標(biāo)實(shí)現(xiàn)自己。這種目標(biāo)的嵌套機(jī)制,可以靈活的實(shí)現(xiàn)組合功能。第4章 平 臺(tái) 移 植 40402. 輔助腳本文件輔助腳本文件從上述代碼可以看出,cc2530.rules文件引入以下兩個(gè)新的腳本文件:nescarg.pl:perl腳本,分析處理.platform文件以引入nesc指向系統(tǒng)目錄的編譯路徑。iar.py:python腳本,主要處理nesc編譯形成的c語(yǔ)言文件中不符合c語(yǔ)言語(yǔ)法的注釋。關(guān)于perl和python腳本的編寫請(qǐng)參考相關(guān)資料。第4章 平 臺(tái) 移 植 41 413.

26、 nesc編譯器編譯器按照tinyos官方的推薦,nesc編譯器主要是“/usr/bin”目錄下的ncc和nescc兩個(gè)程序。用戶在使用的時(shí)候應(yīng)該使用ncc,然后ncc的部分編譯工作通過調(diào)用nescc完成。需要注意的是,上述代碼中用到的nesc編譯器是“/usr/lib/ncc”目錄下的nesc1程序。原因是本書用到的本地編譯器是iar,而ncc編譯器將產(chǎn)生一些iar不支持的數(shù)據(jù)類型(如64位)和零長(zhǎng)度的數(shù)組等。第4章 平 臺(tái) 移 植 42424.3.4 docs.extra文件文件1. nesdoc命令命令“docs.extra”文件的主要內(nèi)容就是調(diào)用nesdoc程序?yàn)槌绦蛏煽梢暬晥D,關(guān)

27、于nesdoc命令的使用可以在cygwin的命令行上運(yùn)行“man nesdoc”命令查看其使用說明,如圖4-9所示。第4章 平 臺(tái) 移 植 4343圖4-9 nesdoc的使用說明 第4章 平 臺(tái) 移 植 44442. docs.extra文件內(nèi)容文件內(nèi)容在docs.extra文件中要通過重新定義build_deps變量作為新的make目標(biāo)(與cc2530.target文件中目標(biāo)依賴聯(lián)系起來),并且在新目標(biāo)的命令中調(diào)用nesdoc。本書配套平臺(tái)mytinyos的docs.extra的文件內(nèi)容如示例4-4所示。第4章 平 臺(tái) 移 植 4545第4章 平 臺(tái) 移 植 4646當(dāng)用戶在應(yīng)用程序目錄下

28、使用“make 平臺(tái)名 docs”命令時(shí),通過makerules和. target文件最終執(zhí)行docs.extra文件中的上述nesdoc命令為程序生成一系列的.html文件(位于平臺(tái)目錄下的“doc/nesdoc/應(yīng)用程序名”目錄內(nèi)),用瀏覽器打開目錄下的“index.html”文件即可瀏覽程序的可視化組件視圖。注意,由于該文件重新定義了“build_deps”變量且指向了本文件中的docsx_目標(biāo),因此make系統(tǒng)將不再解析執(zhí)行cc2530.rules。第4章 平 臺(tái) 移 植 47474.3.5 install.extra文件文件與“docs.extra”腳本類似,“install.ext

29、ra”文件也要通過重新定義build_deps變量作為新的make目標(biāo)(與cc2530.target文件中目標(biāo)依賴聯(lián)系起來),以實(shí)現(xiàn)nesc程序本地編譯以及下載。本書配套平臺(tái)mytinyos的install.extra的文件內(nèi)容如示例4-5所示?!臼纠?-5】 install.extra#-*makefile-*- vim:syntax=makebuild_deps = tosimage注意,上述“tosimage”指向了本文件中沒有的“tosimage”目標(biāo),make系統(tǒng)自動(dòng)尋找到前述cc2530.rules中的“tosimage”目標(biāo)。第4章 平 臺(tái) 移 植 48484.3.6 移植實(shí)例移

30、植實(shí)例本小節(jié)內(nèi)容用于實(shí)現(xiàn)任務(wù)描述4.d.3,在4.d.2的基礎(chǔ)上,建立cctinyos平臺(tái)support目錄里的內(nèi)容,要求基于芯片cc2530。1. 建立建立support目錄的子目錄目錄的子目錄在“opt/cctinyos/support/”目錄下建立“make/cc2530”子目錄,結(jié)果如圖4-10所示。第4章 平 臺(tái) 移 植 4949圖4-10 support子目錄建立 第4章 平 臺(tái) 移 植 50502. 建立建立cctinyos.target文件文件在“opt/cctinyos/support/make/”目錄下建立cctinyos.target文件,其內(nèi)容如描述4.d.3 ccti

31、nyos.target所示。第4章 平 臺(tái) 移 植 51 51【描述4.d.3】 cctinyos.target#cctinyos.target platform = cctinyosifdef platformpflags += -d_$(platform)_=1endif$(call tosmake_include_platform,cc2530)cctinyos: $(build_deps):第4章 平 臺(tái) 移 植 52523. 使用使用null程序測(cè)試程序測(cè)試.target文件文件官方推薦用戶在移植過程中使用null程序簡(jiǎn)單測(cè)試移植成功與否,該程序位于tinyos的安裝目錄下的“app

32、s”目錄下。將“opt/tinyos-2.x/apps/”下的“null”目錄復(fù)制到“opt/cctinyos/apps/”目錄下,然后在cygwin命令行上運(yùn)行描述4.d.3編譯null程序所示命令?!久枋?.d.3】 編譯null程序$ cd null $ make cctinyos指令執(zhí)行結(jié)果如果沒有錯(cuò)誤提示,則表明上述操作步驟是成功的,如圖4-11所示。第4章 平 臺(tái) 移 植 5353圖4-11 編譯null程序 第4章 平 臺(tái) 移 植 54544. 建立建立cc2530.rules文件文件將“mytinyos/support/make/cc2530/”目錄下的cc2530.rules

33、文件拷貝到“cctinyos/ support/make/cc2530/”目錄下,文件內(nèi)容如描述4.d.3 cc2530.rules所示,其中黑體加粗的部分是針對(duì)cctinyos平臺(tái)的修改。第4章 平 臺(tái) 移 植 5555【描述4.d.3】 cc2530.rules#-*-makefile-*- vim:syntax=make# in order to exclude /usr/lib/ncc/, directly call to nesc1# (lots of iar-not-supported typedefs there, such as 64bit types, zero-length

34、 array etc.), # ncc = /usr/lib/ncc/nesc1libs = -lmbuilddir ?= build/$(platform)app_c ?= $(builddir)/app.ciar_c ?= $(builddir)/app-iar.ccc2530_makedir ?= $(ccroot)/support/make/cc2530第4章 平 臺(tái) 移 植 5656cc2530_platformdir ?= $(ccroot)/tos/platforms/cc2530#本地編譯器路徑:注意要與本機(jī)iar的安裝位置一致mcs51_iar_path=/cygdrive/

35、d/program files/iar systems/embedded workbench 6.0 evaluation/common/bin#燒寫器路徑:注意要與本機(jī)iar的安裝位置一致rfprog_path=/cygdrive/c/program files/texas instruments/smartrf flash programmer第4章 平 臺(tái) 移 植 57575. 建立輔助腳本文件建立輔助腳本文件拷貝“mytinyos/support/make/cc2530/”目錄下以下文件到“cctinyos/support/make/ cc2530/”目錄內(nèi):doc.extra:不是必

36、須的,如果不需要對(duì)“make 平臺(tái)名 docs”命令提供支持,可以不提供該擴(kuò)展腳本。本例不提供該腳本。iar.py:一般需要編寫此類文件,用于處理nesc編譯形成的c語(yǔ)言文件中不符合c語(yǔ)言語(yǔ)法的注釋。nescarg.pl:本例與mytinos平臺(tái)一樣使用的“nesc1”編譯器而不是傳統(tǒng)的“ncc”編譯器程序,所以需要此類文件輔助找到“.platform”文件。第4章 平 臺(tái) 移 植 5858install.extra:不是必須的,如果不需要將nesc程序下載到硬件平臺(tái)上,可以不提供該擴(kuò)展腳本。本例建議提供該腳本。iar_tinyos_project.eww、iar_tinyos_project

37、.ewp:這兩個(gè)文件用于為用戶提供iar工程模板實(shí)現(xiàn)本地化編譯。inc目錄:此目錄是c語(yǔ)言庫(kù)頭文件,一般要提供給用戶。其中,“nescarg.pl”文件需要稍加修改,代碼如描述4.d.3 nescarg.pl所示(黑體加粗后代碼是修改之后的)。第4章 平 臺(tái) 移 植 5959【描述4.d.3】 nescarg.pl#!/usr/bin/perl$tosdir = $env“tosdir” if defined($env“tosdir”);$ccroot = $env“ccroot” if defined($env“ccroot”);$platform_dir = “$ccroot/tos”;$

38、platform_dh = “$ccroot/tos/platforms/cc2530/.platform” ;$target=“cctinyos”;.第4章 平 臺(tái) 移 植 60606. 測(cè)試移植結(jié)果測(cè)試移植結(jié)果繼續(xù)使用null程序測(cè)試移植結(jié)果,命令執(zhí)行情況如圖4-12所示。從圖4-12可以看出,“cc2530.rules”文件被make系統(tǒng)找到并解釋執(zhí)行,如“mkdir p build/cctinyos”命令已經(jīng)執(zhí)行,并且提示“platform.h”和“hardware.h”文件未找到(這兩個(gè)文件將在后面的例子中進(jìn)行移植)。第4章 平 臺(tái) 移 植 61 61圖4-12 測(cè)試移植結(jié)果 第4章

39、 平 臺(tái) 移 植 62624.4 tos目錄目錄4.4.1 platforms目錄目錄“tos/platforms/”目錄下存放的是平臺(tái)代碼,該目錄下的每個(gè)子目錄對(duì)應(yīng)一個(gè)硬件平臺(tái),如果發(fā)布的平臺(tái)要同時(shí)對(duì)cc2530和cc2430提供支持,則該目錄下要分別建立cc2530和cc2430子目錄。在移植時(shí)要把相應(yīng)硬件平臺(tái)的代碼放在該子目錄下,以便前述的.rules文件可以尋找到目錄下的代碼參與編譯。下面通過官方規(guī)定的組成平臺(tái)代碼的文件來了解一下平臺(tái)代碼的含義。平臺(tái)代碼至少要有以下文件組成:“.platform”文件:指定nesc編譯器要搜索的芯片驅(qū)動(dòng)、射頻驅(qū)動(dòng)、傳感器、網(wǎng)絡(luò)驅(qū)動(dòng)等目錄,以及為tiny

40、os的任務(wù)調(diào)度器指定要使用的組件。第4章 平 臺(tái) 移 植 6363platformp.nc/paltformc.nc組件文件:提供初始化接口,以初始化芯片、射頻、傳感器等。hardware.h文件:被tos/system/mainc.nc文件包含,用于定義一些與芯片相關(guān)的宏。platform.h文件:被tos.h文件包含,主要用于定義實(shí)現(xiàn)系統(tǒng)啟動(dòng)的“platform _bootstrap”宏。其他平臺(tái)文件:如activemessagec(射頻收發(fā))、platformledsc(led控制)等組件。第4章 平 臺(tái) 移 植 64641. .platform文件文件“.platform”文件只有擴(kuò)展

41、名,該文件一般為固定格式(perl腳本),內(nèi)容由用戶根據(jù)需要修改。本書配套平臺(tái)mytinyos的“.platform”文件內(nèi)容如示例4-6所示。【示例4-6】 .platform# vim:syntax=perl#為nesc編譯器指定搜索路徑push( includes, qw(第4章 平 臺(tái) 移 植 6565 %p/chips/cc2530 %p/chips/cc2530/radio %p/chips/cc2530/timer %p/chips/cc2530/uart %p/chips/cc2530/net %p/chips/cc2530/net/types %p/chips/cc2530/

42、net/interfaces %p/lib/rfxlink/layers %p/lib/rfxlink/util %p/lib/net/dh %p/lib/timer %p/lib/serial %p/lib/net %p/lib/net/ctp %p/lib/net/4bitle第4章 平 臺(tái) 移 植 6666 %t/interfaces %t/types %t/system) );opts = qw( -fnesc-no-debug);#通過命令行參數(shù)“-fnesc-scheduler”指定調(diào)度器要使用的組件(一般不需要修改)push opts,-fnesc-scheduler=tinys

43、chedulerc,tinyschedulerc.taskbasic,taskbasic,taskbasic,runtask,posttask if !$with_scheduler_flag;第4章 平 臺(tái) 移 植 6767上述代碼被前述“nescarg.pl”腳本解析,其中“%t”指tinyos的安裝目錄(tinyos-2.x/tos);“%p”指“發(fā)布平臺(tái)/tos”目錄。用戶根據(jù)需要(如新增驅(qū)動(dòng)目錄等)編輯上述形如“%p/chips/cc2530”的目錄條。第4章 平 臺(tái) 移 植 68682. platformp.nc/paltformc.nc組件文件組件文件platformp和plat

44、formc組件提供init接口的實(shí)現(xiàn),負(fù)責(zé)將系統(tǒng)啟動(dòng)到可用狀態(tài),具體內(nèi)容一般包括時(shí)鐘校準(zhǔn)、i/o初始化或發(fā)布平臺(tái)特別要求的其他初始化工作等。platformc,是配件,用于輸出init接口以供系統(tǒng)啟動(dòng)代碼(realmainp模塊)調(diào)用。platformp,是模塊,具體實(shí)現(xiàn)init接口。本書配套平臺(tái)mytinyos的platformp和platformc組件代碼如示例4-7所示。第4章 平 臺(tái) 移 植 6969【示例4-7】 platformp.nc、platformc.nc/* * platformc.nc */configuration platformc provides interfac

45、e init;implementation components platformp; init = platformp.init;第4章 平 臺(tái) 移 植 7070/* * platformp.nc */#include “cc2530.h”module platformp provides interface init;implementation command error_t init.init() return success; 第4章 平 臺(tái) 移 植 71 713. hardware.h文件文件“hardware.h”文件一般通過包含一個(gè)芯片特定的頭文件(如cc2530hardwar

46、e.h文件,移植時(shí)需要用戶來實(shí)現(xiàn)),以定義一些與芯片相關(guān)的宏。本書配套平臺(tái)mytinyos的“hardware.h”文件代碼如示例4-8所示。第4章 平 臺(tái) 移 植 7272【示例4-8】 hardware.h#ifndef hardware_h#define hardware_h#include “cc2530hardware.h”#ifndef mhz #define mhz 16#endif第4章 平 臺(tái) 移 植 7373#ifndef platform_baudrateenum platform_baudrate = 57600l;#endif#endif第4章 平 臺(tái) 移 植 747

47、44. platform.h文件文件一般情況下,“platform.h”文件首先包含芯片特定的頭文件,然后實(shí)現(xiàn)“platform_bootstrap”宏定義,該宏被系統(tǒng)的realmainp模塊調(diào)用以啟動(dòng)平臺(tái)。本書配套平臺(tái)mytinyos的“platform.h”文件代碼如示例4-9所示。第4章 平 臺(tái) 移 植 7575【示例4-9】 platform.h#include “stdio.h”#include “cc2530hardware.h”/* set clock to 32mhz */#define platform_bootstrap() clkconcmd = 0 x00; while (clkconsta != 0 x00);第4章 平 臺(tái) 移 植 76765. 其他平臺(tái)代碼其他平臺(tái)代碼主要是指一些與硬件接口層(hil層)代碼,例如activemessagec和platformledsc組件等。第4章 平 臺(tái) 移 植 77774.4.2 chips目錄目錄“tos/chips/”目錄下按照芯片類型組織目錄存放芯片的驅(qū)動(dòng)程序,如圖4-13所示是在editplus軟件下看到的本書配套平臺(tái)mytinyos的chips目錄。圖4-13中的“chips/cc2530/”目錄下的adc、net、radio、timer、ua

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論