uboot常用命令及其使用


1.幫助信息

? 或者 help

第一次使用uboot,通過?查看所有幫助信息

?cmd 或者 help cmd

? bootz #查看bootz命令的幫助信息

通過該命令查看某個cmd的幫助信息

2.版本信息查看

version

uboot啟動后,查看uboot版本信息

bdinfo

uboot啟動后,查看board信息

3.環境變量相關

setenv

設置一個環境變量

# 格式:setenv key vlaue
setenv bootdelay 5  # 設置uboot啟動延時5s

刪除一個環境變量
uboot對於一個沒有值的環境變量,默認不再維護,做刪除處理

# 格式:setenv key
setenv ipaddr   # 刪除ipaddr,讓ipaddr不復存在

修改一個環境變量

# 格式:setenv key vlaue
setenv bootdelay 5  # 原來的bootdleay值被覆蓋,采用新值5

saveenv

uboot啟動時,從非易失性存儲器中讀取環境變量的值,在內存中維護一份拷貝,當采用setenv命令創建、修改、或者刪除后,內存中被相應地創建、修改或者刪除,非易失存儲器中的那一份並沒有改變。直到執行saveenv,寫入非易失性存儲器。

print

打印所有環境變量及其值。

print # 打印所有

打印某一個。如果要查看某個你知道名字的環境變量,可以使用該命令。例如,打印bootcmd命令:

print bootcmd # 只打印bootcmd

4.內存相關

需要注意的是,所有參數需要十六進制數字輸入。例如12345678默認為0x12345678,當然也可直接顯式指定為0x12345678。

mm

修改ddr中內存單元的值,可以連續修改。

# mm [.b,.w,.l] addr
=>mm.l 80800000  #回車進入修改視圖,地址自動遞增
80800000:<xxxxxxxx> ? 12345678  # 回車
80800004:<xxxxxxxx> ? q         # 退出
=>

nm

修改ddr中內存單元的值,地址不自增。

# nm [.b,.w,.l] addr
=>mm.l 80800000  #回車進入修改視圖,地址自動遞增
80800000:<xxxxxxxx> ? 12345678  # 回車
80800000:<xxxxxxxx> ? q         # 退出
=>

md

顯示ddr從addr處開始的內存數據,of object為數量,每個object的字節數量取決於參數.b,.w,.l。

# md [.b,.w,.l] addr [#of objects]
md.b 80800000 100  # 80800000 100均為為十六進制數字,100h=256

mw

cp

mtest

5.mmc相關

需要注意的是,對於emmc,存在多個物理分區,每個物理分區獨立編址。進行mmc操作前,需要先切換到對應的物理分區,然后對該物理分區進行操作。
筆者所用的開發板emmc包含硬件分區:

  1. UDA, User Data Area:容量最大的硬件分區,一般UDA上繼續進行軟件分區,采用GPT或MBR方式。
  2. boot area partition1:4MB
  3. boot area partition2:4MB

mmc info

mmc rescan

mmc list

列出當前掃描到的所有mmc設備。

mmc dev

切換硬件分區

# 格式:emmc dev [dev_no] [part_no]
mmc dev 1  #切換到1號設備的硬件分區0

mmc part

列出當前硬件分區上的軟件分區。前提是當前硬件分區上存在分區表

mmc read

mmc讀寫,以塊為單位,1個塊為512Bytes。

mmc dev  1  1
mmc read 80800000 600 10 #從600塊號開始,讀取0x10=16個塊到ddr

mmc write

mmc讀寫,以塊為單位,1個塊為512Bytes。

mmc dev  1  1
mmc write 80800000 600 10 #將80800000開始的數據寫入到emmc的600塊地址處,寫入0x10=16個塊

mmc erase

6.fat文件系統相關

fatinfo

查看分區的fat文件系統信息

# 格式: fatinfo <interface> [<dev>[:part]]
fatinfo mmc 1:1

fatls

列出fat文件系統所在分區上的所有文件

# 格式: fatls <interface> [<dev>[:part]] [dir]
fatls mmc 1:1

fstype

查看分區文件系統類型

# 格式: fstype <interface> [<dev>[:part]]
fstype mmc 1:0
fstype mmc 1:1
fstype mmc 1:2

fatload

從fat分區加載文件到內存

fatload mmc 1:1 80800000 zImage # 從fat分區加載zImage到DDR的80800000

fatwrite

將文件寫入fat分區中

fatload mmc 1:1 80800000 zImage 6788f8 #從內存80800000處讀取0x6788f8個數據寫入fat分區,替換zImage文件

7.ext文件系統相關

8.nand相關

nand info

nand device

nand erase

nand read

nand write

9.網絡相關相關

ping

測試uboot和遠程主機的連通性。但是遠程主機無法ping通uboot,即使網絡實際上連通。

dhcp

從dhcp獲取ip地址。

tftp

從tftp server下載文件到ddr。

tftp 80800000 zImage #從tftpserver下載zImage到80800000處

nfs

從nfs服務器共享目錄下載文件到ddr。和tftp不同的是,需要指定遠程主機的ip地址和共享文件的全路徑。

# nfs [loadaddr] [[host_ip_addr]:filepath]
nfs 80800000 192.168.1.128:/home/book/nfs_rootfs/zImage#從nfserver下載zImage到80800000處

10.系統啟動相關

bootz

bootz命令根據給定的kernel、dtb在ddr中的地址,去啟動內核。可以通過多種方式(tftp命令、fatload命令等方式將zImage、dtb加載到ddr指定位置)
輸入參數1:zImage_addr
輸入參數2:dtb_addr

# if zimage_addr=80800000 dtb_addr=83000000
tftp 80800000 zImage
tftp 83000000 xxxx.dtb
bootz 80800000 - 83000000

bootm

bootm用於啟動uImage

boot

boot命令執行uboot環境變量bootcmd中定義好的一組命令來啟動系統。這一組命令一般包含
1)將kerneldtb拷貝到ddr指定位置的命令
2)bootz或者bootm命令

# 執行boot命令則執行環境變量bootcmd中定義好的命令
# 測試該命令,可以自定定義bootcmd命令,如下所示:
# 下面使用雙引號包含多個命令,命令之間用分號隔開,單引號也可以
setenv bootcmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
saveenv   # 做測試可以不保存,如果保存了,聚會寫入環境變量區
boot

run

run命令可以執行一個自定義命令,這個自定義命令的名字以一個環境變量形式出現,環境變量的內容就是用戶要執行的一系列命令集合。

setenv usercmd "tftp 80800000 zImage;tftp 83000000 xxxx.dtb;bootz 80800000 - 83000000"
run usercmd

run命令和boot命令很相似,知識boot命令默認會執行bootcmd中定義好的一系列操作,不需要制定這個環境變量,但是run命令需要明確指定這個變量的名字。

reset

復位系統。這里值得注意,uboot的復位不是reboot,reboot一般指操作系統重啟。

go

讓cpu到ddr指定地址執行程序。可以用於調試裸機程序。
如果一個裸機程序app.bin,鏈接地址設置為87800000,並燒寫到了87800000,則可以通過go直接運行該程序

tftp 87800000 app.bin
go 87800000  # 跳轉到87800000執行代碼

這里要區分go和bootz命令的區別。bootz命令有兩個地址輸入作為參數,啟動內核前,還會做一些其他的操作。不要指望簡單的使用go 80800000這條命令去啟動內核。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM