RK3568開發(fā)筆記(四):在虛擬機(jī)上使用SDK編譯制作uboot、kernel和buildroot鏡像
前言
??上一篇搭建好了ubuntu宿主機(jī)開發(fā)環(huán)境,本篇的目標(biāo)系統(tǒng)主要是開發(fā)linux+qt,所以需要刷上billdroot+Qt創(chuàng)建的系統(tǒng),為了更好的熟悉原理和整個(gè)開發(fā)過程,選擇從零開始搭建rk3568的sdk開發(fā)環(huán)境。
RK系列SDK簡(jiǎn)要介紹
目錄結(jié)構(gòu)
??一個(gè)通用 Linux SDK (RV系類的sdk沒有對(duì)工程目錄包含有 buildroot、 debian、 app、 kernel、 u-boot、 device、 docs、 external等目錄。
??以下是RK系類的目錄分類:
app:存放上層應(yīng)用 app,主要是 qcamera/qfm/qplayer/settings 等一些應(yīng)用程序。
buildroot:基于 buildroot (2018.02-rc3) 開發(fā)的根文件系統(tǒng)。
debian:基于 debian 10 開發(fā)的根文件系統(tǒng),支持部分芯片。
device/rockchip:存放各芯片板級(jí)配置和 Parameter 文件,以及一些編譯與打包固件的腳本和預(yù)備文件。
docs:存放芯片模塊開發(fā)指導(dǎo)文檔、 平臺(tái)支持列表、 芯片平臺(tái)相關(guān)文檔、 Linux 開發(fā)指南等。
IMAGE:存放每次生成編譯時(shí)間、 XML、 補(bǔ)丁和固件目錄。
external:存放第三方相關(guān)倉(cāng)庫,包括音頻、 視頻、 網(wǎng)絡(luò)、 recovery 等。
kernel:存放 kernel 4.4 或 4.19 開發(fā)的代碼。
prebuilts:存放交叉編譯工具鏈。
rkbin:存放 Rockchip 相關(guān)的 Binary 和工具。
rockdev:存放編譯輸出固件。
tools:存放 Linux 和 Windows 操作系統(tǒng)環(huán)境下常用工具。
u-boot:存放基于 v2017.09 版本進(jìn)行開發(fā)的 uboot 代碼。
yocto:基于 yocto gatesgarth 3.2 開發(fā)的根文件系統(tǒng),支持部分芯片
??相對(duì)于以上的,對(duì)比下RV1109&RV1126的SDK目錄,如下圖:
??
buildroot
??Linux SDK中 buildroot的 版本是 Buildroot-2018.02,其包含了基于 Linux 系統(tǒng)開發(fā)
??用到的各種系統(tǒng)源碼,驅(qū)動(dòng),工具,應(yīng)用軟件包。
??
??buildroot 優(yōu)勢(shì):
通過源碼構(gòu)建, 有很大的靈活性
方便的交叉編譯環(huán)境, 可以進(jìn)行快速構(gòu)建
方便各系統(tǒng)組件配置及定制開發(fā)
源碼準(zhǔn)備
??從開發(fā)版提供的資料中拿到uboot,kernel,rootfs:
uboot:uboot是引導(dǎo)程序,芯片運(yùn)行跑起來,然后引入kernel
kernel:linux的內(nèi)核是加載后將會(huì)移植運(yùn)行在內(nèi)存中的核心
rootfs:這是文件系統(tǒng),文件系統(tǒng)是kernel運(yùn)行時(shí)需要加載一些驅(qū)動(dòng),庫,存儲(chǔ)等相關(guān)的其他一切相關(guān)的東西;
?&emsp編譯uboot,kernel,然后制作文件系統(tǒng):
??
??(注意:一定要從購(gòu)買開發(fā)板或者核心板的廠家獲取,已經(jīng)做好了ddr等外設(shè)的適配,包括開發(fā)板的外設(shè),這是我們后續(xù)學(xué)習(xí)移植的基礎(chǔ),千萬不要想著從零開始做,這個(gè)是不現(xiàn)實(shí)的,目前也沒有人和公司這么做)
??(注意:buildroot文件系統(tǒng),并不是真的文件系統(tǒng),是buildroot工具構(gòu)建的文件系統(tǒng),Yocto也是,Debian和Ubuntu則是真文件系統(tǒng))
編譯buildroot
步驟一:安裝buildroot依賴環(huán)境
??虛擬機(jī)安裝編譯buildroot環(huán)境,以下跟來回驗(yàn)證了:
??
步驟二:下載解壓buildroot、uboot-kernel 傳輸?shù)侥繕?biāo)系統(tǒng)
??windows上先解壓,得到完整文件:
??
??
??然后傳送到ubuntu上(使用samba服務(wù),不清楚的參考上一篇安裝samba服務(wù))。
??
??
??虛擬機(jī)上:
??
步驟三:移動(dòng)解壓uboot-kernel
??注意:文件較大,不建議copy,一是會(huì)增加虛擬機(jī)所占存儲(chǔ),二是復(fù)制的時(shí)間很久。
??
??先解壓uboot_kernel:
???
??這是個(gè)挺漫長(zhǎng)的時(shí)間,花費(fèi)大致5分鐘。
步驟四:使用buildroot系統(tǒng)
??注意:rk3568支撐多個(gè)系統(tǒng),按照SDK文檔指定系統(tǒng)是相似的操作。
??我們使用buildroot文件系統(tǒng),將buildroot_20220510.tar.gz拷貝到rk356x文件夾:
??
??然后解壓:
??差不多也是五分鐘。
步驟五:查看編譯命令
??
??編譯uboot,編譯內(nèi)核,編譯文件系統(tǒng)(buildroot)
??
步驟六:適配屏幕
??屏幕,筆者使用的是廠家提供的lvds10.1寸屏幕,已經(jīng)做好了驅(qū)動(dòng)在sdk中,但是需要配置設(shè)備樹:
??我們此時(shí)做個(gè)額外學(xué)習(xí),先不配置hdmi和vga,這樣hdmi和vga就不能顯示,后續(xù)等我們驗(yàn)證hdmi不能顯示后,再重新配置 該文件,進(jìn)行顯示:
??
步驟七:編譯整體
??由于uboot,kernel是沒有爭(zhēng)議的,但是文件系統(tǒng)是由好幾個(gè)參數(shù),所以要根據(jù)開發(fā)文檔來,有個(gè)環(huán)境變量RK_ROOTFS_SYSTEM,他是什么則是什么系統(tǒng),由此可見,他實(shí)際上是build編譯文件系統(tǒng)的參數(shù):
??
??然后開始編譯:
??
??查看“入坑二”,最終,使用sdk定義的路徑是可以通過的:
??
入坑
入坑一:編譯所有,定位到是文件系統(tǒng)失敗
問題
??
??編譯錯(cuò)誤:
??
解決
??依次編譯,開始哪里有錯(cuò)誤:
??
??內(nèi)核報(bào)的警告,但是依然過了:
??
??
??仔細(xì)看信息,找到問題依次解決:
??
??過程中,還有其他的錯(cuò)誤,…其實(shí)就是環(huán)境缺少一些依賴,文檔前面已經(jīng)補(bǔ)上全部的依賴環(huán)境了。
??特別注意,解決后要./build.sh cleanall清理后再編譯。
??最終依賴環(huán)境是:
入坑二:編譯buildroot失敗
問題
??編譯buildroot出現(xiàn)編譯庫錯(cuò)誤。
原因
??新版本的buildroot添加了很多庫,這些庫跟/home/toppet/Linux的路徑相關(guān),配置的時(shí)候?qū)懗闪私^對(duì)路徑,所以編譯buildroot無法通過。
解決
??方案商技術(shù)支持說一定要使用文檔說的路徑才可以通過,重新全部來一遍后,確實(shí)可以過,如下圖:
??