U-boot常見命令使用

tstars發表於2024-03-30

前言:絕大多數嵌入式開發都使用uboot作為bootloader,uboot可以看作是一個框架,在編譯時需要指定裝置檔案才能夠編譯得到對應板子的uboot,這個裝置檔案就相當於參數列,描述了這個板子長什麼樣子。在uboot裡不用記住所有命令的用法,當需要檢視某個命令的用法和介紹時,輸入? 命令或者 help 命令 就可以得到對應名的用法和介紹了
下面介紹一些常用的和重點的uboot命令

1、資訊查詢命令
(1) bdinfo
(2) printenv
(3) version

2、環境變數操作命令
(1)setenv 修改環境變數命令,此時修改的命令只是儲存在RAM中
(2)saveenv 儲存修改的環境變數到flash中。因此這兩個命令是配合使用的
注意:環境變數是以字串的形式儲存,並在修改時以空格分隔名字和變數值,因此如果環境變數值存在空格,要用單引號括起來

3、記憶體操作命令
特別注意:在uboot中數字都是16進位制形式
(1)md 顯示記憶體的內容,顧名思義,md = memory display 具體用法可以‘? md’檢視
(2)nm 修改指定位置記憶體的內容
(3)mm 也是修改指定地址處記憶體的內容,但是地址會自增
(4)mw 使用一個資料填充一段連續的記憶體
(5)cp 複製命令
(6)cpm 比較兩個地址處的記憶體內容是否相等

4、網路操作命令 重點!
在使用網路操作命令之前需要先配置好開發板的網路環境,要求在uboot中能夠ping通虛擬機器、電腦主機
(1) ping ip地址 用於確定當前機器是否能和對應ip地址的機器透過網路連線
(2) dhcp 自動獲取ip地址,僅在開發板連線路由器時才有效,透過電腦連線的話組成的只是一個區域網,是不能訪問外部網路的
(3) nfs 透過網路將伺服器中的檔案透過網路傳輸到開發板的DRAM中
(4) tftp作用同nfs,只是命令的用法和格式不一樣,並且tftp是直接從環境變數中設定的伺服器ip地址對應的伺服器中的特定資料夾中傳輸檔案,指令上更加簡潔

5、mmc命令
輸入‘? mmc’可以檢視mmc命令說明

6、檔案系統操作命令
關於檔案系統的知識與原理請看哈工大作業系統課程中關於磁碟的那一部分

  • FAT格式檔案系統
    (1)fatinfo 查詢指定mmc裝置分割槽的檔案系統資訊
    (2)fatls 查詢fat格式裝置的目錄和檔案資訊
    (3)fstype 檢視mmc裝置某個分割槽的檔案系統格式
    (4)fatload 將指定檔案讀到DRAM
    (5)fatwrite 將DRAM中資料寫入到MMC裝置中
  • EXT格式檔案系統操作命令也有extls,extinfo等,與fat檔案系統格式一樣,只是只能用於ext格式檔案系統,同理fat檔案系統操作命令也只用於fat格式檔案系統

7、boot操作命令,重點!
(1)bootz 用於從DRAM中啟動Linux系統,首先需要將系統映象檔案、根檔案系統、裝置樹檔案載入到記憶體中,然後bootz啟動,格式為:bootz [addr [initrd[:size]] [fdt]]
其中addr為Linux映象在DRAM中的位置,initrd為檔案系統相關的檔案在DRAM中位置,fdt是裝置樹檔案在DRAM中位置,如果不使用initrd的話用-代替,一個例子如下:

點選檢視程式碼
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb
bootz 80800000 - 83000000
可以看到,首先需要將檔案載入到記憶體然後才能bootz

(2)bootm與bootz作用相同,只是bootm引導的是uImage映象

(3)boot命令就是執行bootcmd環境變數中的命令來引導作業系統,因此如果把前面tftp和bootz程式碼寫到bootcmd環境變數中,執行boot就會執行bootcmd中命令啟動作業系統

(4)run 執行環境變數中定義的命令
(5)go 修改PC指標,跳轉到指定記憶體位置處執行,比如可以把邏輯程式的bin檔案載入到連結的記憶體位置後使用go跳到連結地址執行