基于Yocto Project的嵌入式應用設計
摘要:Yocto Project是一個(gè)開(kāi)源項目,可以在任意硬件上(如x86、x86-64、ARM、PPC、MIPS)為任意嵌入式設備構建自定義嵌入式Linux應用所需的模板、工具和資源,極大地簡(jiǎn)化了開(kāi)發(fā)過(guò)程。本設計主要基于Yocto Project在嵌入式設備上輕松定制嵌入式Linux應用,并實(shí)現Yocto Project的定制過(guò)程。
關(guān)鍵詞:Linux;Yocto Project;定制系統
引言
Linux作為嵌入式系統的主要工具,具有源代碼開(kāi)放、完全可定制、支持許多網(wǎng)絡(luò )協(xié)議、服務(wù)器級別高、可靠性高等很多優(yōu)點(diǎn)。但現有的嵌入式Linux市場(chǎng)開(kāi)始分化,現有的選擇包括半導體廠(chǎng)商提供的實(shí)例方案、嵌入式OSV提供商應用的嵌入式Linux產(chǎn)品、嵌入式產(chǎn)品開(kāi)發(fā)商的自有方案和開(kāi)源項目等。由于缺乏一致性,造成了嵌入式開(kāi)發(fā)高昂的維護成本,不僅嵌入式開(kāi)發(fā)缺乏足夠的專(zhuān)業(yè)人員,而且開(kāi)發(fā)過(guò)程存在安全漏洞問(wèn)題。在Yocto Project項目中,可以使用許多高效的工具,從而輕松定制嵌入式Linux產(chǎn)品。
1 YoCto Proiect的原理和架構
Yocto Project是一個(gè)開(kāi)源項目,由Linux Foundation主導并被嵌入式業(yè)界領(lǐng)導者所支持。Yocto Project與OpenEmbedded兼容,后者包括了許多開(kāi)源項目的構建方法,可以作為Yocto Project的有效補充。Yocto Project提供基于社區測試的支持多種架構的鏡像。Yocto Project的優(yōu)點(diǎn)如下:具有高質(zhì)量的構建系統,平等地支持所有主流的嵌入式架構(ARM、Power PC、MIPS、x86(32&64位)),緊密跟蹤許多上游開(kāi)源項目的最新發(fā)布版本,具有統一的Linux BSP格式和應用程序開(kāi)發(fā)套件,還可輕松地實(shí)現從原型切換到商用嵌入式Linux產(chǎn)品。
Yocto Project架構中用戶(hù)自定義層由用戶(hù)根據需求定制,包括定制層、BSP(Board Support Package)層、特性層和核心元數據(CoreRe cipe)層。上層開(kāi)源組建最常用的命令為BusyBox和Eglibc等。架構中應用的開(kāi)發(fā)套件,由Poky構建系統生成交叉工具鏈,使用ADT installer來(lái)定制交叉開(kāi)發(fā)環(huán)境,可以支持在目標系統和sysroot上的包管理架構,包括Eclipse/Anjuta集成開(kāi)發(fā)環(huán)境的插件、調用安裝好的交叉工具鏈,以及模板和調試工具。元數據準備好了由元工具(bitbake)解析、執行。元工具抽象構建一個(gè)軟件過(guò)程中的fetch、unpack、patch、configu re、cornpile、packagc等任務(wù);同時(shí),元工具還負責按不同軟件之間的依賴(lài)關(guān)系有序地執行編譯。編譯成功后,用戶(hù)自定義的Yocto鏡像就可以在嵌入式設備上使用。Yoto Project架構圖如圖1所示。
2 構建嵌入式系統
構建嵌入式系統是一個(gè)嵌入式Linux項目的核心,構建系統需要定義一組語(yǔ)義讓開(kāi)發(fā)者可以描述一個(gè)特定的構建任務(wù),嵌入式系統負責交叉編譯一個(gè)項目的整個(gè)過(guò)程,包括下載源代碼、打上特定的補丁、配置、編譯、安裝,并將安裝結果按指定格式打包。構建的嵌入式系統還要并發(fā)調度多個(gè)構建任務(wù)。好的構建系統決定了一個(gè)嵌入式Linux開(kāi)發(fā)環(huán)境的效率和友好度。Yocto內核使用GIT進(jìn)行源代碼管理,內核功能被組織成小的集合,方便深入定制化并支持多種內核開(kāi)發(fā)流程和管理技術(shù)。所使用的應用開(kāi)發(fā)套件是由Poky構建系統生成的交叉工具鏈,使用ADT installer來(lái)定制交叉開(kāi)發(fā)環(huán)境,支持在目標系統和sysroot上的包管理架構,包括RPM、DEB、IPK,支持Eclipse/Anjuta集成開(kāi)發(fā)環(huán)境的插件,而且還可以使用Qemu作為模擬器,模擬器支持基于OpenGL的應用開(kāi)發(fā)(QemuGL加速)。
(1)元數據Recipe
一份Recipe包括了一組元數據,而這些元數據則定義了與一個(gè)項目相關(guān)的構建信息:源代碼的地址,項目相關(guān)的特定配置參數,如何編譯、安裝和打包數據。豐富的類(lèi)文件有助于最大程度地重用元數據,由Profile決定選擇哪些Recipe。Yocto Project包括了一些事例Profi le,一份完整工作的Recipe可能只需要3行元數據。
(2)元數據層
元數據可以相互層疊,以很低的維護成本來(lái)進(jìn)行深層次的定制化,同時(shí)還可以增加新的項目,調整架構相關(guān)的編譯標志,覆蓋某個(gè)項目特定的配置選項。
開(kāi)發(fā)者提供元數據(食譜或菜譜),食譜是由一種標記性的語(yǔ)言所寫(xiě),由元工具(bitbake)解析、執行。每份食譜都是描述某個(gè)軟件的“清單”,例如:源代碼從哪里下載,需要哪些補丁文件,可能需要哪些特殊編譯鏈接選項,打包時(shí)需要的特殊配置,依賴(lài)哪些其他軟件等相關(guān)信息。元工具則抽象了構建一個(gè)軟件過(guò)程中的fetch、unpack、patch、configure、compile、package等任務(wù);同時(shí),元工具還負責按不同軟件之間的依賴(lài)關(guān)系有序地執行編譯。
3 智能車(chē)載系統硬件設計
隨著(zhù)汽車(chē)電子的發(fā)展,智能車(chē)載系統越來(lái)越受到關(guān)注,智能車(chē)載系統通過(guò)信息的傳遞為車(chē)輛提供出行指引、安防、救援、遠程故障診斷等服務(wù)。遠程信息服務(wù)(Telematics)即通信網(wǎng)絡(luò )為安裝在車(chē)上的資訊系統平臺提供的多樣化的信息服務(wù)。TelematicS系統可分為車(chē)前座系統、車(chē)后座系統,以及車(chē)況診斷系統。
其中,車(chē)前座系統提供的服務(wù)包括通信、導航、行車(chē)安全監視、聯(lián)網(wǎng)資訊、路況、天氣等;車(chē)后座系統的服務(wù)包括在線(xiàn)下載影音資訊、在線(xiàn)網(wǎng)絡(luò )游戲等;車(chē)況診斷系統的服務(wù)包括保養通知、車(chē)況預警等。目前,在車(chē)載智能系統中有日產(chǎn)的Carwings、通用公司的Onstar、豐田公司的G-BOOK、一汽奔騰公司的D-Partner以及榮威公司的inKanet等。其中,OnStar是以安防為主的Telematics服務(wù),G—Book是以資訊及娛樂(lè )為主的Telematics服務(wù)。
萬(wàn)能遙控器相關(guān)文章:萬(wàn)能遙控器代碼
linux相關(guān)文章:linux教程
評論