1. 程式人生 > 實用技巧 >rockchip的yocto編譯環境搭建

rockchip的yocto編譯環境搭建

作者:良知猶存

轉載授權以及圍觀:歡迎新增微信公眾號:Conscience_Remains

總述

嵌入式的朋友們,應該知道Linux驅動開發過程中,需要進行搭建交叉編譯工具鏈環境、移植u-boot、kernel、根檔案系統的幾個部分工作。最開始我們的學習是把幾個模組分開使用學習使用,各個部分生成程式碼,然後進行燒錄,有時候我們會用指令碼去把各個部分的程式碼打包到一起進行燒錄。

後來隨著工具的發,我們只需要一個SDK就可以完成所有的工作,從編譯交叉工具鏈到生成的打包檔案。而這種軟體的變化最開始是為了方便根檔案系統的編譯,最開始的busybox需要自己移植lib、還要很多第三方的軟體也要我們自行新增。到現在比較常見的buildroot就是一體化生成,包括今天要介紹yocto環境都是如此,雖然buildroot小巧,但是有些功能沒有辦法完全滿足開發,例如ROS和QT一些的支援。

韋東山老師在最新的pdf中介紹yocto是這樣的。

Yocto 超級難用

單是下載程式容量就達到 10G,使用一般的個人電腦需要編譯 20 小時以上。以後稍微修改一下程式,

重新制作時至少需要半小時。

我們迫不得已才使用 Yocto:QT GUI 程式需要用到 GPU 的一些庫,在 Buildroot 上我們還沒搞定。

韋東山

確實yocto其他環境無法比擬的優勢,自己使用建議用buildroot,除非必要,不建議使用yocto。下面就聽我介紹我是如何搭建適配rockchip的yocto環境的。

一、基本介紹

rockchip的bsp構建方式有三種:

1.rockchip維護的linux sdk包,涵蓋uboot、kernel、buildroot(便於構建rootfs)、toolchain。

其中buildroot也是官方主推的bsp維護方式,採用make、pkg-config工作模式,使用簡單。

2.獨立獲取rockchip的uboot、kernel,其相對於原版擁有rockchip的patch。

3.rockchip維護的yocto,類似buildroot但比之略微複雜,使用bitbake工作模式,相對應的,其工作方式更加靈活而強大。

本文就是介紹rk的yocto環境的配置:

Yocto計劃(英語:Yocto Project™),一個自由軟體專案計劃,由Linux基金會於2010年宣佈,這個計劃的目標在於創造出可以提供嵌入式linux發行版的軟體工具,以改善軟體發展流程。2011年3月,這個計劃與OpenEmbedded計劃結合,以OpenEmbedded-Core計劃作為計劃的另一個名稱。

它提供跨平臺工具、元資料以及流程以利於快速和可複製的開發Linux嵌入式系統。

Yocto專案主要由三個元件組成:

BitBake:讀取配置檔與處方檔(recipes)並執行,配置與建置所指定的應用程式或者系統檔案映像檔。

OpenEmbedded-Core:由基礎layers所組成,併為處方檔(recipes),layers與classes的集合:這些要素都是在OpenEmbedded系統中共享使用的。

Poky:是一個參考系統。是許多案子與工具的集合,用來讓使用者延伸出新的發行版(Distribution)

from:維基百科

首先我們需要準備一個足夠大的目錄放yocto,因為在編譯過程中,yocto會下載很多包,至少我編譯我之後空間大小友32G。

甚至正點原子的imx6u的yocto製作中有這麼幾句話的描述

yocto 構建根檔案系統需要預留足夠的硬碟空間, I.MX yocto 手冊上標明至少要留120G的空間。
yocto 構建根檔案系統需要非常長的時間,不建議用低配置的電腦進行構建。否則可能需要一兩天的構建時間。
yocto 構建的根檔案系統包括了官方評估板所用的一切東西,檔案系統十分巨大,需要讀者自行裁剪

二、準備工作

1.首先我們要gitrockchip在github的yocto原始碼,這個時候需要電腦端有git環境,至於這塊的操作請大家閱讀我之前的文章就好了,

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 是一個構建在 Git 之上的工具,它可以更容易地管理包含多個儲存庫的專案,而這些儲存庫不需要位於同一臺伺服器上。repo 很好地補充了 yocto 專案的分層特性,使使用者可以更容易地將自己的層新增到 BSP 中。簡單來說,repo 用來管理多個 git 工程, git 是無法將廠商的在儲存庫裡面的某個專案給 clone 下來,如果我們只需要廠商的 yocto 專案, (要想知道 晶片廠商可不只有 yocto 專案呢),使用 Git 下載卻把個儲存庫專案都下下來了。

這就是為什麼要用 repo 來管理更龐大的專案的原因了。

下面是repo命令裡面git的原始碼

repoinit--repo-url=https://github.com/rockchip-linux/repo-uhttps://github.com/rockchip-linux/manifests-byocto-mrocko.xml

下載結束之後用更新一下檔案

repo sync

我第一步下載比較少,第二部同步更新的時候下載了好多檔案,(有梯子請用梯子)目錄如下

這是我編譯之後用tree2級目錄的情況(3級以上檔案顯示就太多了 )

├── 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進行編譯

原始碼下載之後,我們就要開始進行軟體的編譯工作了,正常第一件事情,先配置環境以及編譯yocto的編譯工具。

MACHINE=firefly-rk3399DISTRO=rk-x11../setup-environment-bbuild

(注意兩個點之間有空格,這一步通過執行setup-environment指令碼建立yocto構建系統環境變數,其中MACHINE指定機型,DISTRO指定圖形後端,rk-x11表示使用x11後端,rk-wayland使用wayland後端,rk-none使用eglfs後端,-b指定構建目錄,命令執行成功將直接跳進構建目錄)

接下來就要開始用bitbake工具進行編譯了,注意:

這裡我就遇到了一個問題,困擾了我半天,我隨便用了個編譯選項,就是提示我

ERROR: Unable to start bitbake server

我在stackoverflow上收到相關的文章

https://stackoverflow.com/questions/48132054/unable-to-start-bitbake-server

都是提示我構建的系統上缺少一些包

我思前想後我想最前面的時候都已經安裝了包,並且我有環境可以正常使用yocto編譯了。stackoverflow也不香了,最後一點點的摸,找到了問題。

在sources/poky下面藏著一個檔案oe-init-build-env 它是專門用了使能bitbake工具的,所以我們除了要設定setup-environment還要在編譯目錄進行

source ../sources/poky/oe-init-build-env

這樣我們就可以進行相應的交叉工具鏈、根檔案系統以及核心、u-boot的編譯了。

其實這個時候要進行詳細設定編譯的環境,以及對應編譯映象裡面需要的包,但是由於我是屬於環境的初步的搭建,我就直接選擇預設配置,然後進行了一些簡單的編譯了。

bitbake core-image-minimal

從上面圖片可以看到,當我把bitbake配置好後,下面就有了一些編譯的參考選項,有根檔案系統,有toolchain(編譯工具鏈)等,

bitbake core-image-minimal

因為第一次編譯的原因,bitbake邊編譯邊下載的機制,我這次編譯花費了十幾個小時,而且還是全程梯子。

檢視編譯好的檔案

ls tmp/deploy/images/qemux86/

同樣的操作繼續編譯u-boot

bitbake u-boot-mkimage

繼續編譯 編譯工具鏈

bitbake meta-toolchain

繼續編譯 核心

bitbake linux-yocto

搭建yocto環境過程中,也是收集了一些官方和文章,大家如果想要的話,關注我公眾號,回覆yocto環境搭建,就可以收到資料了。

這就是我分享的rockchip的yocto環境搭建,篇幅的問題也不能繼續展開介紹了,後續有時間再把yocto怎麼增、改、刪相應的原始碼包、yocto交叉工具鏈的編譯設定等的操作介紹給大家,如果大家有什麼更好的思路,歡迎分享交流哈

更多分享,掃碼關注我