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