2020年10月15日 星期四

Yocto 初體驗 —— 構建最小化 Linux 發行版

 Yocto Project 簡介

Yocto Project 是一個針對嵌入式應用,由全球各地開發人員共同開發、維護的開源軟體合作專案。該專案提供模板、工具和方法,幫你建立定製的 Linux 系統和嵌入式產品,而無需關心硬體體系,適合嵌入式Linux開發人員使用,極大地簡化了開發過程,因為你不用從頭裁剪一個包含很多你並不需要的軟體的完整的 Linux 釋出版本。

這裡寫圖片描述

Yocto Project 起源於一群年輕人想給他們自己的 PDA 編寫一個作業系統,當時沒有一家公司給 PDA 編寫作業系統,於是這些人便想自己寫一個。他們採用了 Linux Gentoo 桌面的幾個工具,尤其是採用了編譯工具 bitbake。剛開始 bitbake 和元資料是打包在一起的,但幾年後 bitbake 從元資料中分離出來,形成了現在的 OpenEmbedded。當時有些公司採用了 OpenEmbedded 作為他們的工具,但大多數的嵌入式系統廠商依然採用自己的工具和流程來裁剪 Linux。 
到了2010年,由於看到大多數公司花費大量的人力和財力幹相同的事情,Wind River Systems 和 Intel 開源技術中心牽頭成立了一個開源專案,旨在開發一套標準的構建工具,這套工具採用了 OpenEmbedded 的幾個關鍵元件,任何人都可以使用,任何人都可以貢獻。這個專案不以盈利為目的,而是保持開放和中立,為需要他們的社群提供工具和支援,因此這個專案開始與 Linux 基金會合作,由此誕生了 Yocto Project。 
如今,Yocto Project 已經成為嵌入式 Linux 系統建立的標準方式,有18個組織和社群成員,這包括了數十家公司、數百名貢獻者,以及超過140個國家的開發人員。這是世界上最大的合作開源軟體專案之一。 
由於採用了 OpenEmbedded 的幾個關鍵元件,Yocto Project 相容 OpenEmbedded 專案,你可以簡單、可靠地進行編譯和開發,完全支援通過 QEMU 模擬器的硬體和裝置模擬。通過 Yocto 專案開發出來的 Image 可以在 QEMU模擬器中進行引導。

 

 

利用 Yocto 構建 Linux 發行版(準備工作)

通過上面的介紹,我們已經對 Yocto 有了大致的認識。下面我們就來體驗一下吧,通過在我的 Ubuntu 16.04.03 虛擬機器上使用 bitbake 構建一個最小化的 Linux 發行版,並在 QEMU 模擬器中引導起來,讓大家進一步加深對 Yocto 的瞭解。 
注意:構建過程中會下載並編譯大量檔案,建議預留足夠的資源(比如記憶體4GB以上,硬碟空間60GB以上)。 
好了,開始之前先執行一下 $ sudo apt-get update 吧。 
然後,安裝各種依賴工具:

 

$ sudo apt-get install wget git-core unzip \
make gcc g++ build-essential \
subversion sed autoconf automake \
texi2html texinfo coreutils diffstat \
python-pysqlite2 docbook-utils libsdl1.2-dev \
libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev \
xsltproc desktop-file-utils chrpath \
groff libtool xterm gawk fop12345678

接著,我們到 Yocto Project 官網看看,發現如下資訊:

這裡寫圖片描述

接下來,我們以克隆 poky 的 morty 穩定分支為例進行講解。

$ git clone -b morty git://git.yoctoproject.org/poky.git1

下載完之後進入 poky 目錄,然後執行下面的命令,為 Yocto 開發環境設定(設定/匯出)一些環境變數。

 

$ source oe-init-build-env1

在執行完 open embedded (oe) 的構建環境指令碼之後,會發現終端裡的路徑被自動切換到 build 目錄了,這樣方便進行之後行發行版的的配置和構建。

這裡寫圖片描述

從上圖中的提示資訊可以看到,第一次執行 source oe-init-build-env 的時候會在 conf 目錄下建立 local.conf 和 bblayers.conf 檔案。其中,檔案 local.conf 是 Yocto 用來設定目標機器細節和 SDK 的目標架構的配置檔案。 
下面我們對 local.conf 進行配置。 
如下所示,因為我的 Ubuntu 16.04 虛擬機器是 64 bit 的,所以這裡設定的目標機器是 qemux86-64。

這裡寫圖片描述

在 local.conf 檔案中取消下面引數的註釋符號。

 

DL_DIR ?= "${TOPDIR}/downloads"

SSTATE_DIR ?= "${TOPDIR}/sstate-cache"

TMPDIR ?= "${TOPDIR}/tmp"

PACKAGE_CLASSES ?= "package_rpm"

SDKMACHINE ?= "i686"123456789

在 local.conf 中為基於 Yocto 的 Linux 設定空密碼和後續的一些引數,否則的話使用者就不能登入進新的發行版。

 

EXTRA_IMAGE_FEATURES ?= "debug-tweaks"1

我們並不準備使用任何圖形化工具來建立 Linux OS,比如 toaster (hob 已經不再支援了)。

 

利用 Yocto 構建 Linux 發行版(構建過程)

當我們設定好 Yocto 開發環境,就可以執行下面的 bitbake 工具命令,開始為選定的目標機器下載和編譯軟體包。

 

$ bitbake core-image-minimal1

注意:該命令需要在普通 Linux 使用者下執行,如果是使用 root 使用者,則可能會產生錯誤。

這裡寫圖片描述

從上圖中的提示資訊可以看到,構建指令碼元件的第一步工作是解析配置(recipe);中間展示的是當前目標系統的配置資訊;當看到下方的“succeeded”就表示下載、編譯成功。 
我這個圖是編譯完之後重新執行 bitbake core-image-minimal 命令得到的。實際上,雖然是最小化的 Linux 系統,但因為需要下載一些 SDK 和必要的庫,並編譯相應的軟體包,所以耗時較長,大概需要 2-3 小時。 
下面是下載、編譯軟體包的過程中的一些截圖。

這裡寫圖片描述

這裡寫圖片描述

仔細觀察,可以發現整個構建指令碼的解析過程,以及構建你的新的基於 yocto 的發行版的構建系統的細節。 
因為我們這裡的目標機器型別是 qemux86-64,因此,編譯好的新映象將位於 build/tmp/deploy/images/qemux86-64 目錄下。

 

這裡寫圖片描述

利用 Yocto 構建 Linux 發行版(QEMU 引導)

編譯好映象之後,我們就可以執行 $ runqemu qemux86-64,通過 QEMU 模擬器來引導系統了。

這裡寫圖片描述

此時,執行新的基於 Yocto 的 Linux 發行版的 QEMU 會開啟一個新螢幕。

這裡寫圖片描述

輸入 root 使用者名稱即可登入進這個新的 Linux 發行版。登入系統之後,我們可以執行一些常用的命令檢視系統的狀態和資訊。

這裡寫圖片描述

可以看到 Yocto 的版本是 2.2.2,Linux 核心版本是 4.8.25,可以確定的確就是 Yocto 的 morty 分支啦。
--------------------- 
作者:阿基米東 
來源:CSDN 
原文:https://blog.csdn.net/lu_embedded/article/details/78210168 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

沒有留言: