RK3568開發筆記(四):在虛擬機器上使用SDK編譯製作uboot、kernel和buildroot映象

21497936 發表於 2022-07-18

前言

  上一篇搭建好了ubuntu宿主機開發環境,本篇的目標系統主要是開發linux+qt,所以需要刷上billdroot+Qt建立的系統,為了更好的熟悉原理和整個開發過程,選擇從零開始搭建rk3568的sdk開發環境。

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目錄,如下圖:
   在這裡插入圖片描述

buildroot

  Linux SDK中 buildroot的 版本是 Buildroot-2018.02,其包含了基於 Linux 系統開發
  用到的各種系統原始碼,驅動,工具,應用軟體包。
   在這裡插入圖片描述

  buildroot 優勢:

  • 通過原始碼構建, 有很大的靈活性
  • 方便的交叉編譯環境, 可以進行快速構建
  • 方便各系統元件配置及定製開發

原始碼準備

  從開發版提供的資料中拿到uboot,kernel,rootfs:

  • uboot:uboot是載入程式,晶片執行跑起來,然後引入kernel
  • kernel:linux的核心是載入後將會移植執行在記憶體中的核心
  • rootfs:這是檔案系統,檔案系統是kernel執行時需要載入一些驅動,庫,儲存等相關的其他一切相關的東西;
     &emsp編譯uboot,kernel,然後製作檔案系統:
       在這裡插入圖片描述

  (注意:一定要從購買開發板或者核心板的廠家獲取,已經做好了ddr等外設的適配,包括開發板的外設,這是我們後續學習移植的基礎,千萬不要想著從零開始做,這個是不現實的,目前也沒有人和公司這麼做)
  ( 注意:buildroot檔案系統,並不是真的檔案系統,是buildroot工具構建的檔案系統,Yocto也是,Debian和Ubuntu則是真檔案系統

編譯buildroot

步驟一:安裝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 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

   在這裡插入圖片描述

步驟二:下載解壓buildroot、uboot-kernel 傳輸到目標系統

  windows上先解壓,得到完整檔案:
   在這裡插入圖片描述

   在這裡插入圖片描述

  然後傳送到ubuntu上(使用samba服務,不清楚的參考上一篇安裝samba服務)。
   在這裡插入圖片描述

   在這裡插入圖片描述

  虛擬機器上:
   在這裡插入圖片描述

步驟三:移動解壓uboot-kernel

  注意:檔案較大,不建議copy,一是會增加虛擬機器所佔儲存,二是複製的時間很久。

mv buildroot_20220510.tar.gz uboot_kernel_20220512.tar.gz ~/work/

   在這裡插入圖片描述

  先解壓uboot_kernel:

tar xvf uboot_kernel_20220512.tar.gz

    在這裡插入圖片描述

  這是個挺漫長的時間,花費大致5分鐘。

步驟四:使用buildroot系統

  注意:rk3568支撐多個系統,按照SDK文件指定系統是相似的操作。
  我們使用buildroot檔案系統,將buildroot_20220510.tar.gz拷貝到rk356x資料夾:

cd ~/workmv buildroot_20220510.tar.gz rk356x_linux

   在這裡插入圖片描述
  然後解壓:

tar xvf buildroot_20220510.tar.gz

  差不多也是五分鐘。

步驟五:檢視編譯命令

   在這裡插入圖片描述

  編譯uboot,編譯核心,編譯檔案系統(buildroot)
   在這裡插入圖片描述

步驟六:適配螢幕

  螢幕,筆者使用的是廠家提供的lvds10.1寸螢幕,已經做好了驅動在sdk中,但是需要配置裝置樹:

cd ~/work/rk356x_linux/

  我們此時做個額外學習,先不配置hdmi和vga,這樣hdmi和vga就不能顯示,後續等我們驗證hdmi不能顯示後,再重新配置 該檔案,進行顯示:
   在這裡插入圖片描述

步驟七:編譯整體

  由於uboot,kernel是沒有爭議的,但是檔案系統是由好幾個引數,所以要根據開發文件來,有個環境變數RK_ROOTFS_SYSTEM,他是什麼則是什麼系統,由此可見,他實際上是build編譯檔案系統的引數:
   在這裡插入圖片描述

  然後開始編譯:

./build.sh all

   在這裡插入圖片描述

  檢視“ 入坑二”,最終,使用sdk定義的路徑是可以通過的:
   在這裡插入圖片描述

入坑

入坑一:編譯所有,定位到是檔案系統失敗

問題

./build.sh all

   在這裡插入圖片描述

  編譯錯誤:
   在這裡插入圖片描述

解決

  依次編譯,開始哪裡有錯誤:

./build.sh uboot

   在這裡插入圖片描述

./build.sh kernel

  核心報的警告,但是依然過了:
   在這裡插入圖片描述

./build.sh buildroot

   在這裡插入圖片描述
  仔細看資訊,找到問題依次解決:
   在這裡插入圖片描述
  過程中,還有其他的錯誤,…其實就是環境缺少一些依賴,文件前面已經補上全部的依賴環境了。
  特別注意,解決後要./build.sh cleanall清理後再編譯。
  最終依賴環境是:

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

入坑二:編譯buildroot失敗

問題

  編譯buildroot出現編譯庫錯誤。

原因

  新版本的buildroot新增了很多庫,這些庫跟/home/toppet/Linux的路徑相關,配置的時候寫成了絕對路徑,所以編譯buildroot無法通過。

解決

  方案商技術支援說一定要使用文件說的路徑才可以通過,重新全部來一遍後,確實可以過,如下圖:
   在這裡插入圖片描述


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2906198/,如需轉載,請註明出處,否則將追究法律責任。

相關文章