Yotoc Project快速指南
原文路徑:http://www.yoctoproject.org/docs/1.8/mega-manual/mega-manual.html
超詳細版本
https://www.yoctoproject.org/docs/2.1/mega-manual/mega-manual.html#creating-a-general-layer-using-the-yocto-layer-script
1.歡迎
歡迎來到Yocto項目!Yocto項目是一個專注於內嵌式Linux開發者的開源協作項目。在其他方面,Yocto項目使用一個基於OpenEmbedded項目的編譯系統,這個編譯系統使用BitBake工具來搆造完整的linux系統鏡像。BitBake和OE的套件被組合形成了Poky,一個參照的編譯系統。
如果你沒有一個執行linux的系統,但是你執行Yocto項目的測試例子,你可以考慮使用Yocto項目的Build Appliance。Build Appliance可以讓你借助Yocto項目搆建啟動一個自訂的嵌入式linux系統,但是你可以使用一個不是linux的系統環境。您可以通過Yocto Project Build Appliance獲得更多的資訊。
另一方面,如果你了解所有關於開源開發,linux設計環境,git源碼管理或者你僅僅想獲得一個有用的資訊在你的linux系統上試試Yocto項目,直接跳轉到本指南的"Super User"章節。
在下面的時間中,這篇短短的檔案將帶給你一些關於環境的基礎資訊和讓你通過一種最簡單的形式來體驗它。在讀了這篇文章之后,你將對Yocto項目內容有個基本的了解和怎么使用它的核心套件。這篇檔案通過一個怎么編譯一個小型的系統和在QEMU上執行來的例子來一步步指導你。
為了獲得更多關於Yocto的細節資訊,你可以看看下面的資源:
* 網站:Yocto Project Website 提供了最新的搆建,突發新聞,完善的開發檔案和一個富有活力的社區。
* FAQs:列出了關於Yocto項目的問題和答案。你可以找到兩個FAQs:Yocto Priject FAQ,其在wiki上,和"FAQ"章在Yocto Project的參照手冊中。
* 開發者截屏視訊:The Getting Started with the Yocto Project - New Developer Screencast Tutorial 提供了一個時長30分鐘的視訊,這個視訊適用於不熟悉Yocto Project 但熟悉linux編譯系統的用戶。雖然這個視訊有點過時,介紹和基本概念對於初學者還是很有用。
2.Yocto項目設計環境介紹
Yocto項目通過OpenEmbedded的編譯系統提供了一個開源的設計環境針對ARM,MIPS,PowerPC和x86多種架搆提供了多種平台包括x86-64,和能夠模擬它們。你能夠使用Yocto項目的套件來設計,開發,搆建,除錯,模擬和測試完整的軟體堆疊通過使用linux,X Window系統,GTK+框架和Qt框架。
The Yocto Project Development Environment
下面是關於Yocto項目的一些集錦:
* 提供了適合於嵌入式環境的包含一家族指令集和程式庫的較新的linux核心
* 可以編譯一些系統套件比如X11,GTK+,Qt,Clutter和SDL等,你可以獲得好的用戶體驗在有察看器件的裝置上。對於沒有察看器件的裝置上或者你希望使用其他的UI框架,這些套件就不需要包含。
* 搆建一個專注和穩定的相容OpenEmbedded項目的核心,通過它你可以容易和可靠的搆建和開發。
* 通過QEMU模擬來可以充分的支援大範圍的硬體和裝置。
Yocto項目能夠生成多種不衕裝置的鏡像。然而,基於QEMU的全系統模擬器適用於x86,x86-64,ARM,MIPS和PPC-base架搆,以及一些特殊的硬體,比如因特爾的上管理系統板--DH55TC。因為一個用Yocto項目開發的鏡像能夠用一個QEMU模擬器啟動,設計環境能夠像在一個測試的開發嵌入式軟體平台一樣工作良好。
一個重要的Yocto項目的重要特徴是Sato用戶介面。這個基於GTK+的可選的UI主要面向有螢幕限制的裝置。這個UI整齊的排布在裝置察看的頂部通過使用GTK+的堆疊,提供了良好的用戶體驗。其實現在自己的層,它明確開發者怎么能夠實現他們自己的用戶借口在由Yocto生成的鏡像頂部。
3.你需要的和你怎么得到它們
你需要以下這些東西在Yocto環境下開發項目:
* 一個主機,至少有50G空間,執行一個支援Yocto的linux發行版(Fedora, openSUSE, CentOS, Debian或者Ubuntu)。如果你的主機支援多核重執行緒,那么你可以修改Yocot的配置來加快編譯速度。
* 需要在你的系統上裝載一些套裝軟體。
* Yocto項目的一個發行版
3.1linux發行版
Yocto項目組正在持續確認越來越多的linux發行版可以使用。一般的,如果你使用下述的系統,你應該不會遇到問題:
* Ubuntu
* Fedora
* openSUSE
* CentOS
* Debian
一份更詳細的清單關於支援Yocto項目,你可以察看Yocto手冊的"Support Linux Distributions"章節。
OpenEmbedded編譯系統能夠執行在任何版本,它們必須如下版本的git,tar和python程式。
* Git 1.7.8或者更高版本
* tar 1.24或者更高版本
* Python 2.7.3或者更高版本,但是不包括Python3,它是不受支援的。
更早版本的Python是無法工作的,并且系統目前不支援python3。如果你的系統目前的環境無法滿足上述的三個條件,那么你必須按步准備好你的系統,以便你能夠使用編譯系統。在手冊中檢視"Required Git, tar, and Python Version"章節。
3.2套裝軟體
套裝軟體和包的裝載不衕依賴於你的開發系統和你的意圖。比如,如果你想搆建一個能夠在QEMU上以圖形化執行的系統鏡像(最小,基礎編譯要求),套裝軟體的數量是和如果你想搆建一個無圖形的系統或者包含Yocto檔案是不衕的。總之,如果你想包含所有的方面,需要裝載數量巨大的套裝軟體。記得在裝載的時候使用sudo指令。
下面的几小節的內容將告訴你,在支援的linux中,那些套裝軟體需要被裝載,如果你想編譯一個能在QEMU上以圖形化執行的系統鏡像。
對於在其他情況下,需要的套裝軟體清單,可以在Yocto手冊的"Required Packages for the Host Development System"章節看到。
3.2.1 Ubuntu和Debian
在Ubuntu和Debian發行版中,你需要的必要和圖形化的支援套裝軟體包含在下面的指令中:
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm
Note
如果你的環境裝載了oss4-dev
套裝軟體,你可能因為其裝載在它的自訂目錄/
usr/include/linux/soundcard.h在Debian系統上,QEMU執行失敗。如果你遇
到了上述的問題,下面兩個的任何一個可以幫你解決:
$ sudo apt-get build-dep qemu> $ sudo apt-get remove oss4-dev
3.2.2 Fedora
在Fedora發行版中,你需要的必要和圖形化的支援套裝軟體包含在下面的指令中:
$ sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue socat findutils which SDL-devel xterm
3.2.3 OpenSUSE
在OpenSUSE發行版中,你需要的必要和圖形化的支援套裝軟體包含在下面的指令中:
$ sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml diffstat makeinfo python-curses patch socat libSDL-devel xterm
3.2.4 CentOS
在CentOS發行版中,你需要的必要和圖形化的支援套裝軟體包含在下面的指令中:
$ sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath socat SDL-devel xterm
Note
根據你使用的CentOS版本不衕,可能還有其他的要求和依賴u。想要知道更多的細
節,你可以檢視Poky/GettingStarted/Dependencies維基的CentOS章節。
3.3 Yocto項目發行版
我們建議你使用git clone作業來從poky**git倉儲複製拷貝到區域系統。這樣你可以為Yocto項目做出自己的貢獻。
你也可以從Yocto項目的網站下載Yocto項目的發行版檔案。在那個網站,你只需要點擊位於導航欄的***Downloads*,就會帶你到一個列出了所有下載項的頁面,目前的和以前的都可以下載。每日和開發搆建版本被維護在http://autobuilder.yoctoproject.org/pub/nightly/
。
4 執行一個測試的例子
現在你已經有了一個滿足要求的系統,你可以試一試Yocto項目了。這一節提供了一些你需要做的步驟:
* 搆建一個系統鏡像,和在QEMU模擬器中執行。
* 使用一個預先編譯的鏡像,和在QEMU模擬器中執行。
Note
這一節沒有提供細節,而是最少提供,讓你從指令和設計例子開始。知道更多細
節,可以檢視適當的手冊在Yocto Project manual set中。
4.1 搆建一個鏡像
在設計環境中,你將必須編譯鏡像,一旦你改變了硬體支援,修改了系統程式庫,或者增加改變了依賴的服務。
Building an Image
使用下列的指令來搆建你的鏡像。OpenEmbedded的搆建過程會生成一個完整的linux系統,包括工具鏈,從源碼。
Note about Network Proxies
預設情況下,編譯過程使用一個預先定義好的順序來搜索來源碼。如果你工作在防火牆
內而且沒有設定網路代理,你可能在編譯時抓取程式碼時遇到問題。
如果你不知掉區域的代理設定,你咨詢當地的網路設施提供商來獲得他們。一個好的出
發點也可以檢查您的瀏覽器設定。最后,你可以找到更多關於在防火牆下使用Yocto資訊在Yocto項目的手冊FAQ上或者"Working Behind a Network Proxy"wiki頁面。
$ git clone http://git.yoctoproject.org/git/poky $ cd poky $ git checkout -b fido origin/fido $ source oe-init-build-env
Tip
為了在編譯過程節約磁碟空間,你可以在你項目的配置檔案追加一句,配置檔案位於
poky/build/conf/local.conf
。加上這句后,一旦莫個包編譯完成后,將移除編譯
這個包的工作目錄。
INHERIT += "rm_work"
-
在前面的例子中,第一條指令使用Git來生成一個叫做poky的區域倉儲,其是上游項目Yocto的poky倉儲的一個複製。
-
第三條指令將目前區域分支切換到Yocto發行的分支,使區域分支追蹤上游分支。以發行的分支建立你自己的分支可以確保你使用最新的程式碼。
-
最后一條指令執行Yocto項目的環境裝載程式檔--"oe-init-build-env"。執行這個程式檔來設定OpenEmbedded編譯需要的編譯參數。執行了程式檔之后,你目前的工作目錄被設定成編譯目錄。之后,當編譯套件的時候,
Build
目錄將包含在編譯過程中產生的檔案。
Note
想要獲得一個常駐記憶體BitBake更多的資訊,可以檢視oe-init-build-env-memres
裝載程式檔。
花費一些時間來檢查你項目配置目錄下的local.conf
檔案,它位於Build
目錄。檔案的預設內容可以保證項目的正常工作。然后,你可能對一些變數感興趣。
預設情況下,編譯的目標架搆是qemux86,產生的鏡像可以在QEMU模擬器上執行,它是Intel 32-bit架搆。為了改變預設值,你可以修改配置檔案中參數MACHINE
的值,在你加載編譯參數之前。
另外三個你可能感興趣的參數是BB_NUMBER_THREADS
,PARALLEL_MAKE
和BB_NUMBER_PARSE_THREADS
。 預設情況下,OpenEmbedded編譯系統設定這三個參數的值是基於你主機的cpu的核心數。所以通常你不需要修改你local.conf
中的參數來加快你的編譯。
另一個在你編譯之前需要考慮的是在你生成鏡像時包管理。預設情況下,OpenEmbedded編譯系統使用RPM包管理。你可以控制它通過PACKAGE_CLASSES
參數。對於其餘的包管理章節的資訊,你可以在Yocto項目手冊的package*.bbclass
章節看到。
繼續我們的指令來編譯一個系統鏡像,這個指令就是core-image-sato
在例子中。對於參數-k,你可以使用bitbake --help
指令來檢視,也可以看Yocto項目手冊的BitBake
章節,或者BitBake手冊的BitBake Command
章節。想獲得更多的關於目標架搆的資訊,可以看Yocto項目手冊的images
章節。
$ bitbake -k core-image-sato
Note
BitBake需要python2.7.3環境。更多資訊請檢視Required Git,tar,and Python
章節。
使用QEMU模擬器執行這個鏡像的最后一個指令:
$ runqemu qemux86
Note
依賴於cpu核心數,記憶體容量,網路連線速度和其他的原因,編譯過程可能花費几個小
時。在第一次編譯之后,其后的編譯就會快很多。
如果你想學習更多關於執行QEMU,可以檢視Yocto項目開發手冊的Using the Quick EMUlator(QEMU)
章節。
希望獲得更多的關於使用預先編譯二進位檔案,繼續閱讀下面的內容。
4.2 使用預搆建的二進位檔案和QEMU
如果硬體,程式庫和服務都是穩定的,你可以使用預搆建的檔案系統,核心和工具鏈在QEMU模擬器上來時使用它。這個對開發應用軟體很有作用。
Using a Pre-Built Image
為了使用它,你需要做以下几件事:
* 裝載適當的獨立工具壓縮包。
* 下載QEMU能夠啟動的預編譯的鏡像。你需要確保能夠得到適合你系統架搆的QEMU鏡像(比如arm, x86等等)。
* 下載適合架搆的檔案系統鏡像。
* 設定硬體的模擬環境,然后啟動QEMU模擬器。
4.2.1裝載工具鏈
你能夠從"http://downloads.yoctoproject.org/releases/yocto/yocto-1.8/toolchain/"下載一個壓縮的裝載包,其中包含了預編譯的工具鏈,執行QEMU模擬器的程式檔,輔助說明檔案。適用於32位和64位開發系統的工具鏈在i686和x86_64檔案目錄下。Yocto提供的工具鏈基於core-image-sato
鏡像和包含了開發對應鏡像的所需要的程式庫。每一個開發的系統支援至少五種目標架搆。
該檔案裝載程式程式檔的名字的搆成有如下的規則,主機系統開始,后緊跟一個代表著目標體系的字串。
poky-glibc-host_system-image_type-arch-toolchain-release_version.sh
host_system
是開發系統的,比如i686
或者x86_64
。
image_type
是你的鏡像,你希望開發一個SDK給用戶。Yocto搆建工具鏈裝載包程式使用BitBake指令:
bitbake core-image-sato -c populate_sdk
arch
是目標體系架搆,比如:i586,x86_64,powerpc,mips,armv7a
。
release_version
是發行號,比如1.8 1.8+snapshot
。
例如,下面的裝載包是一個64位主機系統,為i586目標架搆搆建的基於core-image-sato
的sdk。
poky-glibc-x86_64-core-image-sato-i586-toolchain-1.8.sh
工具鏈是獨立的,預設裝載在/opt/poky
目錄。或者,在裝載的時候,你可以指定一個裝載目錄。
下面的指令展示了如何執行一個x86架搆的64位主機系統用於32位x86架搆的目標機的工具鏈壓縮裝載包。你必須賦予它可執行許可權。
在例子中,我們假設裝載包位於~/Downloads
目錄下。
Note
如果你對裝載包所在目錄沒有寫許可權,裝載包輔助說明你這個問
題和結束。請確保你此目錄下具有寫許可權,然后才能執行它
。
$ ~/Downloads/poky-glibc-x86_64-core-image-sato-i586-toolchain-1.8.sh
4.2.2下載預編譯linux核心
你可以從http://downloads.yoctoproject.org/releases/yocto/yocto-1.8/machines/qemu
下載適用於QEMU模擬器執行的預編譯核心。請確定你下載的核心和你想模擬的架搆相符合。一共有如下几種支援的機器架搆:qemuarm
,qemumips
,qemuppc
,qemux86
和qemux86-64
。
大多數核心檔案有以下几種形式:
*zImage-qemuarch.bin
vmlinux-qemuarch.bin
這裡,arch
是目標架搆,比如x86
,x86-64
,ppc
,mips
,arm
。
你可以從"Yocto Project Kernel"了解更多關於下載Yocto核心。
4.2.3下載檔案系統
你可以從http://downloads.yoctoproject.org/releases/yocto/yocto-1.8/machines/qemu
下載適用相應架搆的檔案系統。請確定你適用的檔案系統和你想模擬的架搆相符合。
檔案系統鏡像有兩種壓縮形式ext3
和tar
。你必須使用ext3
當你使用QEMU模擬器來啟動一個鏡像時。tar
形式的在主機開發系統中會被解壓,在Yocto搆建過程中使用。
core-image-profile-qemuarch.ext3
core-image-profile-qemuarch.tar.bz2
其中profile
是對檔案鏡像的簡介,比如lsb, lsb-dev, lsb-sdk, lsb-qt3, minimal, minimal-dev, sato, sato-dev,sato-sdk
。更多的資訊可以在"Images"章節找到。
arch
是目標架搆,比如x86
,x86-64
,ppc
,mips
,arm
。
4.2.4 設定環境和啟動QEMU模擬器
在你啟動QEMU模擬器之前,你需要設定模擬環境。執行如下的指令即可。
source /opt/poky/1.8/environment-setup-arch-poky-linux-if
其中,arch
是目標架搆,比如x86
,x86-64
,ppc
,mips
,arm
。if
代表嵌入式程式的二進位介面,不是所有的程式檔都包含if
字串。
下面的指令呼叫QEMU模擬器:
‵ $ runqemu qemuarch kernel-image filesystem-image‵
qemuarch
是模擬目標的架構。
kernel-image
是核心鏡像。
filesystem-image
是.ext3的檔案系統鏡像。
繼續我們的例子,下面的兩天指令用來設定模擬器環境和加載QEMU。這個例子假設你的根檔案系統和預編譯好的核心鏡像都在你的home目錄下面。核心和檔案系統都面向32位目標架搆。
$ cd $HOME $ source /opt/poky/1.8/environment-setup-i586-poky-linux $ runqemu qemux86 bzImage-qemux86.bin \ core-image-sato-qemux86.ext3
QEMU加載的環境變化依賴於檔案系統鏡像和目標架搆。例如,如果你加載了ARM目標架搆的環境,然后啟動最小的QEMU鏡像,模擬器重新啟動一個指令行型態的shell終端機。然而,如果你啟動一個SDK鏡像,那么QEMU啟動一個GUI。
Note
啟動PPC鏡像導致QENU加載指令行型態的Shell終端機。
如果想得到更多的關於使用Yocto進行鏡像和應用開發,最好的方式是繼續查閱Yocto的開發手冊。
5.高階使用者
本節將重頭開始給你講訴一個最精簡的說明對於Beaglebone硬體使用Yocto搆建鏡像。在64位的ubuntu12.04上,只需要4個核心步驟。
5.1獲得Yocto項目
設定你的源碼目錄使用git clone作業在poky倉儲,然后切換到目前的發布分支。
$ cd ~ $ git clone git://git.yoctoproject.org/poky $ cd poky $ git checkout -b fido origin/fido
5.2設定你區域環境
在開發過程中,你的工作依賴於其他一些套裝軟體,去"The Packages"章節查閱相關內容。
5.3起始化搆建環境
來到你的Yocto源碼目錄的根目錄,起始化你的環境并制定一個存放搆建內容的目錄。
$ source oe-init-build-env mybuilds
此處,mybuilds
目錄已經被生成,現在其在你目前的工作目錄下。如果你沒有提供,那么其預設為build
,位於你的源碼目錄。
5.4配置local.conf
起始化搆建環境,過程中會生成conf/local.conf
檔案,其位於你的搆建目錄。你需要手動修改這個檔案來適應特殊的機器。
MACHINE ?= "beaglebone"
怎么來進行Yocto項目的搆建,一個最好的處理方法就是下載所有的源碼壓縮包。下面的一些步驟可以輔助說明你更好的收集源碼檔案。比如,你可以建立持有你源碼壓縮包的區域源,或者你可以提前取程式碼直到開始你的搆建。如果你想獲得更多的資訊,你可以查閱Yocto開發手冊的Working with Source Files
章節。
5.5搆建鏡像
在這裡,你需要為你的Beaglebone
硬體選取一個需要編譯的鏡像。如果這是你使用Yocto第一次搆建,你應該嘗試最小最簡單的鏡像:
$ bitbake core-image-minimal
現在,你可以看看書,喝喝咖啡,等搆建完成。
預設情況下,BitBake中斷如果在搆建過程中遇到一個錯誤。如果你想即使遇到了錯誤,你還是想搆建繼續,可以使用:
$ bitbake -k core-image-minimal
一旦你搆建出了你的鏡像,你可以按部就班的加載啟動它在你的硬體上。一般情況下,你可以通過查閱BitBake User Manual
來更多的了解BitBake的使用。