引言
Linux作為嵌入式系統(tǒng)的主要工具,具有源代碼開(kāi)放、完全可定制、支持許多網(wǎng)絡(luò)協(xié)議、服務(wù)器級(jí)別高、可靠性高等很多優(yōu)點(diǎn)。但現(xiàn)有的嵌入式Linux市場(chǎng)開(kāi)始分化,現(xiàn)有的選擇包括半導(dǎo)體廠商提供的實(shí)例方案、嵌入式OSV提供商應(yīng)用的嵌入式Linux產(chǎn)品、嵌入式產(chǎn)品開(kāi)發(fā)商的自有方案和開(kāi)源項(xiàng)目等。由于缺乏一致性,造成了嵌入式開(kāi)發(fā)高昂的維護(hù)成本,不僅嵌入式開(kāi)發(fā)缺乏足夠的專業(yè)人員,而且開(kāi)發(fā)過(guò)程存在安全漏洞問(wèn)題。在Yocto Project項(xiàng)目中,可以使用許多高效的工具,從而輕松定制嵌入式Linux產(chǎn)品。
1 YoCto Proiect的原理和架構(gòu)
Yocto Project是一個(gè)開(kāi)源項(xiàng)目,由Linux Foundation主導(dǎo)并被嵌入式業(yè)界領(lǐng)導(dǎo)者所支持。Yocto Project與OpenEmbedded兼容,后者包括了許多開(kāi)源項(xiàng)目的構(gòu)建方法,可以作為Yocto Project的有效補(bǔ)充。Yocto Project提供基于社區(qū)測(cè)試的支持多種架構(gòu)的鏡像。Yocto Project的優(yōu)點(diǎn)如下:具有高質(zhì)量的構(gòu)建系統(tǒng),平等地支持所有主流的嵌入式架構(gòu)(ARM、Power PC、MIPS、x86(32&64位)),緊密跟蹤許多上游開(kāi)源項(xiàng)目的最新發(fā)布版本,具有統(tǒng)一的Linux BSP格式和應(yīng)用程序開(kāi)發(fā)套件,還可輕松地實(shí)現(xiàn)從原型切換到商用嵌入式Linux產(chǎn)品。
Yocto Project架構(gòu)中用戶自定義層由用戶根據(jù)需求定制,包括定制層、BSP(Board Support Package)層、特性層和核心元數(shù)據(jù)(CoreRe cipe)層。上層開(kāi)源組建最常用的命令為BusyBox和Eglibc等。架構(gòu)中應(yīng)用的開(kāi)發(fā)套件,由Poky構(gòu)建系統(tǒng)生成交叉工具鏈,使用ADT installer來(lái)定制交叉開(kāi)發(fā)環(huán)境,可以支持在目標(biāo)系統(tǒng)和sysroot上的包管理架構(gòu),包括Eclipse/Anjuta集成開(kāi)發(fā)環(huán)境的插件、調(diào)用安裝好的交叉工具鏈,以及模板和調(diào)試工具。元數(shù)據(jù)準(zhǔn)備好了由元工具(bitbake)解析、執(zhí)行。元工具抽象構(gòu)建一個(gè)軟件過(guò)程中的fetch、unpack、patch、configu re、cornpile、packagc等任務(wù);同時(shí),元工具還負(fù)責(zé)按不同軟件之間的依賴關(guān)系有序地執(zhí)行編譯。編譯成功后,用戶自定義的Yocto鏡像就可以在嵌入式設(shè)備上使用。Yoto Project架構(gòu)圖如圖1所示。
2 構(gòu)建嵌入式系統(tǒng)
構(gòu)建嵌入式系統(tǒng)是一個(gè)嵌入式Linux項(xiàng)目的核心,構(gòu)建系統(tǒng)需要定義一組語(yǔ)義讓開(kāi)發(fā)者可以描述一個(gè)特定的構(gòu)建任務(wù),嵌入式系統(tǒng)負(fù)責(zé)交叉編譯一個(gè)項(xiàng)目的整個(gè)過(guò)程,包括下載源代碼、打上特定的補(bǔ)丁、配置、編譯、安裝,并將安裝結(jié)果按指定格式打包。構(gòu)建的嵌入式系統(tǒng)還要并發(fā)調(diào)度多個(gè)構(gòu)建任務(wù)。好的構(gòu)建系統(tǒng)決定了一個(gè)嵌入式Linux開(kāi)發(fā)環(huán)境的效率和友好度。Yocto內(nèi)核使用GIT進(jìn)行源代碼管理,內(nèi)核功能被組織成小的集合,方便深入定制化并支持多種內(nèi)核開(kāi)發(fā)流程和管理技術(shù)。所使用的應(yīng)用開(kāi)發(fā)套件是由Poky構(gòu)建系統(tǒng)生成的交叉工具鏈,使用ADT installer來(lái)定制交叉開(kāi)發(fā)環(huán)境,支持在目標(biāo)系統(tǒng)和sysroot上的包管理架構(gòu),包括RPM、DEB、IPK,支持Eclipse/Anjuta集成開(kāi)發(fā)環(huán)境的插件,而且還可以使用Qemu作為模擬器,模擬器支持基于OpenGL的應(yīng)用開(kāi)發(fā)(QemuGL加速)。
(1)元數(shù)據(jù)Recipe
一份Recipe包括了一組元數(shù)據(jù),而這些元數(shù)據(jù)則定義了與一個(gè)項(xiàng)目相關(guān)的構(gòu)建信息:源代碼的地址,項(xiàng)目相關(guān)的特定配置參數(shù),如何編譯、安裝和打包數(shù)據(jù)。豐富的類文件有助于最大程度地重用元數(shù)據(jù),由Profile決定選擇哪些Recipe。Yocto Project包括了一些事例Profi le,一份完整工作的Recipe可能只需要3行元數(shù)據(jù)。
(2)元數(shù)據(jù)層
元數(shù)據(jù)可以相互層疊,以很低的維護(hù)成本來(lái)進(jìn)行深層次的定制化,同時(shí)還可以增加新的項(xiàng)目,調(diào)整架構(gòu)相關(guān)的編譯標(biāo)志,覆蓋某個(gè)項(xiàng)目特定的配置選項(xiàng)。
開(kāi)發(fā)者提供元數(shù)據(jù)(食譜或菜譜),食譜是由一種標(biāo)記性的語(yǔ)言所寫(xiě),由元工具(bitbake)解析、執(zhí)行。每份食譜都是描述某個(gè)軟件的“清單”,例如:源代碼從哪里下載,需要哪些補(bǔ)丁文件,可能需要哪些特殊編譯鏈接選項(xiàng),打包時(shí)需要的特殊配置,依賴哪些其他軟件等相關(guān)信息。元工具則抽象了構(gòu)建一個(gè)軟件過(guò)程中的fetch、unpack、patch、configure、compile、package等任務(wù);同時(shí),元工具還負(fù)責(zé)按不同軟件之間的依賴關(guān)系有序地執(zhí)行編譯。
隨著汽車電子的發(fā)展,智能車載系統(tǒng)越來(lái)越受到關(guān)注,智能車載系統(tǒng)通過(guò)信息的傳遞為車輛提供出行指引、安防、救援、遠(yuǎn)程故障診斷等服務(wù)。遠(yuǎn)程信息服務(wù)(Telematics)即通信網(wǎng)絡(luò)為安裝在車上的資訊系統(tǒng)平臺(tái)提供的多樣化的信息服務(wù)。TelematicS系統(tǒng)可分為車前座系統(tǒng)、車后座系統(tǒng),以及車況診斷系統(tǒng)。
其中,車前座系統(tǒng)提供的服務(wù)包括通信、導(dǎo)航、行車安全監(jiān)視、聯(lián)網(wǎng)資訊、路況、天氣等;車后座系統(tǒng)的服務(wù)包括在線下載影音資訊、在線網(wǎng)絡(luò)游戲等;車況診斷系統(tǒng)的服務(wù)包括保養(yǎng)通知、車況預(yù)警等。目前,在車載智能系統(tǒng)中有日產(chǎn)的Carwings、通用公司的Onstar、豐田公司的G-BOOK、一汽奔騰公司的D-Partner以及榮威公司的inKanet等。其中,OnStar是以安防為主的Telematics服務(wù),G—Book是以資訊及娛樂(lè)為主的Telematics服務(wù)。
Telematics服務(wù)功能如下:
①衛(wèi)星定位:通過(guò)GPS配合路線資訊,作路況報(bào)道與路線指引;
②道路救援:行車過(guò)程中,假使發(fā)生車禍或故障意外,通過(guò)按鍵自動(dòng)聯(lián)系救援;
③汽車防竊:通過(guò)衛(wèi)星定位提供失竊車輛的搜尋與追蹤,并短信通知車主;
④自動(dòng)防撞系統(tǒng):通過(guò)傳感器或雷達(dá),感應(yīng)車與車間的安全行駛距離;
⑤車況掌握:車輛性能與車況的自動(dòng)偵測(cè)、維修診斷等;
⑥個(gè)人化資訊接收:收發(fā)電子郵件與個(gè)人化資訊等;
⑦多媒體娛樂(lè)資訊:高畫(huà)質(zhì)與高音質(zhì)的視聽(tīng)設(shè)備、游戲機(jī)、上網(wǎng)機(jī)、個(gè)人資訊中心隨選視訊等。
⑧拖車追蹤:是一種追蹤通過(guò)安裝在拖車的翼卡車聯(lián)網(wǎng)和移動(dòng)通信網(wǎng)絡(luò)或衛(wèi)星通信定位數(shù)據(jù)的技術(shù)。
⑨緊急救援:車主在行車過(guò)程中如遇到車輛缺油、缺水、故障等現(xiàn)象,可通過(guò)按下緊急按鈕向服務(wù)中心進(jìn)行求救。
根據(jù)智能車載系統(tǒng)的功能需求,把車載系統(tǒng)的硬件結(jié)構(gòu)以模塊的形式實(shí)現(xiàn),智能車載系統(tǒng)硬件結(jié)構(gòu)框圖如圖2所示。
要實(shí)現(xiàn)衛(wèi)星定位和道路緊急救援,需要通過(guò)GPS模塊作路況報(bào)導(dǎo)與路線指引,道路救援和汽車防竊需要GSM/GPRS模塊來(lái)通知車主和收發(fā)信息。多媒體娛樂(lè)資訊的用戶交互需要液晶觸摸屏和揚(yáng)聲器來(lái)實(shí)現(xiàn),數(shù)據(jù)交互功能采用SD卡/USB存儲(chǔ)。攝像頭監(jiān)控車內(nèi)外實(shí)時(shí)的情
況,智能車載系統(tǒng)還需要加速度傳感器來(lái)測(cè)量加速度。
4 智能車載系統(tǒng)軟件設(shè)計(jì)和實(shí)現(xiàn)過(guò)程
采用Yocto project來(lái)定制智能車載系統(tǒng)的軟件功能模塊,如圖3所示。智能車載系統(tǒng)的軟件主要實(shí)現(xiàn)GPS模塊、顯示模塊、控制模塊、通信模塊和娛樂(lè)模塊等的功能等。
4.1 定制智能車載系統(tǒng)平臺(tái)
在Yocto Project中,現(xiàn)有的元數(shù)據(jù)以功能集合來(lái)劃分,通過(guò)Profile來(lái)定義用戶所需要的集合,智能車載系統(tǒng)需要的功能有Wi—Fi、GPS、GPRS、USB、setial、keyboard、touchscreen等,所以只需要在Profile文件中修改目錄:DISRO_FEATURES=”alsa ext2 touchscreen wifi usb serial keyboard…”
4.2 智能車載系統(tǒng)中添加一個(gè)新的項(xiàng)目
添加一個(gè)新項(xiàng)目只需要3行元數(shù)據(jù),需要指定依賴關(guān)系、指定源代碼地址、繼承類,然后會(huì)根據(jù)繼承的Yocto Project類來(lái)自動(dòng)生成所需要的構(gòu)建任務(wù)。
首先,要將源代碼從網(wǎng)上下載。bitbake通過(guò)SRC_URI變量知道到哪里去下載源碼。把需要的源代碼地址指定:
SRC_URI=http://sourceforge.net/project/
4.3 定制實(shí)現(xiàn)過(guò)程
在Linux下安裝好需要的包之后創(chuàng)建鏡像:
$ wget http://www.yoctoprojlect.org/downloads/poky/poky-bernard-5.0.1.tar.bz2
$tar xjf poky-bernard-5.0.1.tar.bz2
$ source poky-betnard-5.0.1/poky-init-build-env poky-5.0.1build
用bitbak定制系統(tǒng):
$bitbake-k poky-image-sato
使用模擬器,模擬器中用戶可使用終端:
$pokyr-qemu qemux86
定制過(guò)程完成,用戶可以定位車載、收發(fā)信息,并實(shí)時(shí)監(jiān)控車內(nèi)外情況以及享受聽(tīng)歌、播放視頻、上網(wǎng)等智能車載系統(tǒng)功能。
結(jié)語(yǔ)
采用Yocto Project構(gòu)建的智能車載系統(tǒng),實(shí)現(xiàn)了智能車載的信息定位、信息收發(fā)、數(shù)據(jù)交互、實(shí)時(shí)監(jiān)控、用戶交互,以及多媒體娛樂(lè)功能,構(gòu)建過(guò)程靈活簡(jiǎn)單。構(gòu)建一個(gè)嵌入式Linux系統(tǒng)需要構(gòu)建引導(dǎo)模塊、內(nèi)核和文件系統(tǒng)。這是一個(gè)相當(dāng)復(fù)雜的過(guò)程,特別是文件系統(tǒng)的構(gòu)建。Yocto Project就是為了簡(jiǎn)化嵌入式系統(tǒng)的構(gòu)建過(guò)程而設(shè)計(jì)。由以上設(shè)計(jì)可以看出,Yocto Project提供足夠的靈活性,定制化非常簡(jiǎn)單,當(dāng)用戶不需要應(yīng)用程序的可移植性,并且用戶的嵌入式設(shè)備需要深度定制化時(shí),使用Yocto Prcject最為省時(shí)省力。
評(píng)論
查看更多