Linux學習 - 樹莓派4b的U-Boot的初識
初識U-Boot
學習書籍:《【正點原子】I.MX6U嵌入式Linux驅動開發指南V1.5.1》
章節:第三十章
學習內容:
書中介紹uboot的獲取可以有三個途徑:第一個是uboot的官方程式碼。第二個是半導體的廠商的uboot程式碼。第三個是開發板廠商的uboot程式碼。為了移植簡單推薦選擇支援較好的開發板廠商的程式碼。如果是自己的板子推薦使用半導體廠商的程式碼。我手中有一個樹莓派4b。網上的燒寫樹莓派教程很多,但是為了學習我選擇了uboot官方的uboot程式碼。
下載uboot程式碼:進入官網:http://www.denx.de/wiki/U-Boot/,點選Source Code。
可以選擇FTP或者HTTPS下載。我下載的是:u-boot-2022.01-rc1 。把檔案通過FTP或者檔案共享等方式傳入Ubuntu虛擬機器。注意:在虛擬機器的非root使用者中有些目錄的操作許可權是受到限制的。比如我在這裡將下載好的uboot放到根目錄下的,在根目錄下建立資料夾會發現需要sudo許可權。建立好資料夾後將uboot解壓也需要對應許可權。配置好環境變數後make uboot時候也需要許可權,否則就會提示不能mkdir之類的許可權的錯誤。這時候配置的交叉編譯工具的環境變數是為當前使用者配置的,如果使用sudo會發現提示沒有配置交叉編譯工具不能正常編譯。對於Linux小白的我來說這個坑踩了一週。建議將uboot放在家目錄下。使用命令:tar -jxvf u-boot-2022.01-rc1.tar.bz2將檔案進行解壓得到u-boot-2022.01-rc1。
配置交叉編譯工具:首先了解一下交叉編譯工具。百度搜尋“ARM交叉編譯工具鏈分類說明”可以瞭解到交叉編譯工具的幾大分類。樹莓派4b是ARM v8架構。支援64位,同時也相容32位。檢視uboot資料夾下的configs資料夾中對樹莓派的支援可以看到支援如下幾種樹莓派:
這裡可以看到如果使用rpi_4_32b_defconfig則使用32位的交叉編譯工具:arm-linux-gnueabihf-gcc。如果使用rpi_4_defconfig則使用64位的交叉編譯工具:aarch64-linux-gnu-gcc。(這裡總結的教訓是:做之前多百度,因為不知道rpi_4_defconfig需要64位的交叉編譯工具而失去無數頭髮)。這裡我使用的是64位的。下載aarch64-linux-gnu-gcc:
sudo apt-get install gcc-9-aarch64-linux-gnu
sudo apt-get install gcc-aarch64-linux-gnu
配置環境變數:使用命令sudo vi /etc/profile,在末尾新增環境變數export PATH=$PATH:你的目錄/bin。儲存退出後使用命令source /etc/profile。測試有沒有安裝成功在任意終端中輸入aarch加兩下Tab後會不會出現提示:
使用aarch64-linux-gnu-gcc -v可以驗證一下是不是能正確列印出版本號。
uboot的編譯,模仿書中先使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- distclean先清除一下編譯後生成的檔案。然後使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rpi_4_defconfig配置uboot。最後使用命令make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-編譯uboot。如果都沒有問題後就會出現u-boot.bin等檔案。其中如果有error出現就直接百度安裝相關的庫檔案就可以。
uboot的燒寫,嘗試了好幾個燒寫方法,發現最好用的是使用工具:raspberry pi imager。這個官方下載可能慢一點,萬能的百度下載。然後再下載一個樹莓派的映象,使用工具燒寫進去,也可以讓它自己下載映象不過速度很慢。下載完了先插到樹莓派上連線串列埠
需要一個TTL轉串列埠模組。開啟串列埠8N1。上電看一下系統能不能跑起來。然後將SD卡插入電腦,將編譯好的u-boot.bin檔案傳入到SD卡中,修改一下config.txt檔案。我是參考部落格:(14條訊息) <第2章>樹莓派4B上執行 uboot_Fythons的部落格-CSDN部落格做的。將樹莓派的裝置樹都放好後發現還是可在部落格中下圖所示位置
部落格中有一句話猜想可能是串列埠的問題這個我們可以關注一下,在我這個版本的uboot中好像就是uboot的串列埠沒有配置。
配置uboot串列埠,下面記錄的過程是我操作的過程,可能有問題。我使用的是uboot圖形化的配置。參考手冊的第三十四章進入uboot的圖形化配置介面。
然後再將編譯後的u-boot.bin啟動就可以看到列印了。
這裡一些資訊是錯誤的,常用的uboot命令也沒有測試過,接著折騰……