rockchip的yocto編譯環(huán)境搭建

作者:良知猶存

轉(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)大家閱讀我之前的文章就好了,

git從安裝到多賬戶操作一套搞定(一)入門使用

git從安裝到多賬戶操作一套搞定(二)多賬戶使用

這里就不多做描述。

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-dev

3.使用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è)置等的操作介紹給大家,如果大家有什么更好的思路,歡迎分享交流哈。

  • ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
    平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

    友情鏈接更多精彩內(nèi)容