U-boot發(fā)展到現(xiàn)在,他的命令行模式已經(jīng)非常接近Linux下的shell了,在我編譯的U-boot-2009.11中的命令行模式模式下支持“Tab”鍵的命令補(bǔ)全和命令的歷史記錄功能。而且如果你輸入的命令的前幾個字符和別的命令不重復(fù),那么你就只需要打這幾個字符即可,比如我想看這個U-boot的版本號,命令就是“ version”,但是在所有的命令中沒有其他任何一個的命令是由“v”開頭的,所以只需要輸入“v”即可。
由于U-boot支持的命令實在太多,由于開發(fā)過程的需要,有必要先把U-Boot命令的用法弄清楚。接下來,根據(jù)每一條命令的幫助信息,解釋一下這些命令的功能和參數(shù)。
進(jìn)入uboot的命令行提示后,通過help指令,可以得知當(dāng)前的uboot支持的所有命令
help 指令名稱,可以得知對應(yīng)指令的相關(guān)幫助, 如help setenv
? u-boot的環(huán)境變量
u-boot的環(huán)境變量用來存儲一些經(jīng)常使用的參數(shù)變量,uboot希望將環(huán)境變量存儲在靜態(tài)存儲器中(如nand nor eeprom mmc)。
其中有一些也是大家經(jīng)常使用,有一些是使用人員自己定義的,更改這些名字會出現(xiàn)錯誤,下面的表中我們列出了一些常用的環(huán)境變量:
bootdelay 執(zhí)行自動啟動的等候秒數(shù)
baudrate 串口控制臺的波特率
ethaddr 以太網(wǎng)卡的網(wǎng)卡物理地址
bootfile 缺省的下載文件
bootargs 傳遞給內(nèi)核的啟動參數(shù)
bootcmd 自動啟動時執(zhí)行的命令
serverip 服務(wù)器端的ip地址
ipaddr 本地ip 地址
stdin 標(biāo)準(zhǔn)輸入設(shè)備
stdout 標(biāo)準(zhǔn)輸出設(shè)備
stderr 標(biāo)準(zhǔn)出錯設(shè)備
上面這些是uboot默認(rèn)存在的環(huán)境變量,uboot本身會使用這些環(huán)境變量來進(jìn)行配置。我們可以自己定義一些環(huán)境變量來供我們自己uboot驅(qū)動來使用。
Uboot環(huán)境變量的設(shè)計邏輯是在啟動過程中將env從靜態(tài)存儲器中讀出放到RAM中,之后在uboot下對env的操作(如printenv editenv setenv)都是對RAM中env的操作,只有在執(zhí)行saveenv時才會將RAM中的env重新寫入靜態(tài)存儲器中。
這種設(shè)計邏輯可以加快對env的讀寫速度。
1、bootm
bootm [addr [arg 。。.]]
- boot application image stored in memory
passing arguments ‘a(chǎn)rg 。。.’; when booting a Linux kernel,
‘a(chǎn)rg’ can be the address of an initrd image
bootm命令可以引導(dǎo)啟動存儲在內(nèi)存中的程序映像。這些內(nèi)存包括RAM和可以永久保存的Flash。
第1個參數(shù)addr是程序映像的地址,這個程序映像必須轉(zhuǎn)換成U-Boot的格式。
第2個參數(shù)對于引導(dǎo)Linux內(nèi)核有用,通常作為U-Boot格式的RAMDISK映像存儲地址;也可以是傳遞給Linux內(nèi)核的參數(shù)(缺省情況下傳遞bootargs環(huán)境變量給內(nèi)核)。
2、bootp
bootp [loadAddress] [bootfilename]
bootp命令通過bootp請求,要求DHCP服務(wù)器分配IP地址,然后通過TFTP協(xié)議下載指定的文件到內(nèi)存。
第1個參數(shù)是下載文件存放的內(nèi)存地址。
第2個參數(shù)是要下載的文件名稱,這個文件應(yīng)該在開發(fā)主機(jī)上準(zhǔn)備好。
3、cmp
cmp [.b, .w, .l] addr1 addr2 count
- compare memory
cmp命令可以比較2塊內(nèi)存中的內(nèi)容。.b以字節(jié)為單位;.w以字為單位;.l以長字為單位。注意:cmp.b中間不能保留空格,需要連續(xù)敲入命令。
第1個參數(shù)addr1是第一塊內(nèi)存的起始地址。
第2個參數(shù)addr2是第二塊內(nèi)存的起始地址。
第3個參數(shù)count是要比較的數(shù)目,單位按照字節(jié)、字或者長字。
4、cp
cp [.b, .w, .l] source target count
- copy memory
cp命令可以在內(nèi)存中復(fù)制數(shù)據(jù)塊,包括對Flash的讀寫操作。
第1個參數(shù)source是要復(fù)制的數(shù)據(jù)塊起始地址。
第2個參數(shù)target是數(shù)據(jù)塊要復(fù)制到的地址。這個地址如果在Flash中,那么會直接調(diào)用寫Flash的函數(shù)操作。所以U-Boot寫Flash就使用這個命令,當(dāng)然需要先把對應(yīng)Flash區(qū)域擦干凈。
第3個參數(shù)count是要復(fù)制的數(shù)目,根據(jù)cp.b cp.w cp.l分別以字節(jié)、字、長字為單位。
5、crc32
crc32 address count [addr]
- compute CRC32 checksum [save at addr]
crc32命令可以計算存儲數(shù)據(jù)的校驗和。
第1個參數(shù)address是需要校驗的數(shù)據(jù)起始地址。
第2個參數(shù)count是要校驗的數(shù)據(jù)字節(jié)數(shù)。
第3個參數(shù)addr用來指定保存結(jié)果的地址。
6、echo
echo [args.。]
- echo args to console; c suppresses newline
echo命令回顯參數(shù)。
7、erase
erase start end
- erase FLASH from addr ‘start’ to addr ‘end’
erase N:SF[-SL]
- erase sectors SF-SL in FLASH bank # N
erase bank N
- erase FLASH bank # N
erase all
- erase all FLASH banks
erase命令可以擦Flash。
參數(shù)必須指定Flash擦除的范圍。
按照起始地址和結(jié)束地址,start必須是擦除塊的起始地址;end必須是擦除末尾塊的結(jié)束地址。這種方式最常用。舉例說明:擦除0x20000 – 0x3ffff區(qū)域命令為erase 20000 3ffff。
按照組和扇區(qū),N表示Flash的組號,SF表示擦除起始扇區(qū)號,SL表示擦除結(jié)束扇區(qū)號。另外,還可以擦除整個組,擦除組號為N的整個Flash組。擦除全部Flash只要給出一個all的參數(shù)即可。
8、flinfo
flinfo
- print information for all FLASH memory banks
flinfo N
- print information for FLASH memory bank # N
flinfo命令打印全部Flash組的信息,也可以只打印其中某個組。一般嵌入式系統(tǒng)的Flash只有一個組。
9、go
go addr [arg 。。.]
- start application at address ‘a(chǎn)ddr’
passing ‘a(chǎn)rg’ as arguments
go命令可以執(zhí)行應(yīng)用程序。
第1個參數(shù)是要執(zhí)行程序的入口地址。
第2個可選參數(shù)是傳遞給程序的參數(shù),可以不用。
10、minfo
iminfo addr [addr 。。.]
- print header information for application image starting at
address ‘a(chǎn)ddr’ in memory; this includes verification of the
image contents (magic number, header and payload checksums)
iminfo可以打印程序映像的開頭信息,包含了映像內(nèi)容的校驗(序列號、頭和校驗和)。
第1個參數(shù)指定映像的起始地址。
可選的參數(shù)是指定更多的映像地址。
11、loadb
loadb [ off ] [ baud ]
- load binary file over serial line with offset ‘off’ and baudrate ‘baud’
loadb命令可以通過串口線下載二進(jìn)制格式文件。
12、loads
loads [ off ]
- load S-Record file over serial line with offset ‘off’
loads命令可以通過串口線下載S-Record格式文件。
13、mw
mw [.b, .w, .l] address value [count]
- write memory
mw命令可以按照字節(jié)、字、長字寫內(nèi)存,.b .w .l的用法與cp命令相同。
第1個參數(shù)address是要寫的內(nèi)存地址。
第2個參數(shù)value是要寫的值。
第3個可選參數(shù)count是要寫單位值的數(shù)目。
14、nfs
nfs [loadAddress] [host ip addr:bootfilename]
nfs命令可以使用NFS網(wǎng)絡(luò)協(xié)議通過網(wǎng)絡(luò)啟動映像。
15、nm
nm [.b, .w, .l] address
- memory modify, read and keep address
nm命令可以修改內(nèi)存,可以按照字節(jié)、字、長字操作。
參數(shù)address是要讀出并且修改的內(nèi)存地址。
16、printenv
printenv
- print values of all environment variables
printenv name 。。.
- print value of environment variable ‘name’
printenv命令打印環(huán)境變量。
可以打印全部環(huán)境變量,也可以只打印參數(shù)中列出的環(huán)境變量。
17、protect
protect on start end
- protect Flash from addr ‘start’ to addr ‘end’
protect on N:SF[-SL]
- protect sectors SF-SL in Flash bank # N
protect on bank N
- protect Flash bank # N
protect on all
- protect all Flash banks
protect off start end
- make Flash from addr ‘start’ to addr ‘end’ writable
protect off N:SF[-SL]
- make sectors SF-SL writable in Flash bank # N
protect off bank N
- make Flash bank # N writable
protect off all
- make all Flash banks writable
protect命令是對Flash寫保護(hù)的操作,可以使能和解除寫保護(hù)。
第1個參數(shù)on代表使能寫保護(hù);off代表解除寫保護(hù)。
第2、3參數(shù)是指定Flash寫保護(hù)操作范圍,跟擦除的方式相同。
18、rarpboot
rarpboot [loadAddress] [bootfilename]
rarboot命令可以使用TFTP協(xié)議通過網(wǎng)絡(luò)啟動映像。也就是把指定的文件下載到指定地址,然后執(zhí)行。
第1個參數(shù)是映像文件下載到的內(nèi)存地址。
第2個參數(shù)是要下載執(zhí)行的映像文件。
19、run
run var [。。.]
- run the commands in the environment variable(s) ‘var’
run命令可以執(zhí)行環(huán)境變量中的命令,后面參數(shù)可以跟幾個環(huán)境變量名。
20、setenv
setenv name value 。。.
- set environment variable ‘name’ to ‘value 。。.’
setenv name
- delete environment variable ‘name’
setenv命令可以設(shè)置環(huán)境變量。
第1個參數(shù)是環(huán)境變量的名稱。
第2個參數(shù)是要設(shè)置的值,如果沒有第2個參數(shù),表示刪除這個環(huán)境變量。
21、sleep
sleep N
- delay execution for N seconds (N is _decimal_ ?。。。?/p>
sleep命令可以延遲N秒鐘執(zhí)行,N為十進(jìn)制數(shù)。
22、tftpboot
tftpboot [loadAddress] [bootfilename]
tftpboot命令可以使用TFTP協(xié)議通過網(wǎng)絡(luò)下載文件。按照二進(jìn)制文件格式下載。另外使用這個命令,必須配置好相關(guān)的環(huán)境變量。例如serverip和ipaddr。
第1個參數(shù)loadAddress是下載到的內(nèi)存地址。
第2個參數(shù)是要下載的文件名稱,必須放在TFTP服務(wù)器相應(yīng)的目錄下。
這些U-Boot命令為嵌入式系統(tǒng)提供了豐富的開發(fā)和調(diào)試功能。在Linux內(nèi)核啟動和調(diào)試過程中,都可以用到U-Boot的命令。但是一般情況下,不需要使用全部命令。比如已經(jīng)支持以太網(wǎng)接口,可以通過tftpboot命令來下載文件,那么還有必要使用串口下載的loadb嗎?反過來,如果開發(fā)板需要特殊的調(diào)試功能,也可以添加新的命令。
評論