吳捷
摘要:嵌入式軟件開(kāi)發(fā)是當(dāng)前熱門(mén)技術(shù),而構(gòu)建嵌入式軟件開(kāi)發(fā)環(huán)境是進(jìn)行嵌入式軟件開(kāi)發(fā)的基礎(chǔ)。該文對(duì)如何搭建基于ARM的嵌入式Linux軟件開(kāi)發(fā)平臺(tái)進(jìn)行了探究。根據(jù)軟件開(kāi)發(fā)的一般流程,從交叉編譯環(huán)境的建立,到TFTP和NFS的配置,都進(jìn)行了詳細(xì)的論述,并通過(guò)實(shí)驗(yàn)證明了平臺(tái)的可用性。
關(guān)鍵詞:嵌入式系統(tǒng);ARM;Linux;交叉編譯
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)22-0227-02
Abstract:Embedded software development is the focus of current research,construction of the embedded software development environment is the basis of embedded software development. This paper research on how to build embedded Linux software development platform based on ARM. According to the mainline of software development process,from the establishment of cross-compilation environment,to TFTP and NFS development environment,all are discussed in detail, and the availability of the platform was demonstrated by the experimental results.
Key words:embedded system; ARM; Linux; cross-compilation
嵌入式設(shè)備的使用日益廣泛,其中操作系統(tǒng)的選用成為關(guān)注的焦點(diǎn)。嵌入式操作系統(tǒng)是一種支持嵌入式系統(tǒng)應(yīng)用的操作系統(tǒng)軟件,它是嵌入式系統(tǒng)(包括硬、軟件系統(tǒng))極為重要的組成部分,通常包括與硬件相關(guān)的底層驅(qū)動(dòng)軟件、系統(tǒng)內(nèi)核、設(shè)備驅(qū)動(dòng)接口、通信協(xié)議、圖形界面等。與通用操作系統(tǒng)相比較,嵌入式操作系統(tǒng)在系統(tǒng)實(shí)時(shí)高效性、硬件的相關(guān)依賴(lài)性、軟件固態(tài)化以及應(yīng)用的專(zhuān)用性等方面具有較為突出的特點(diǎn)。目前主流的嵌入式操作系統(tǒng)有Windows CE、VxWorks、嵌入式Linux等。其中,Linux成為極有吸引力的一種選擇,它是個(gè)和Unix相似、以核心為基礎(chǔ)的、完全內(nèi)存保護(hù)、多任務(wù)多進(jìn)程的操作系統(tǒng)。支持廣泛的計(jì)算機(jī)硬件,程式源碼全部公開(kāi),任何人可以修改并在GNU通用公共許可證(GNU General Public License)下發(fā)行。由于Linux桌面系統(tǒng)在實(shí)際使用中熟悉的人較少,開(kāi)發(fā)者在進(jìn)行嵌入式Linux軟件開(kāi)發(fā)和研究的過(guò)程中,往往面臨搭建開(kāi)發(fā)平臺(tái)的困難[1]。本文對(duì)基于ARM的嵌入式Linux開(kāi)發(fā)平臺(tái)的搭建進(jìn)行了研究,提供了一種可靠性較高的方法。
1 嵌入式開(kāi)發(fā)軟件平臺(tái)搭建
嵌入式軟件開(kāi)發(fā)一般遵循“宿主機(jī)一目標(biāo)板”的開(kāi)發(fā)模式。其中核心內(nèi)容主要是宿主機(jī)交叉編譯環(huán)境[2]以及TFTP和NFS環(huán)境的搭建。在本文給出的實(shí)驗(yàn)示例中,宿主機(jī)上安裝的是目前比較流行的RHEL 6版本。
1.1 宿主機(jī)交叉編譯環(huán)境的搭建
因?yàn)槌杀驹?,嵌入式系統(tǒng)的資源往往是有限的,因此直接在嵌入式系統(tǒng)的硬件平臺(tái)上編寫(xiě)軟件比較困難。這時(shí)候就需要交叉編譯。所謂交叉編譯就是在某個(gè)主機(jī)平臺(tái)上(比如PC上)用交叉編譯器編譯出可在其他平臺(tái)上(比如ARM上)運(yùn)行的代碼的過(guò)程。嵌入式系統(tǒng)交叉編譯環(huán)境如圖1所示。
下面就介紹如何搭建宿主機(jī)交叉編譯環(huán)境。本文在測(cè)試時(shí)使用的交叉編譯器版本為arm-linux-gcc-3.4.1.tgz,硬件方面使用的是上海雙實(shí)科技提供的基于S3C2440的開(kāi)發(fā)板。
安裝交叉編譯器arm-linux-gcc-3.4.1.tgz步驟如下:(通過(guò)U盤(pán)拷貝到系統(tǒng)中,并放置根目錄下)
cd /
tar zxvf arm-linux-gcc-3.4.1.tgz
vi /root/.bashrc
添加下面一句
PATH=$PATH:/usr/local/arm/3.4.1/bin
source /root/.bashrc //使文件生效
arm-linux-gcc –v //查看交叉編譯器版本號(hào),應(yīng)該顯示為3.4.1
1.2 TFTP的搭建
TFTP是一種傳輸文件的簡(jiǎn)單協(xié)議, 它沒(méi)有FTP協(xié)議那么多特征, 不支持目錄列表及用戶(hù)認(rèn)證[3],但是實(shí)現(xiàn)快捷,被廣泛應(yīng)用于嵌入式開(kāi)發(fā)領(lǐng)域。TFTP也是基于傳統(tǒng)的C/S模式進(jìn)行工作, TFTP開(kāi)發(fā)環(huán)境的構(gòu)建分為宿主機(jī)端的tftp-server支持以及目標(biāo)板的tftp-client支持。
1.2.1 構(gòu)建宿主機(jī)tftp開(kāi)發(fā)環(huán)境
1) 首先利用配置好的本地yum源安裝tftp服務(wù)軟件包
mount /dev/cdrom /media
yum install tftp*
2) 修改配置文件
在RHEL 6系統(tǒng)中TFTP服務(wù)默認(rèn)情況下是禁用的,所以要修改/etc/xinetd.d/tftp文件來(lái)開(kāi)啟服務(wù)。操作如下:
vi /etc/xinetd.d/tftp
將配置選項(xiàng)disable= yes改為disable= no,保存退出
3)重新啟動(dòng)tftp-server
service xinetd restart
1.2.2 構(gòu)建目標(biāo)板tftp開(kāi)發(fā)環(huán)境
一般來(lái)說(shuō),目標(biāo)板都能夠支持tftp-client,所以嵌入式目標(biāo)板tftp環(huán)境一般就不需要再配置了。在目標(biāo)板可以通過(guò)類(lèi)似命令tftp –r a.c –g 211.65.180.1下載文件。
1.3 NFS開(kāi)發(fā)環(huán)境的搭建
tftp服務(wù)只在需要下載或傳輸文件至開(kāi)發(fā)板時(shí)使用。在應(yīng)用程序開(kāi)發(fā)環(huán)節(jié),通常都要
搭建好NFS環(huán)境[4]。NFS是系統(tǒng)間進(jìn)行文件共享的一種網(wǎng)絡(luò)協(xié)議,在NFS的應(yīng)用結(jié)構(gòu)中有服務(wù)器和客戶(hù)機(jī)兩種角色,NFS客戶(hù)端通過(guò)掛載NFS文件系統(tǒng)的方式訪(fǎng)問(wèn)NFS服務(wù)器中輸出的共享目錄 。因此,NFS方式比f(wàn)tp方式有著更高的執(zhí)行效率。
1.3.1 宿主機(jī)NFS開(kāi)發(fā)環(huán)境的建立
1)安裝NFS服務(wù)器
mount /dev/cdrom /media
yum install nfs-utils
2)關(guān)閉服務(wù)器端防火墻
service iptables stop
3)配置NFS服務(wù)器
在宿主機(jī)端以root的身份登錄。使用vi編輯器編輯/etc/exports文件,該文件中默認(rèn)內(nèi)容為空,可以添加如下內(nèi)容:
/home/share 211.65.180.1 (rw,sync,no_root_squash)
添加的內(nèi)容表示允許IP為211.65.180.1的計(jì)算機(jī)以讀寫(xiě)的權(quán)限來(lái)訪(fǎng)問(wèn)共享目錄/home/share。
4)啟動(dòng)RPC服務(wù)(在RHEL6中用rpcbind服務(wù)代替之前的portmap服務(wù))
service rpcbind start
5)啟動(dòng)NFS服務(wù)器
service nfs start
1.3.2 目標(biāo)機(jī)NFS開(kāi)發(fā)環(huán)境的建立
目標(biāo)板如果不支持NFS,則需要重新編譯內(nèi)核,添加相應(yīng)的選項(xiàng)。
1)配置內(nèi)核支持NFS客戶(hù)端
將內(nèi)核源代碼拷貝到相關(guān)目錄下,然后輸入命令make menuconfig,在出現(xiàn)的圖形界面中選擇Load an Alternate Configuration File菜單載入配置文件,添加內(nèi)核對(duì)NFS的支持,然后保存退出,用命令make uImage編譯內(nèi)核,將生成的uImage重新下載到目標(biāo)板啟動(dòng)即可。
2)目標(biāo)板對(duì)NFS共享目錄的掛栽
mount -t nfs –o nolock 192.168.0.10:/tftpboot /tmp
2 結(jié)束語(yǔ)
本文對(duì)構(gòu)建基于ARM的嵌入式Linux軟件開(kāi)發(fā)環(huán)境進(jìn)行了探究。作者在宿主機(jī)上安裝了內(nèi)核較新的Linux企業(yè)版本RHEL 6,著重研究了交叉編譯環(huán)境的建立,TFTP和NFS的配置,從實(shí)驗(yàn)結(jié)果來(lái)看,提供了一種可靠性較高的方法。
參考文獻(xiàn):
[1] 茍軍年. ARM-Linux嵌入式軟件開(kāi)發(fā)平臺(tái)的搭建. 計(jì)算機(jī)時(shí)代[J]. 2010(11): 53-55.
[2] 張歡慶, 高麗, 宋承祥. 基于ARM的嵌入式Linux交叉編譯環(huán)境的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)與數(shù)字工程, 2012, 40(2): 151-153.
[3] 李懷剛, 邱建新. 網(wǎng)絡(luò)安裝Linux的技術(shù)原理分析及實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2006, 23(9): 110-112.
[4] 葉軍, 朱華生. 嵌入式Linux NFS方式下應(yīng)用程序的實(shí)現(xiàn)[J]. 微計(jì)算機(jī)信息, 2007, 23(8).