五 RK3568開發筆記:在虛擬機上使用SDK編譯制作uboot、kernel和ubuntu鏡像

前言??buildroot雖然靈活,但是基于實際情況,本身是側重驅動和應用定制開發的只定制一次文件系統投入有點多,還不如直接ubunt自己交叉編譯依賴庫,做一些庫的移植裁剪 。??于是本篇就使用ubuntu系統了,至于其他庫自己下源碼在宿主機交叉編譯號后,再拷貝過去或者直接在板子上編譯也行(只是會比較慢),但是意義不大,因為開發過程肯定是用宿主機,不然核心板編譯太慢,在編譯上會花費不少可以省去的時間 。
 為什么選擇ubuntu??核心板方案上已經提供適配好的基礎uboot和kernel , 這個時候不同文件系統 uboot和內核時一樣的,做驅動差別也不大 , 而且筆者做移植交叉編譯應用和庫都較多,且不同平臺都做,直接裁剪移植 , 所以對于筆者來說,選擇ubuntu是更好的方式,缺什么下源碼三部曲交叉編譯 , 而使用buildroot構建勢必有點繞遠路,所以選擇了ubuntu,后續對ubuntu進行裁剪 , 如去掉桌面,然后開發移植庫和應用 。
 RK系列SDK簡要介紹目錄結構??一個通用 Linux SDK (RV系類的sdk沒有對工程目錄包含有 buildroot、 debian、 app、 kernel、 u-boot、 device、 docs、 external等目錄 。??以下是RK系類的目錄分類:

  • app:存放上層應用 app,主要是 qcamera/qfm/qplayer/settings 等一些應用程序 。
  • buildroot:基于 buildroot (2018.02-rc3) 開發的根文件系統 。
  • debian:基于 debian 10 開發的根文件系統,支持部分芯片 。
  • device/rockchip:存放各芯片板級配置和 Parameter 文件,以及一些編譯與打包固件的腳本和預備文件 。
  • docs:存放芯片模塊開發指導文檔、 平臺支持列表、 芯片平臺相關文檔、 Linux 開發指南等 。
  • IMAGE:存放每次生成編譯時間、 XML、 補丁和固件目錄 。
  • external:存放第三方相關倉庫,包括音頻、 視頻、 網絡、 recovery 等 。
  • kernel:存放 kernel 4.4 或 4.19 開發的代碼 。
  • prebuilts:存放交叉編譯工具鏈 。
  • rkbin:存放 Rockchip 相關的 Binary 和工具 。
  • rockdev:存放編譯輸出固件 。
  • tools:存放 Linux 和 Windows 操作系統環境下常用工具 。
  • u-boot:存放基于 v2017.09 版本進行開發的 uboot 代碼 。
  • yocto:基于 yocto gatesgarth 3.2 開發的根文件系統,支持部分芯片??相對于以上的 , 對比下RV1109&RV1126的SDK目錄,如下圖:??
    五 RK3568開發筆記:在虛擬機上使用SDK編譯制作uboot、kernel和ubuntu鏡像

    文章插圖
Ubuntu??Ubuntu 是一個流行的 Linux 發行版, 是基于 Debian 的 unstable 版本加強而來, 以“最好的 Linux 桌面系統” 而聞名 ,  近些年 Ubuntu 也推出了 Ubuntu Enterprise Linux, 在企業 Linux 應用市場占有率也有較大提高 。
  • 優點: 技術支持較好,用戶界面友好,硬件的兼容性好, 采用基于 Deb 的 ATP 包管理系統 。
  • 缺點: 技術支持和更新服務是需要付費的, 服務器軟件生態系統的規模和活力方面稍弱。??(參考廠家手冊)
 源碼準備??從開發版提供的資料中拿到uboot,kernel , rootfs:
  • uboot:uboot是引導程序,芯片運行跑起來,然后引入kernel
  • kernel:linux的內核是加載后將會移植運行在內存中的核心
  • rootfs:這是文件系統,文件系統是kernel運行時需要加載一些驅動 , 庫,存儲等相關的其他一切相關的東西;??編譯uboot,kernel,然后制作文件系統:??
    五 RK3568開發筆記:在虛擬機上使用SDK編譯制作uboot、kernel和ubuntu鏡像

    文章插圖
    ??(注意:buildroot也是要下載編譯的 , 因為打包ubuntu鏡像的時候需要使用到buildroot里面的腳本環境,所以此處也要先做buildroot系統再做ubuntu系統,具體查看“入坑一”)??(注意:一定要從購買開發板或者核心板的廠家獲??,已经p昧薲dr等外設的適配,包括開發板的外設,這是我們后續學習移植的基??,千拖娀要想着从零开始子z飧鍪遣幌質檔?,臍ぐ也脫]腥撕凸菊餉醋觶??(注意:Ubuntu文件系統,是真的文件系統,而buildroot文件系統時buildroot工具構建的文件系統,Yocto也是;Debian和Ubuntu則是真文件系統)
 編譯ubuntu步驟一:安裝buildroot依賴環境??虛擬機安裝編譯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 binutilsbuild-essentialgccg++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

推薦閱讀