Yotoc Project快速指南

原文路徑:http://www.yoctoproject.org/docs/1.8/mega-manual/mega-manual.html

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
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_THREADSPARALLEL_MAKEBB_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,qemux86qemux86-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下載適用相應架構的文件系統。請確定你適用的文件系統和你想模擬的架構相匹配。
文件系統鏡像有兩種壓縮形式ext3tar。你必須使用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,armif代表嵌入式程序的二進制接口,不是所有的腳本都包含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的使用。

發佈了213 篇原創文章 · 獲贊 23 · 訪問量 76萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章