如何在Ubuntu上用Yocto創(chuàng)建你自己的嵌入式Linux發(fā)行版
本文主要聚焦在如何使用 Yocto 在 Ubuntu 上創(chuàng)建一個最小化的 Linux 發(fā)行版。Yocto 項目在嵌入式 Linux 的世界非常著名,這是因為它用起來非常靈活、方便。Yocto 的目標(biāo)是為嵌入式軟硬件開發(fā)商創(chuàng)建自己的 Linux 發(fā)行版。本文我們將會創(chuàng)建一個可以運行在 QEMU 上的最小化的 Linux,并且在 QEMU 上實際運行。
開發(fā)機(jī)的基本條件
- 最少 4-6 GB 內(nèi)存
- 最新版的 Ubuntu 系統(tǒng)(本文使用了 16.04 LTS)
- 磁盤剩余空間至少 60-80 GB
- 在創(chuàng)建 Linux 發(fā)行版之前先安裝下面的軟件包
- 下載最新的 Yocto(Poky 是其最小開發(fā)環(huán)境)穩(wěn)定分支
- apt-get update
- 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 fop
Install prerequisites for Yocto
如下所示,開發(fā)環(huán)境要安裝的軟件包將近 1GB 大小。
Install the development packages
在這個教程中,系統(tǒng)上克隆的是 poky 的 morty 穩(wěn)定分支。
- git clone -b morty git://git.yoctoproject.org/poky.git
install poky
進(jìn)入 poky 目錄,然后運行下面的命令為 Yocto 開發(fā)環(huán)境設(shè)置(設(shè)置/導(dǎo)出)一些環(huán)境變量。
- source oe-init-build-env
如下所示,在運行了 open embedded (oe) 的構(gòu)建環(huán)境腳本之后,終端里的路徑會自動切換到 build 目錄,以便進(jìn)行之后行發(fā)行版的的配置和構(gòu)建。
Prepare OE build environment
上面的截屏展示了在 conf 目錄下創(chuàng)建的文件 local.conf。這是 Yocto 用來設(shè)置目標(biāo)機(jī)器細(xì)節(jié)和 SDK 的目標(biāo)架構(gòu)的配置文件。
如下所示,這里設(shè)置的目標(biāo)機(jī)器是 qemux86-64。
Set the target machine type
如下面截圖所示,在 local.conf 中取消下面參數(shù)的注釋符號。
- DL_DIR ?= "${TOPDIR}/downloads"
Configure local.conf file
- SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
Set SSTATE_DIR
- TMPDIR ?= "${TOPDIR}/tmp"
Set TMPDIR
- PACKAGE_CLASSES ?= "package_rpm"SDKMACHINE ?= "i686"
Set PACKAGE_CLASSES and SDKMACHINE
如下所示,在 local.conf 中為基于 Yocto 的 Linux 設(shè)置空密碼和后續(xù)的一些參數(shù)。否則的話用戶就不能登錄進(jìn)新的發(fā)行版。
- EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
Set debug-tweaks option
我們并不準(zhǔn)備使用任何圖形化工具來創(chuàng)建 Linux OS,比如 toaster (hob 已經(jīng)不再支持了)。
Yocto 編譯構(gòu)建過程
現(xiàn)在運行下面的 bitbake 工具命令開始為選定的目標(biāo)機(jī)器下載和編譯軟件包。
- bitbake core-image-minimal
Start bitbake
非常重要的是要在普通 Linux 用戶下運行上面的命令,而不是使用 root 用戶。如下面截圖所示,當(dāng)你在 root 用戶下運行 bitbake 命令會產(chǎn)生下面所示的錯誤。
Do not run bitbake as root
再一次運行導(dǎo)出環(huán)境變量的腳本(oe-init-build-env),重新執(zhí)行相同的命令來啟動下載和編譯過程。
rerun commands
如下所示,構(gòu)建腳本組件的第一步工作是解析配置(recipe)。
Parse the build recipes
下面的截圖展示了構(gòu)建腳本的解析過程。同時也顯示了用來構(gòu)建你的新的基于 yocto 的發(fā)行版的構(gòu)建系統(tǒng)的細(xì)節(jié)。
Building proceeds
在下載了 SDK 和必要的庫之后,下一步工作是下載并編譯軟件包。如下截圖展示了為構(gòu)建新發(fā)行版而執(zhí)行的任務(wù)。這一步將會執(zhí)行 2-3 小時,因為首先要下載需要的軟件包,然后還要為新的 Linux 發(fā)行版編譯這些軟件包。
Compilation will take several hours
下面的截圖表明了任務(wù)列表執(zhí)行完畢。
Compilation
為目標(biāo)機(jī)器類型 qemux86-64 編譯好的新鏡像位于 build/tmp/deploy/images/qemux86-64:
Build complete
如下所示,上面的命令如果運行在 Putty 上會產(chǎn)生一個錯誤。
command error in putty
通過 rdp 在 Ubuntu 平臺上再次運行上面的命令。
Command works fine in rdp
為運行新的基于 Yocto 的 Linux 發(fā)行版的 qemu 打開一個新屏幕。
Open Quemu emulator
下面展示了新發(fā)行版的登錄界面,同時也顯示了使用的 yocto 項目的版本號。默認(rèn)的用戶名是 root ,密碼為空。
Linux distribution started
最后使用 root 用戶名和空密碼登錄新發(fā)行版。如下截圖所示,在這個最小版本的 Linux 上運行了基本的命令(data 、 ifconfig 和 uname)。
Test the Linux distribution
本文的目標(biāo)是理解使用 Yocto 創(chuàng)建新的 Linux 發(fā)行版的過程。