陶維成,姚學(xué)軍
(蕪湖職業(yè)技術(shù)學(xué)院軟件創(chuàng)新中心,安徽 蕪湖241006)
近年來(lái),嵌入式系統(tǒng)廣泛應(yīng)用于移動(dòng)智能、物聯(lián)網(wǎng)、可穿戴計(jì)算、智慧城市等新興領(lǐng)域.2014 年8月,在中國(guó)深圳舉行的一年一度工業(yè)計(jì)算機(jī)及嵌入式系統(tǒng)展上,最受關(guān)注的是利用嵌入式系統(tǒng)技術(shù)作為物聯(lián)網(wǎng)、智能家居等相關(guān)的智能化硬件解決方案[1].嵌入式系統(tǒng)除了應(yīng)用于新興領(lǐng)域外,在傳統(tǒng)行業(yè)也得到了進(jìn)一步應(yīng)用,如工業(yè)控制、安防、航空航天、智能家居、智能交通等,在當(dāng)前的生產(chǎn)生活中,嵌入式系統(tǒng)無(wú)處不在[2~3].
隨著嵌入式系統(tǒng)技術(shù)和應(yīng)用的不斷發(fā)展和深入,從事嵌入式系統(tǒng)研究與開發(fā)的人員將越來(lái)越多,構(gòu)建好嵌入式系統(tǒng)開發(fā)平臺(tái)是進(jìn)行研究、開發(fā)的重要基礎(chǔ)環(huán)節(jié).由于嵌入式系統(tǒng)開發(fā)環(huán)境相對(duì)于傳統(tǒng)的PC 開發(fā)環(huán)境較為復(fù)雜,當(dāng)前國(guó)內(nèi)外尚無(wú)此類集成開發(fā)環(huán)境(IDE),鑒于此,本文以ARM S3C2440 作為開發(fā)板,以內(nèi)核為L(zhǎng)inux 2.6 的Linux作為嵌入式操作系統(tǒng),快速構(gòu)建嵌入式系統(tǒng)開發(fā)環(huán)境,其它嵌入式處理器、嵌入式操作系統(tǒng),如ARM系列、MIPS,以及μC/OS、WinCE、Andorid 等,其構(gòu)建方法和原理基本相同,本文不再贅述.最后,對(duì)構(gòu)建的開發(fā)平臺(tái)進(jìn)行了測(cè)試,以及下一步工作.
在構(gòu)建嵌入式系統(tǒng)開發(fā)環(huán)境時(shí),事前在軟件、硬件及其它工具方面應(yīng)做一些準(zhǔn)備工作,然后按照步驟,快速構(gòu)建起嵌入式系統(tǒng)開發(fā)環(huán)境,實(shí)現(xiàn)開發(fā)產(chǎn)品的功能.
在構(gòu)建嵌入式系統(tǒng)開發(fā)平臺(tái)時(shí),需要準(zhǔn)備基本軟硬件工具.軟件工具主要有:Linux 2.4 內(nèi)核以上的操作系統(tǒng)及源代碼、WindowsXP 或Window 7、VMware、FTP、GCC 交叉編譯工具、JTAG 驅(qū)、串口通訊工具、Bootloader 源代碼,如VIVI 或Uboot 或其它的BootLoaer 等.
硬件工具主要有:一臺(tái)帶有串口的PC 機(jī)用作主機(jī)ARM 目標(biāo)板、串口線、交叉或直通以太網(wǎng)線、USB 數(shù)據(jù)線等.
構(gòu)建完成后的嵌入式系統(tǒng)開發(fā)平臺(tái)如圖1 所示.
構(gòu)建嵌入式系統(tǒng)開發(fā)環(huán)境步驟包括:建立硬件環(huán)境;建立交叉編譯環(huán)境;Bootloaer 的編譯與移植;Linux 內(nèi)核裁剪、編譯與移植;根文件系統(tǒng)的建立與移植;驗(yàn)證性測(cè)試等.
1.2.1 主機(jī)工具配置與硬件環(huán)境的建立
主機(jī)上需具備的環(huán)境主要有:Windows XP 或Windows 7、安裝虛擬機(jī)VMware6.0 以上版本、串口通訊工具,如超級(jí)終端或SecureCRT 或Linux minicom 等,在虛擬機(jī)中安裝Linux 2.4 以上版本或安裝雙操作系統(tǒng).其中,串口屬性設(shè)置為:波特率為“115200”、數(shù)據(jù)位為“8”、奇偶校驗(yàn)為“無(wú)”、停止位為“1”、數(shù)據(jù)流控制為“無(wú)”.
硬件環(huán)境包括:(1)開發(fā)板串口與主機(jī)串口相連接;(2)開發(fā)板網(wǎng)口與主機(jī)網(wǎng)口連接;(3)JTAG與開發(fā)板相連,將開發(fā)板上的JTAG 打到JTAG 開關(guān),以便用來(lái)燒寫B(tài)ootLoader.
1.2.2 Linux 內(nèi)核的裁剪與移植
(1)建立交叉編譯環(huán)境
下載與Linux 操作系統(tǒng)內(nèi)核版本相對(duì)應(yīng)的交叉編譯工具到指定的目錄下,如/usr/local/arm/cross-2.95.3.tar.bz2,解開交叉編譯工具包,tar xjvf cross-2.95.3.tar.bz2.為了在任一目錄都能執(zhí)行交叉編譯器,需要配置環(huán)境變量,使內(nèi)核和其它應(yīng)用程序均可使用諸如arm-linux-xx 來(lái)指定使用該交叉編譯器.在/etc/profile 文件中添加交叉編譯器的執(zhí)行路徑,如/usr/local/arm/2.95.3/bin,或在/.bashrc 中添加export PATH = /usr/local/arm/2.95.3/bin/:$PATH.
圖1 嵌入式系統(tǒng)開發(fā)平臺(tái)
(2)BootLoader 編譯與燒寫
BootLoader 的作用主要有:將操作系統(tǒng)內(nèi)核從flash 拷貝到RAM 空間,并執(zhí)行內(nèi)核;初始化硬件;提供寫入flash 的功能;基于命令的用戶操作界面.
準(zhǔn)備BootLoader 源文件,本文以VIVI 為例,其源代碼包為vivi.tar.gz.將源代碼包拷貝到相應(yīng)目錄下并解包,如tar xzvf/usr/local/arm/myarm/vivi.tar.gz.解完包之后,到vivi 目錄下,用make menuconfig 對(duì)bootloader 進(jìn)行配置,快速方法是選擇默認(rèn)配置文件,然后使用make 進(jìn)行編譯,編譯完成后,在vivi 目錄下生成一個(gè)名為vivi 的二進(jìn)制文件.
用JTAG 燒寫vivi 到開發(fā)板,執(zhí)行JTAG 相應(yīng)的命令,如Jflash/f:vivi,此后出現(xiàn)三次要求輸入?yún)?shù),第一次是讓選擇Flash,選0;第二次是選擇JTAG 對(duì)flash 的兩種功能,也選0;第三次是讓選擇起始地址,選0.此后等待大約3 ~5min 的燒寫時(shí)間,當(dāng)VIVI 燒寫完畢后選擇參數(shù)2,退出燒寫,如圖2 所示.
圖2 Bootloaer 燒寫
(3)Linux 內(nèi)核配置、編譯與移植
下載Linux 所需版本內(nèi)核源代碼包到指定目錄下,解開包之后,產(chǎn)生一個(gè)名為kernel 源碼目錄.在進(jìn)行嵌入系統(tǒng)開發(fā)時(shí),應(yīng)根據(jù)產(chǎn)品軟硬件實(shí)際需求,對(duì)Linux 內(nèi)核進(jìn)行定制,最大程度縮小內(nèi)核體積,可用可視化方式進(jìn)行裁剪,make menuconfig,如圖3 所示.
圖3 Linux kernel 配置界面
當(dāng)內(nèi)核配置完成之后,接著就是編譯內(nèi)核,其命令為make clean、make dep、make zIame,當(dāng)編譯成功之后,生成zImage 文件,該文件位置在內(nèi)核源碼下的arch/arm/boot 下面.
通過(guò)串口寫入內(nèi)核到開發(fā)板.復(fù)位開發(fā)板,按空格鍵,進(jìn)入vivi,輸入:vivi >load flash kernel x 回車,如圖4 所示.
圖4 通過(guò)串口移植Linux 內(nèi)核
1.2.3 移植根文件系統(tǒng)
準(zhǔn)備好或自己制作根文件系統(tǒng),通過(guò)串口或USB 下載到開發(fā)板上的flash 相應(yīng)分區(qū)中,下載方法與內(nèi)核燒寫相同.vivi >load flash root x 回車.
當(dāng)文件系統(tǒng)下載完成時(shí),此時(shí)一個(gè)基于Linux的嵌入式系統(tǒng)開發(fā)環(huán)境基本構(gòu)建完成.但需要注意的是,要實(shí)現(xiàn)主機(jī)、開發(fā)板之間互聯(lián)互通,簡(jiǎn)單而又實(shí)用的辦法是計(jì)算機(jī)網(wǎng)絡(luò)通信,因而需要將它們組建成一個(gè)局域網(wǎng),以便開發(fā)文件能夠上傳、下載和遠(yuǎn)程控制.
此外,開發(fā)人員應(yīng)能較熟練使用Linux 常用命令、工具和服務(wù)、C/C++語(yǔ)言、GCC 編譯器等.
字符設(shè)備是Linux 嵌入式系統(tǒng)主要設(shè)備之一,Linux 設(shè)備分為三類,一類為字符設(shè)備,如觸摸屏、超聲波傳感器、紅外傳感器等,一類為塊設(shè)備,如flash、硬盤等,一類為網(wǎng)絡(luò)設(shè)備[4].這些設(shè)備需要相應(yīng)的驅(qū)動(dòng)程序來(lái)驅(qū)動(dòng),在Linux 中,驅(qū)動(dòng)程序是內(nèi)核的一部分.在整個(gè)嵌入式系統(tǒng)中,驅(qū)動(dòng)程序的設(shè)計(jì)與開發(fā)屬于板級(jí)支持包(BSP)范疇[5].
驅(qū)動(dòng)程序開發(fā)包括兩個(gè)部分,一是底層驅(qū)動(dòng)設(shè)計(jì),一是上層應(yīng)用測(cè)試.一個(gè)Linux 字符設(shè)備驅(qū)動(dòng)程序主要包括4 個(gè)部分:(1)所需要的頭文件;(2)對(duì)設(shè)備的操作:打開(open)、控制(control)、關(guān)閉(close)等;(3)文件的操作(file_operations);(4)設(shè)備的注冊(cè)與初始化、卸載(module_init、module_exit).下面以一LED 設(shè)備驅(qū)動(dòng)為例給出Linux 字符設(shè)備驅(qū)動(dòng)程序架構(gòu).
(1)頭文件部分
(2)接口部分
(3)設(shè)備操作部分
(4)文件操作部分
(5)設(shè)備的初始化和卸載
嵌入式系統(tǒng)應(yīng)用領(lǐng)域越來(lái)越廣泛,好的開發(fā)環(huán)境無(wú)疑對(duì)開發(fā)起到便捷作用.本文闡述了嵌入式系統(tǒng)所需要的軟硬件,接著詳細(xì)地給出了構(gòu)建一個(gè)嵌入式系統(tǒng)開發(fā)平臺(tái)的步聚.下一步工作,開展對(duì)嵌入式系統(tǒng)集成開發(fā)環(huán)境的研究,以期為廣大學(xué)習(xí)、研究、開發(fā)嵌入式系統(tǒng)人員提供性能較好的平臺(tái).
[1] 嵌入式系統(tǒng)已成智能硬件與物聯(lián)網(wǎng)天下[EB/OL?.http://www.esmchina.com/ARCH_2014_8_01_10.htm.
[2] 施樂平,楊征宇,馬憲民等.ARM 嵌入式系統(tǒng)綜述[J].中國(guó)測(cè)試,2012,38(12):14-16.
[3] 王樹紅.嵌入式系統(tǒng)的現(xiàn)狀及發(fā)展趨勢(shì)[J].太原大學(xué)學(xué)報(bào),2007,8(2):121-122,139.
[4] 劉淼.嵌入式系統(tǒng)接口設(shè)計(jì)與Linux 驅(qū)動(dòng)程序開發(fā)[M].北京:北京航空航天大學(xué)出版社,2006.
[5] 鄭靈翔.嵌入式接口技術(shù)與Linux 驅(qū)動(dòng)開發(fā)[M].北京:北京航空航天大學(xué)出版社,2010.