《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于Yocto訂制嵌入式Linux發(fā)行版
基于Yocto訂制嵌入式Linux發(fā)行版
2016年微型機(jī)與應(yīng)用第14期
杜登科,胡愛蘭,李林峰,張玉生
(華北計算機(jī)系統(tǒng)工程研究所,北京 100083)
摘要: 隨著工業(yè)科技的發(fā)展,嵌入式Linux展現(xiàn)了巨大的價值,廣泛應(yīng)用于消費(fèi)電子設(shè)備、網(wǎng)絡(luò)設(shè)備和工控機(jī)領(lǐng)域。廣泛的應(yīng)用帶來了各種各樣的需求,各大廠商紛紛訂制自己的嵌入式Linux產(chǎn)品,導(dǎo)致大量的重復(fù)工作,規(guī)范和標(biāo)準(zhǔn)差異化越來越大。在開放源代碼的精英發(fā)起下,Yocto橫空出世,以開源協(xié)作的方式逐步統(tǒng)一嵌入式Linux的訂制和開發(fā)標(biāo)準(zhǔn),避免許多重復(fù)工作,極大地簡化了嵌入式Linux系統(tǒng)的訂制,并且省掉大量的重復(fù)工作,使嵌入式Linux應(yīng)用開發(fā)者可以將重心放在自己的工作上。
關(guān)鍵詞: 嵌入式 Linux Yocto 開放源代碼
Abstract:
Key words :

  杜登科,胡愛蘭,李林峰,張玉生

  (華北計算機(jī)系統(tǒng)工程研究所,北京 100083)

  摘要:隨著工業(yè)科技的發(fā)展,嵌入式Linux展現(xiàn)了巨大的價值,廣泛應(yīng)用于消費(fèi)電子設(shè)備、網(wǎng)絡(luò)設(shè)備和工控機(jī)領(lǐng)域。廣泛的應(yīng)用帶來了各種各樣的需求,各大廠商紛紛訂制自己的嵌入式Linux產(chǎn)品,導(dǎo)致大量的重復(fù)工作,規(guī)范和標(biāo)準(zhǔn)差異化越來越大。在開放源代碼的精英發(fā)起下,Yocto橫空出世,以開源協(xié)作的方式逐步統(tǒng)一嵌入式Linux的訂制和開發(fā)標(biāo)準(zhǔn),避免許多重復(fù)工作,極大地簡化了嵌入式Linux系統(tǒng)的訂制,并且省掉大量的重復(fù)工作,使嵌入式Linux應(yīng)用開發(fā)者可以將重心放在自己的工作上。

  關(guān)鍵詞:嵌入式;Linux;Yocto;開放源代碼

0引言

  1991年芬蘭大學(xué)生Linus發(fā)布了0.1版本的操作系統(tǒng)Linux,到1995年,Linux發(fā)布1.2版本,該版本開始支持Alpha、i386、MIPS和SPARC等架構(gòu),同時MIPS開始在低功耗設(shè)備中越來越流行[1]。1996年第一家專注于嵌入式Linux的公司Timesys成立,隨后基于嵌入式Linux的公司和組織如雨后春筍般出現(xiàn)[2]。

  至今,基于Linux內(nèi)核的操作系統(tǒng)廣泛應(yīng)用于消費(fèi)電子、網(wǎng)絡(luò)設(shè)備、工控控制、工業(yè)自動化、導(dǎo)航設(shè)備、宇宙飛船控制領(lǐng)域和醫(yī)學(xué)設(shè)備領(lǐng)域[3]。

  由于沒有統(tǒng)一的標(biāo)準(zhǔn),嵌入式Linux開發(fā)差異越來越大,導(dǎo)致大量重復(fù)工作,給嵌入式Linux開發(fā)者帶來極大不便。在Linux基金會的有識之士的領(lǐng)導(dǎo)下成立了Yocto項(xiàng)目,Yocto提供了工具、關(guān)鍵數(shù)據(jù)和方法來快速構(gòu)建一個嵌入式Linux發(fā)行版操作系統(tǒng),避免了大量的重復(fù)工作,這樣嵌入式Linux開發(fā)者可以將更多的重心放在應(yīng)用開發(fā)上,極大地提高了效率。

1國內(nèi)外研究現(xiàn)狀

  當(dāng)前國內(nèi)外開發(fā)一個嵌入式Linux操作系統(tǒng)的通用方式分為3步[4]:制作交叉編譯工具鏈;移植uboot;配置并編譯Linux內(nèi)核[5],制作根文件系統(tǒng)。這樣的開發(fā)流程對于嵌入式Linux開發(fā)者來說非常繁瑣,會耗費(fèi)開發(fā)人員大量的精力在與應(yīng)用開發(fā)上無關(guān)的方面,而且架構(gòu)一換,交叉編譯工具鏈還得重新進(jìn)行配置和編譯。即使有的公司或者社區(qū)已經(jīng)做好了相應(yīng)的工作,也僅僅限制于他們的芯片和板子,嵌入式Linux開發(fā)者需要查閱大量的文檔才能將已有的工作移植到他們的工作中,因此對于開發(fā)者十分不利。

  Yocto項(xiàng)目正是針對這種情況而誕生的,它將構(gòu)建嵌入式Linux操作系統(tǒng)中需要用到的軟件源代碼的下載、打補(bǔ)丁、配置、編譯、打包和安裝以Python或Shell腳本的方式描述出來,保存在以后綴為.bb的文件中,然后使用一個叫bitbake的工具來解析執(zhí)行。這樣的規(guī)則可以重利用,因此極大地提高了嵌入式Linux開發(fā)者的開發(fā)效率。Yocto中提供了很多種類型的嵌入式Linux操作系統(tǒng)模版,涵蓋了常見的操作系統(tǒng)類型,比如非常小的能啟動設(shè)備的coreimageminimal,而且使用者可以很容易地對該操作系統(tǒng)進(jìn)行訂制,僅僅通過修改構(gòu)建目錄下的local.conf文件就可以輕松完成各種需求的訂制。

2Yocto項(xiàng)目介紹

  Yocto的核心是一個基于OpenEmbeddedd開放源代碼的構(gòu)建系統(tǒng),它通過提供模版、工具和方法幫助開發(fā)者快速創(chuàng)建基于Linux內(nèi)核的定制系統(tǒng),支持ARM、PPC、MIPS和x86硬件體系結(jié)構(gòu)。這個構(gòu)建系統(tǒng)可以創(chuàng)建針對用戶環(huán)境的嵌入式Linux操作系統(tǒng)發(fā)行版。Yocto項(xiàng)目可以讓用戶訂制不同大小的Linux鏡像文件,從可以僅供啟動設(shè)備的鏡像到擁有各種各樣功能的復(fù)雜的操作系統(tǒng)鏡像文件。

  除了可以訂制嵌入式Linux操作系統(tǒng)發(fā)行版,還可以很容易地產(chǎn)生針對該嵌入式Linux操作系統(tǒng)的交叉編譯工具鏈和SDK,同時還有軟件開發(fā)工具集,可以生成想要的格式,如:deb、rpm、ipk等。

001.jpg

  圖1詳細(xì)地描述了Yocto項(xiàng)目流程:從上游軟件源將代碼抓取下來,通過一個叫bitbake的構(gòu)建系統(tǒng),使用描述編譯規(guī)則的文件,來生成內(nèi)核的image、根文件系統(tǒng)和SDK。

3開發(fā)環(huán)境搭建

  3.1安裝必要的軟件包

  Ubuntu14.04下安裝如下包:

  $sudo aptget install gawk wget gitcore diffstat unzip texinfo gccmultilib buildessential chrpath socat libsdl1.2dev xterm

  3.2獲取Yocto構(gòu)建系統(tǒng)

  $git clone git://git.yoctoproject/poky

  然后切換到當(dāng)前最新的分支jethro上:

  $git checkout jethro

  這樣就得到了Yocto整個構(gòu)建系統(tǒng)的所有工具、關(guān)鍵的配置文件和核心的元數(shù)據(jù)。

4開始構(gòu)建系統(tǒng)

  接下來創(chuàng)建一個可以在arm926ejs的CPU上運(yùn)行的嵌入式Linux操作系統(tǒng)發(fā)行版,還有一整套交叉編譯工具鏈,并且讓該操作系統(tǒng)運(yùn)行在QEMU虛擬機(jī)上。

  4.1初始化構(gòu)建系統(tǒng)的環(huán)境

  poky是一個包含構(gòu)建系統(tǒng)、核心腳本文件和構(gòu)建工具的一個集合。因此進(jìn)入poky目錄并運(yùn)行如下腳本:

  $cd poky

  $source oeinitbuildenv

  該腳本會創(chuàng)建一個構(gòu)建目錄,默認(rèn)放在poky里面,也可以自己指定構(gòu)建目錄,運(yùn)行如下命令:

  $source oeinitbuildenv you_path

  構(gòu)建目錄包含構(gòu)建期間生成的所有文件。

  4.2修改本地配置文件

  在運(yùn)行oeinitbuildenv腳本后,會在構(gòu)建目錄下生成conf目錄,conf目錄就是包含本次構(gòu)建的所有重要配置文件。在conf目錄下有一個local.conf的配置文件,該文件包含了要構(gòu)建的系統(tǒng)的一些基本設(shè)置。

  如果不改變?nèi)魏闻渲梦募烷_始編譯,默認(rèn)的構(gòu)建的目標(biāo)機(jī)器是qemux86,生成的可運(yùn)行的鏡像文件是基于32位的x86架構(gòu),可以運(yùn)行在QEMU虛擬機(jī)上。對于本次編譯來說,要生成基于arm926ejs,可在QEMU虛擬機(jī)上運(yùn)行的鏡像文件,修改local.conf文件中的MACHINE變量:

  MACHINE?=qemuarm

  既然要做一個嵌入式Linux發(fā)行版,不是僅僅跑起來那么簡單,作為一個成熟的嵌入式Linux操作系統(tǒng),必須要有對應(yīng)的包管理工具,默認(rèn)使用RPM,可以通過修改變量PACKAGE_CLASSES來改變:

  PACKAGE_CLASSES=“package_deb”

  當(dāng)然還可以選擇ipk、tar等方式。

  4.3bitbake介紹

  bitbake是一個功能上與make類似的給嵌入式Linux操作系統(tǒng)生成可運(yùn)行鏡像文件和軟件包的自動化構(gòu)建工具,該工具受到了Gentoo Linux操作系統(tǒng)包管理工具Portage的啟發(fā),使用Python實(shí)現(xiàn)。

  bitbake操作的文件叫bitbake recipe,以后綴.bb結(jié)尾或者以.bbappend結(jié)尾,該文件描述了一個軟件包去哪下載、如何配置、如何編譯、軟件包的依賴、安裝到哪里、如何刪除等過程。

  bitbake的recipe文件可以解析多種軟件包來源路徑,包括:http、https、ftp、cvs、svn、git和本地文件系統(tǒng)。在構(gòu)建的過程中,recipe文件用來跟蹤軟件依賴、執(zhí)行本地和交叉編譯,并且完成后將編譯完的軟件進(jìn)行打包,可以在本地和目標(biāo)設(shè)備上安裝。

  接下來使用bitbake生成一個包含根文件系統(tǒng)的嵌入式Linux鏡像文件,bitbake框架首先生成一個針對目標(biāo)平臺的交叉變異工具鏈。

  4.4構(gòu)建嵌入式Linux操作系統(tǒng)

  在Yocto中,針對不同的設(shè)備有相應(yīng)的recipe文件,根據(jù)recipe文件的描述,可以生成大小不同的操作系統(tǒng),有可以僅僅讓設(shè)備跑起來實(shí)時響應(yīng)的操作系統(tǒng)、帶界面的操作系統(tǒng)等。接下來生成一個尺寸很小,剛好可以讓設(shè)備跑起來的操作系統(tǒng):

  coreimageminimal

  在4.1節(jié)搭建好的環(huán)境中運(yùn)行:

  $source oeinitbuildenv you_path

  會生成you_path目錄,這就是開發(fā)目錄,在該目錄下運(yùn)行如下命令:

  $bitbake coreimageminimal

  開始執(zhí)行后,bitbake會根據(jù)當(dāng)前的CPU型號生成一個交叉編譯工具鏈,也就是生成一個可以在宿主機(jī)上運(yùn)行的,能夠編譯出在目標(biāo)板子上運(yùn)行的程序的工具鏈,這樣極大地簡化了嵌入式開發(fā)者的工作,不需要自己手動修改代碼來配置交叉編譯工具鏈,僅僅通過配置就可以生成各種CPU型號的交叉編譯工具鏈。使用該工具鏈編譯各種在arm926ejs上可以運(yùn)行的程序,包括Linux內(nèi)核。

  這是一個比較漫長的過程,因?yàn)獒槍γ恳粋€軟件包都要下載、解壓、配置、編譯。通常bitbake會根據(jù)當(dāng)前主機(jī)的CPU核心數(shù)量設(shè)置相應(yīng)的線程來進(jìn)行多線程編譯。為了提高效率,同時防止在下載的過程中出現(xiàn)下載包失敗的問題,通常可以提前下載好包,放在指定的目錄下,然后在build目錄中的local.conf文件中指定變量DL_DIR為上述指定的目錄,這樣bitbake構(gòu)建系統(tǒng)就會去指定目錄讀取軟件包,極大地提高了效率。編譯操作系統(tǒng)如圖2所示。  

002.jpg

  開始編譯后,需要花費(fèi)較長時間,具體時間長短取決于當(dāng)前宿主機(jī)的CPU核的數(shù)量和當(dāng)前內(nèi)存大小。

  4.5運(yùn)行生成嵌入式Linux操作系統(tǒng)

  編譯完成后,結(jié)果如圖3所示。 

003.jpg

  編譯完成后,Linux內(nèi)核的可執(zhí)行鏡像文件和根文件系統(tǒng)位于構(gòu)建目錄中的tmp/deploy/image/ 下。運(yùn)行生成的嵌入式Linux操作系統(tǒng),使用如下命令:

  $runqemu qemuarm slirp nographic

  runqemu是一個啟動QEMU虛擬機(jī)的腳本,qemuarm是運(yùn)行的機(jī)器,slirp 是一種不需要root權(quán)限的網(wǎng)絡(luò)訪問方式。runqemu腳本自動啟動QEMU虛擬機(jī),并且加載生成的內(nèi)核和根文件系統(tǒng),終端啟動界面如圖4所示?!?/p>

004.jpg

  使用root用戶名登錄,默認(rèn)不需要用戶密碼。

5結(jié)論

  通過使用Yocto構(gòu)建系統(tǒng),僅需指定目標(biāo)板子的類型和非常簡單的設(shè)置,就可輕松地完成嵌入式Linux操作系統(tǒng)的構(gòu)建,相比于傳統(tǒng)的嵌入式Linux開發(fā)流程,極大地提高了效率,使開發(fā)人員能夠避免底層復(fù)雜的配置和移植,將重心更多地放在自己的應(yīng)用開發(fā)上。

  Yocto項(xiàng)目可以訂制操作系統(tǒng)的范圍從非常小的傳感器、智能手表到工控機(jī),甚至復(fù)雜的服務(wù)器和大型機(jī)等,應(yīng)用層面非常廣泛,操作簡單,僅使用Python和Shell腳本來描述操作系統(tǒng)的編譯規(guī)則,極大地簡化了開發(fā)工作。而且它可以訂制基于多種架構(gòu)的嵌入式Linux操作系統(tǒng),由于從源代碼到編譯規(guī)則都是開源透明的,這對安全行來說十分重要,使開發(fā)人員對自己訂制的操作系統(tǒng)百分百全面掌控。同時它減輕了嵌入式Linux開發(fā)人員的負(fù)擔(dān),使開發(fā)人員很容易地訂制自己的操作系統(tǒng),將更多的精力放在開發(fā)應(yīng)用上。

  Yocto是Linux基金會官方推薦的嵌入式Linux開發(fā)項(xiàng)目,未來,必將有更多的開發(fā)者和公司開始使用Yocto構(gòu)建系統(tǒng)。

參考文獻(xiàn)

  [1] 劉慶.嵌入式Linux技術(shù)的發(fā)展[J]. 開放系統(tǒng)世界,2003(9):9697.

 ?。?] 苑慶國.嵌入式Linux的實(shí)時風(fēng)暴[J]. 開放系統(tǒng)世界,2004(10):7980.

 ?。?] 陳閎中.Linux在嵌入式操作系統(tǒng)中的應(yīng)用[J]. 同濟(jì)大學(xué)學(xué)報(自然科學(xué)版),2001,29(5):564566.

  [4] 梁泉.嵌入式Linux系統(tǒng)移植及開發(fā)技術(shù)研究[D]. 成都:電子科技大學(xué),2003.

  [5] 錢連舉.基于ARM的嵌入式Linux系統(tǒng)移植技術(shù)研究與應(yīng)用[D]. 成都:電子科技大學(xué),2006.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美国产亚洲精品久久久8v| 国产乱理伦片在线观看夜一区 | 久久成人免费日本黄色| 一区二区欧美视频| 亚洲人成网在线播放| 亚洲国产另类久久久精品极度| 一区二区三区无毛| 在线播放豆国产99亚洲| 在线国产亚洲欧美| 在线免费一区三区| 亚洲国产日韩欧美| 亚洲欧洲在线视频| 99re6热在线精品视频播放速度| 亚洲精品一区二区三区婷婷月 | 亚洲精品之草原avav久久| 最新高清无码专区| 亚洲乱码国产乱码精品精可以看 | 亚洲九九爱视频| 亚洲美女免费视频| 日韩一区二区久久| 一区二区三区导航| 亚洲一区二区在线免费观看| 亚洲一区国产视频| 欧美一区在线看| 久久精品国产成人| 久久久久在线观看| 美女任你摸久久| 欧美激情网友自拍| 欧美日韩另类国产亚洲欧美一级| 欧美喷潮久久久xxxxx| 欧美日韩一区二区欧美激情| 欧美日韩中国免费专区在线看| 国产精品r级在线| 国产目拍亚洲精品99久久精品| 国产日产精品一区二区三区四区的观看方式| 国产日韩一区二区三区| 国语自产精品视频在线看8查询8| 亚洲夫妻自拍| 日韩视频免费观看| 亚洲综合成人婷婷小说| 欧美亚洲一级片| 亚洲人屁股眼子交8| 一区二区三区国产在线| 欧美一区二区免费| 老司机午夜精品视频| 欧美日韩亚洲天堂| 国产精品网站视频| 激情亚洲网站| 一本久久综合亚洲鲁鲁| 欧美在线黄色| 99日韩精品| 久久久久久久波多野高潮日日| 欧美大胆人体视频| 久久久亚洲高清| 中文日韩电影网站| 亚洲欧美影院| 噜噜噜躁狠狠躁狠狠精品视频 | 母乳一区在线观看| 国产精品分类| 激情综合久久| 亚洲一级一区| 亚洲精品精选| 欧美亚洲网站| 欧美激情亚洲| 国产一区二区三区无遮挡| 日韩天天综合| 久久大香伊蕉在人线观看热2| 亚洲毛片网站| 欧美在线三级| 欧美日韩亚洲天堂| 怡红院av一区二区三区| 一区二区三区久久久| 亚洲高清在线视频| 午夜免费电影一区在线观看| 欧美大学生性色视频| 国产精品一区二区三区久久久| 亚洲黄网站在线观看| 欧美伊人久久久久久午夜久久久久| 一本不卡影院| 久久综合久久综合这里只有精品| 国产精品视频精品| …久久精品99久久香蕉国产 | 久久全球大尺度高清视频| 欧美性片在线观看| 亚洲第一在线视频| 欧美一区二区三区四区视频| 亚洲午夜久久久久久尤物 | 亚洲国产美女| 久久精品国产99国产精品| 亚洲欧美精品伊人久久| 欧美精选一区| 亚洲第一福利社区| 性刺激综合网| 亚洲欧美激情一区二区| 欧美日韩精品免费观看视一区二区| 一区二区视频欧美| 午夜视频久久久| 亚洲一区二区三区在线观看视频| 欧美激情小视频| 在线免费日韩片| 亚洲国产精彩中文乱码av在线播放| 欧美一区高清| 国产精品嫩草久久久久| 在线视频精品| 一区二区三区视频观看| 欧美黑人在线播放| 亚洲第一精品久久忘忧草社区| 久久成人这里只有精品| 久久se精品一区精品二区| 国产精品手机在线| 亚洲一级特黄| 午夜精品一区二区三区电影天堂 | 国产精品欧美久久| 夜夜嗨一区二区| 一区二区欧美精品| 欧美日韩国产小视频在线观看| 亚洲激情影院| 99精品欧美一区二区三区| 欧美激情在线有限公司| 亚洲国产日韩欧美在线动漫| 最新高清无码专区| 欧美不卡一区| 亚洲第一区中文99精品| 亚洲精品国产精品国自产观看| 麻豆国产va免费精品高清在线| 狠狠干综合网| 亚洲黑丝一区二区| 欧美jizzhd精品欧美喷水| 亚洲国产精品久久久| 亚洲精品美女在线| 欧美精品一区二区三区在线看午夜 | 久久精品麻豆| 欧美成人精品h版在线观看| 亚洲国产老妈| 在线午夜精品| 欧美亚州在线观看| 亚洲先锋成人| 久久久久久久999| 亚洲国产精品激情在线观看| av成人天堂| 欧美日韩在线不卡一区| 一区二区三区日韩在线观看| 亚洲欧美视频在线| 国产一区二区三区久久 | 性欧美xxxx大乳国产app| 国产日韩一区二区三区| 亚洲二区在线视频| 欧美精品亚洲精品| 亚洲性视频h| 久久久久国内| 亚洲激情在线视频| 亚洲一区二区精品| 国产模特精品视频久久久久| 亚洲第一福利社区| 欧美精品福利视频| 亚洲婷婷在线| 久久久久国产精品厨房| 亚洲黄色高清| 性欧美超级视频| 在线视频成人| 亚洲女同在线| 永久久久久久| 亚洲欧美日韩国产成人| 一区视频在线播放| 亚洲一区在线观看免费观看电影高清| 国产欧美日韩一区二区三区在线观看| 亚洲国产精品欧美一二99| 欧美绝品在线观看成人午夜影视| 亚洲网站在线观看| 久久一区二区三区av| 99国内精品久久| 久久久97精品| 日韩视频第一页| 久久乐国产精品| 日韩一级在线观看| 久久免费视频网| 一本不卡影院| 久久一综合视频| 亚洲午夜激情在线| 欧美成人xxx| 性久久久久久久久| 欧美区一区二区三区| 欧美在线看片| 欧美亚洲不卡| 亚洲精品乱码久久久久久黑人| 国产精品你懂的| 亚洲伦理在线免费看| 国产日韩欧美一区| 夜夜精品视频| 激情欧美一区二区三区在线观看| 亚洲少妇在线| 在线日韩精品视频| 欧美在线视频在线播放完整版免费观看 | 午夜精品亚洲| 欧美日韩在线免费观看| 亚洲第一天堂无码专区| 国产精品网站视频| 中文亚洲免费| 亚洲国产成人porn| 久久久欧美精品|