作者:良知猶存
轉(zhuǎn)載授權(quán)以及圍觀:歡迎添加微信公眾號(hào):Conscience_Remains
總述
??嵌入式的朋友們,應(yīng)該知道Linux驅(qū)動(dòng)開發(fā)過程中,需要進(jìn)行搭建交叉編譯工具鏈環(huán)境、移植u-boot、kernel、根文件系統(tǒng)的幾個(gè)部分工作。最開始我們的學(xué)習(xí)是把幾個(gè)模塊分開使用學(xué)習(xí)使用,各個(gè)部分生成代碼,然后進(jìn)行燒錄,有時(shí)候我們會(huì)用腳本去把各個(gè)部分的代碼打包到一起進(jìn)行燒錄。
????后來隨著工具的發(fā),我們只需要一個(gè)SDK就可以完成所有的工作,從編譯交叉工具鏈到生成的打包文件。而這種軟件的變化最開始是為了方便根文件系統(tǒng)的編譯,最開始的busybox需要自己移植lib、還要很多第三方的軟件也要我們自行添加。到現(xiàn)在比較常見的buildroot就是一體化生成,包括今天要介紹yocto環(huán)境都是如此,雖然buildroot小巧,但是有些功能沒有辦法完全滿足開發(fā),例如ROS和QT一些的支持。
韋東山老師在最新的pdf中介紹yocto是這樣的。
Yocto 超級(jí)難用
單是下載程序容量就達(dá)到 10G,使用一般的個(gè)人電腦需要編譯 20 小時(shí)以上。以后稍微修改一下程序,
重新制作時(shí)至少需要半小時(shí)。
我們迫不得已才使用 Yocto:QT GUI 程序需要用到 GPU 的一些庫,在 Buildroot 上我們還沒搞定。
韋東山
確實(shí)yocto其他環(huán)境無法比擬的優(yōu)勢(shì),自己使用建議用buildroot,除非必要,不建議使用yocto。下面就聽我介紹我是如何搭建適配rockchip的yocto環(huán)境的。
一、基本介紹
rockchip的bsp構(gòu)建方式有三種:
1.rockchip維護(hù)的linux sdk包,涵蓋uboot、kernel、buildroot(便于構(gòu)建rootfs)、toolchain。
其中buildroot也是官方主推的bsp維護(hù)方式,采用make、pkg-config工作模式,使用簡單。
2.獨(dú)立獲取rockchip的uboot、kernel,其相對(duì)于原版擁有rockchip的patch。
3.rockchip維護(hù)的yocto,類似buildroot但比之略微復(fù)雜,使用bitbake工作模式,相對(duì)應(yīng)的,其工作方式更加靈活而強(qiáng)大。
本文就是介紹rk的yocto環(huán)境的配置:
??Yocto計(jì)劃(英語:Yocto Project?),一個(gè)自由軟件項(xiàng)目計(jì)劃,由Linux基金會(huì)于2010年宣布,這個(gè)計(jì)劃的目標(biāo)在于創(chuàng)造出可以提供嵌入式linux發(fā)行版的軟件工具,以改善軟件發(fā)展流程。2011年3月,這個(gè)計(jì)劃與OpenEmbedded計(jì)劃結(jié)合,以O(shè)penEmbedded-Core計(jì)劃作為計(jì)劃的另一個(gè)名稱。
它提供跨平臺(tái)工具、元數(shù)據(jù)以及流程以利于快速和可復(fù)制的開發(fā)Linux嵌入式系統(tǒng)。
Yocto項(xiàng)目主要由三個(gè)組件組成:
BitBake:讀取配置檔與處方檔(recipes)并運(yùn)行,配置與建置所指定的應(yīng)用程序或者系統(tǒng)文件映像檔。
OpenEmbedded-Core:由基礎(chǔ)layers所組成,并為處方檔(recipes),layers與classes的集合:這些要素都是在OpenEmbedded系統(tǒng)中共享使用的。
Poky:是一個(gè)參考系統(tǒng)。是許多案子與工具的集合,用來讓用戶延伸出新的發(fā)行版(Distribution)
from:維基百科
首先我們需要準(zhǔn)備一個(gè)足夠大的目錄放yocto,因?yàn)樵诰幾g過程中,yocto會(huì)下載很多包,至少我編譯我之后空間大小友32G。
甚至正點(diǎn)原子的imx6u的yocto制作中有這么幾句話的描述
yocto 構(gòu)建根文件系統(tǒng)需要預(yù)留足夠的硬盤空間, I.MX yocto 手冊(cè)上標(biāo)明至少要留 120G 的空間。
yocto 構(gòu)建根文件系統(tǒng)需要非常長的時(shí)間, 不建議用低配置的電腦進(jìn)行構(gòu)建。否則可能需要一兩天的構(gòu)建時(shí)間。
yocto 構(gòu)建的根文件系統(tǒng)包括了官方評(píng)估板所用的一切東西,文件系統(tǒng)十分巨大,需要讀者自行裁剪
二、準(zhǔn)備工作
1.首先我們要git?rockchip在github的yocto源碼,這個(gè)時(shí)候需要電腦端有g(shù)it環(huán)境,至于這塊的操作請(qǐng)大家閱讀我之前的文章就好了,
這里就不多做描述。
2.安裝編譯所需要的一些包
sudo apt-get install gawk wget git-core diffstat unzip texinfo \build-essential chrpath
sudo apt-get install libsdl1.2-dev xterm sudo apt-get install make xsltproc docbook-utils fop sudo apt-get install autoconf automake libtool libglib2.0-dev3.使用repo去git源碼
repo 是一個(gè)構(gòu)建在 Git 之上的工具,它可以更容易地管理包含多個(gè)存儲(chǔ)庫的項(xiàng)目,而這些存儲(chǔ)庫不需要位于同一臺(tái)服務(wù)器上。repo 很好地補(bǔ)充了 yocto 項(xiàng)目的分層特性,使用戶可以更容易地將自己的層添加到 BSP 中。簡單來說,repo 用來管理多個(gè) git 工程, git 是無法將廠商的在存儲(chǔ)庫里面的某個(gè)項(xiàng)目給 clone 下來,如果我們只需要廠商的 yocto 項(xiàng)目, (要想知道 芯片廠商可不只有 yocto 項(xiàng)目呢),使用 Git 下載卻把個(gè)存儲(chǔ)庫項(xiàng)目都下下來了。
這就是為什么要用 repo 來管理更龐大的項(xiàng)目的原因了。
下面是repo命令里面git的源碼
repo?init?--repo-url=https://github.com/rockchip-linux/repo-u?https://github.com/rockchip-linux/manifests-b?yocto?-m?rocko.xml
下載結(jié)束之后用更新一下文件
repo sync
我第一步下載比較少,第二部同步更新的時(shí)候下載了好多文件,(有梯子請(qǐng)用梯子)目錄如下
這是我編譯之后用tree?2級(jí)目錄的情況(3級(jí)以上文件顯示就太多了 )
├── build
│? ?├── bitbake-cookerdaemon.log
│? ?├── bitbake.lock
│? ?├── bitbake.sock
│? ?├── build
│? ?└── conf
├── flash_tool.sh
├── README
├── rkbin
│? ?├── bin
│? ?├── img
│? ?├── README
│? ?├── RKBOOT
│? ?├── RKBOOT.ini
│? ?├── RKTRUST
│? ?├── scripts
│? ?└── tools
├── setup-environment
└── sources
? ? ├── base
? ? ├── bitbake
? ? ├── meta-browser
? ? ├── meta-openembedded
? ? ├── meta-qt5
? ? ├── meta-rockchip
? ? ├── meta-rockchip-extra
? ? └── poky
三、選擇recipe進(jìn)行編譯
源碼下載之后,我們就要開始進(jìn)行軟件的編譯工作了,正常第一件事情,先配置環(huán)境以及編譯yocto的編譯工具。
MACHINE=firefly-rk3399?DISTRO=rk-x11?.?./setup-environment?-b?build
(注意兩個(gè)點(diǎn)之間有空格,這一步通過執(zhí)行setup-environment腳本建立yocto構(gòu)建系統(tǒng)環(huán)境變量,其中MACHINE指定機(jī)型,DISTRO指定圖形后端,rk-x11表示使用x11后端,rk-wayland使用wayland后端,rk-none使用eglfs后端,-b指定構(gòu)建目錄,命令執(zhí)行成功將直接跳進(jìn)構(gòu)建目錄)
接下來就要開始用bitbake工具進(jìn)行編譯了,注意:
這里我就遇到了一個(gè)問題,困擾了我半天,我隨便用了個(gè)編譯選項(xiàng),就是提示我
ERROR: Unable to start bitbake server
我在stackoverflow上收到相關(guān)的文章
https://stackoverflow.com/questions/48132054/unable-to-start-bitbake-server
都是提示我構(gòu)建的系統(tǒng)上缺少一些包
我思前想后我想最前面的時(shí)候都已經(jīng)安裝了包,并且我有環(huán)境可以正常使用yocto編譯了。stackoverflow也不香了,最后一點(diǎn)點(diǎn)的摸,找到了問題。
在sources/poky下面藏著一個(gè)文件?oe-init-build-env 它是專門用了使能bitbake工具的,所以我們除了要設(shè)置setup-environment還要在編譯目錄進(jìn)行
source ../sources/poky/oe-init-build-env
這樣我們就可以進(jìn)行相應(yīng)的交叉工具鏈、根文件系統(tǒng)以及內(nèi)核、u-boot的編譯了。
其實(shí)這個(gè)時(shí)候要進(jìn)行詳細(xì)設(shè)置編譯的環(huán)境,以及對(duì)應(yīng)編譯鏡像里面需要的包,但是由于我是屬于環(huán)境的初步的搭建,我就直接選擇默認(rèn)配置,然后進(jìn)行了一些簡單的編譯了。
bitbake core-image-minimal
從上面圖片可以看到,當(dāng)我把bitbake配置好后,下面就有了一些編譯的參考選項(xiàng),有根文件系統(tǒng),有toolchain(編譯工具鏈)等,
bitbake core-image-minimal
因?yàn)榈谝淮尉幾g的原因,bitbake邊編譯邊下載的機(jī)制,我這次編譯花費(fèi)了十幾個(gè)小時(shí),而且還是全程梯子。
查看編譯好的文件
ls tmp/deploy/images/qemux86/
同樣的操作繼續(xù)編譯u-boot
bitbake u-boot-mkimage
搭建yocto環(huán)境過程中,也是收集了一些官方和文章,大家如果想要的話,關(guān)注我公眾號(hào),回復(fù)yocto環(huán)境搭建,就可以收到資料了。
?這就是我分享的rockchip的yocto環(huán)境搭建,篇幅的問題也不能繼續(xù)展開介紹了,后續(xù)有時(shí)間再把yocto怎么增、改、刪相應(yīng)的源碼包、yocto交叉工具鏈的編譯設(shè)置等的操作介紹給大家,如果大家有什么更好的思路,歡迎分享交流哈。