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 # 打印所有
打印某一個。如果要查看某個你知道名字的環境變量,可以使用該命令。例如,打印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包含硬件分區:
- UDA, User Data Area:容量最大的硬件分區,一般UDA上繼續進行軟件分區,采用GPT或MBR方式。
- boot area partition1:4MB
- 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這條命令去啟動內核。