buildroot雖然靈活,但是基於實際情況,本身是側重驅動和應用客製化開發的只客製化一次檔案系統投入有點多,還不如直接ubunt自己交叉編譯依賴庫,做一些庫的移植裁剪。
於是本篇就使用ubuntu系統了,至於其他庫自己下原始碼在宿主機交叉編譯號後,再拷貝過去或者直接在板子上編譯也行(只是會比較慢),但是意義不大,因為開發過程肯定是用宿主機,不然核心板編譯太慢,在編譯上會花費不少可以省去的時間。
核心板方案上已經提供適配好的基礎uboot和kernel,這個時候不同檔案系統 uboot和核心時一樣的,做驅動差別也不大,而且筆者做移植交叉編譯應用和庫都較多,且不同平臺都做,直接裁剪移植,所以對於筆者來說,選擇ubuntu是更好的方式,缺什麼下原始碼三部曲交叉編譯,而使用buildroot構建勢必有點繞遠路,所以選擇了ubuntu,後續對ubuntu進行裁剪,如去掉桌面,然後開發移植庫和應用。
一個通用 Linux SDK (RV系類的sdk沒有對工程目錄包含有 buildroot、 debian、 app、 kernel、 u-boot、 device、 docs、 external等目錄。
以下是RK系類的目錄分類:
Ubuntu 是一個流行的 Linux 發行版, 是基於 Debian 的 unstable 版本加強而來, 以「最好的 Linux 桌面系統」 而聞名, 近些年 Ubuntu 也推出了 Ubuntu Enterprise Linux, 在企業 Linux 應用市場佔有率也有較大提高。
從開發版提供的資料中拿到uboot,kernel,rootfs:
虛擬機器器安裝編譯buildroot環境,以下跟來回驗證了:
sudo apt-get install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop \
git-core curl u-boot-tools mtd-utils android-tools-fsutils openjdk-8-jdk device-tree-compiler \
gdisk m4 libz-dev git gnupg flex bison gperf libsdl1.2-dev libesd-java libwxgtk3.0-dev \
squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool \
libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev \
lib32ncurses5-dev lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip \
zip liblz4-tool repo git ssh make gcc libssl-dev liblz4-tool vim expect \
g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \
qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib \
unzip device-tree-compiler python-pip libncurses5-dev rsync subversion \
sed make binutils build-essential gcc g++ wget python libncurses5 bzr cvs git mercurial \
patch gzip bzip2 perl tar cpio unzip rsync file bc wget qemu-user-static live-build -y \
python3.8 python3.8-dev
下載解壓,做這個開發確實很需要磁碟大小,而且傳輸也費時間,加上用虛擬機器器,專門加裝了1024GBSSD作為專門開發的。
然後傳送到ubuntu上,使用samba服務,參考博文《linux實用技巧:ubuntu18.04安裝samba伺服器實現區域網檔案共用》
tar xvf uboot_kernel_20220512.tar.gz
(疑問:只用了3分鐘,因為之前是系統ssd,這次是專門配的1024ssd單獨盤麼?)
注意:rk3568支撐多個系統,按照SDK檔案指定系統是相似的操作。
我們使用ubuntu檔案系統,將ubuntu_20220511.tar.gz直接解壓到rk356x_linux的資料夾:
cd ~/work/sdk
tar xvf buildroot_20220510.tar.gz -Ca rk356x_linux/
很快,如下圖:
編譯uboot:
編譯kernel:
編譯檔案系統ubuntu,這裡要先選擇廠商的設定:
./build.sh BoardConfig-rk3568-evb1-ddr4-v10.mk
./build.sh ubuntu
然後錯誤:
具體檢視「入坑一」,這裡可以看出方案上先基於buildroot做的,然後再buildroot下去做其他的打包。
編譯好buildroot後,繼續使用ubuntu
./build.sh ubuntu
至此,ubuntu的韌體編譯完成,但是我們沒有適配螢幕的。
螢幕,筆者使用的是廠家提供的lvds10.1寸螢幕,已經做好了驅動在sdk中,但是需要設定裝置樹:
cd /home/topeet/Linux/rk356x_linux/
gedit kernel/arch/arm64/boot/dts/rockchip/topeet_screen_choose.dtsi
知識點:適配螢幕是修改了核心的裝置樹,而沒有修改檔案系統。
由於uboot,kernel是沒有爭議的,但是檔案系統是由好幾個引數,所以要根據開發檔案來,有個環境變數RK_ROOTFS_SYSTEM,他是什麼則是什麼系統,由此可見,他實際上是build編譯檔案系統的引數:
編譯:
export RK_ROOTFS_SYSTEM=ubuntu
./build.sh all
5分鐘編完。
./mkfirmware.sh
找不到buildroot下的一個指令碼。
要先編譯buildroot
先走buildroot編譯流程,再走編譯ubuntu流程
具體的編譯buildroot問題,需要看《RK3568開發筆記(四):在虛擬機器器上使用SDK編譯製作uboot、kernel和buildroot映象》。