uboot使用教程及命令引數說明
uboot是bootloader的一種,主要是用於引導核心啟動.
uboot除此功能外, 還帶有很多其它功能. 功能是通過命令來呼叫.
uboot的命令:
help //列出當前uboot所有支援的命令
help 命令 //檢視指定命令的幫助
reset //重啟uboot
bootm //用於啟動核心
用法: bootm 0x42000000 //從記憶體地址0x42000000啟動核心, 啟動前需把核心映象uImage存放到指定的記憶體地址
printenv //列印所有環境變數的值
printenv 環境變數名 //檢視指定的環境變數值
常用環境變數:
bootdelay // uboot啟動後, 倒計時多少秒後自動執行環境變數bootcmd的語句
bootcmd // 倒計時到0後,自動執行裡面的語句
bootargs // 是用於提供給核心的啟動引數語句
setenv //設定/修改/刪除環境變數的值
用法:
setenv 環境變數名 //刪除指定的環境變數
setenv myargs "hello" //設定環境變數myargs=hello, 如果環境變數沒有會創建出來,如果已存則會修改它的值
saveenv //儲存環境變數,環境變數修改過後必須執行此命令才可以儲存起來,否則重啟後環境變數就恢復了.
loady //用於從uart線下載檔案到板上記憶體裡(loadb, loads, loadx基本一樣)
用法:
loady 0x40008000 //把下載的檔案從記憶體地址0x40008000開始存放
執行"loady 0x40008000"後, uboot就會進入等待狀態,等著接收資料
minicom具有通過uart傳輸檔案的功能.
按"ctrl+a", 鬆手後再按"s", 選擇"ymodem", 在彈出的介面裡按空格鍵選中要傳的檔案.
md 記憶體地址 //用於檢視記憶體地址上的值
用法:
md.b0x40008000 100 //從記憶體地址0x40008000開始,檢視0x100個位元組並輸出值
md.w 0x40008000 100 //從記憶體地址0x40008000開始,檢視0x100個16位值並輸出值
md.l 0x40008000 100 //從記憶體地址0x40008000開始,檢視0x100個32位值並輸出值
mw //用於修改記憶體地址上的值
用法:
mw.b0x40008000 0xab 100 //從記憶體地址0x40008000開始的0x100位元組空間,設值為0xab
mw.w 0x40008000 0xabcd 100 //從記憶體地址0x40008000開始的0x200位元組空間,每16位值設為0xabcd
mw.l 0x40008000 0xabcdef88 100 //從記憶體地址0x40008000開始的0x400位元組空間,每32位值設為0xabcdef88
go //執行指定記憶體地址上的指令
用法:
go 0x40008000
mmc // sd/mmc介面裝置(sd卡, emmc)操作命令, 按扇區操作(每扇區512位元組)
用法:
mmc read addr blk cnt //從mmc裝置上的第blk個扇區開始,共讀出cnt個扇區到記憶體地址addr上
mmc write addr blk cnt //把記憶體地址addr上的資料寫入mmc裝置的第blk個扇區,共cnt個扇區大小
mmc dev //用於當看當前的mmc裝置是第幾個
mmc erase blk cnt //把mmc裝置的第blk個扇區開始清零,共清除cnt個扇區大小
mmc part //列出當前mmc裝置的分割槽資訊
mmc list //列出所有的mmc裝置資訊
ext4ls //檢視儲存裝置的ext2/3/4分割槽裡的內容
用法:
ext4ls mmc 0:2 //檢視第0個儲存裝置的第二個分割槽
ext4load //從ext2/3/4分割槽裡讀出檔案到指定的記憶體地址
用法:
ext4load mmc 0:2 0x40008000 /uImage //從第0個儲存裝置的第2個分割槽的根目錄讀出uImage檔案到記憶體地址0x40008000
fatls //檢視儲存裝置的fat分割槽裡的內容
用法:
fatls mmc 0:1 //檢視第0個儲存裝置的第1個分割槽(fat分割槽)
fatload //從fat分割槽裡讀出檔案到指定的記憶體地址
用法:
fatload mmc 0:1 0x40008000 /uImage //從第0個儲存裝置的第1個分割槽的根目錄讀出uImage檔案到記憶體地址0x40008000
fatwrite //把記憶體上的資料儲存到fat分割槽的一個檔案裡
用法:
fatwrite mmc 0:1 0x40008000 /my.txt 0x35 //把記憶體地址0x40008000開始的0x35個位元組資料寫入到第0個裝置的第1個分割槽裡,檔名為my.txt
run //執行指定的環境變數裡的語句
用法:
run bootcmd //執行環境變數bootcmd裡的語句
//如uboot上已驅動好網路裝置並環境變設好IP及PC端IP,還可以使用以下命令:
tftpboot 0x40008000 檔名 // 通過網路下載檔案到記憶體地址0x40008000, PC端需配置好tftp伺服器
nfs 0x40008000 pc端IP:/帶路徑的檔名 //pc端需配置好nfs伺服器
ping ip //檢測網路是否通
指令: bootm
bootm 用於將核心映象載入到記憶體的指定地址處
例:
bootm 0x82000000
檢視和修改環境變數指令
常用環境變數列表
bootdelay執行自動啟動(bootcmd中的命令)的等候秒數
baudrate串列埠控制檯的波特率
bootfile預設的下載檔名
bootargs傳遞給Linux核心的啟動引數
bootcmd自動啟動時執行命令
stdin標準輸入裝置, 一般是串列埠
stdout標準輸出, 一般是串列埠,也可是LCD(VGA)
stderr 標準出錯,一般是串列埠,也可是LCD(VGA)
serveripTFTP伺服器端的IP地址
ipaddr本地的IP地址
ethaddr乙太網的MAC地址
netmask乙太網的網路掩碼
gatewayip 乙太網的閘道器
指令: setenvname value
第1個引數是環境變數的名稱。
第2個引數是要設定的值,如果沒有第2個引數,表示刪除這個環境變數
例:
setenvserverip 192.168.1.12//新增環境變數serverip 其值為 192.168.1.12
setenvserverip 192.168.1.20//在上一行的基礎上把環境變數serverip 值重新賦為 192.168.1.20
setenv serverip //把 serverip 變數刪除
指令: saveenv儲存環境變數
指令: printenv 檢視環境變數
使用該命令返回:
bootdelay=1
baudrate=115200
bootfile="uImage"
filesize=6600EC
fileaddr=82000000
bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),27M(rootfs)
bootcmd=sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06 (Jan 20 2015 - 15:46:38)
serverip=192.168.1.12
ipaddr=192.168.1.129
ethaddr=00:01:02:11:88:91
netmask=255.255.255.0
gatewayip=192.168.1.1
檢視和修改記憶體值指令
檢視記憶體命令 md
修改記憶體命令 mm
填充記憶體命令 mw
複製記憶體命令 cp
這些命令都可以帶上字尾 “.b”(位元組 byte), ”.w”(字 word), ”.l”(4位元組 long) 為單位進行操作
指令: mw填充記憶體命令
mw[.b,.w,.l] address value [count]
表示以[.b,.w,.l]為單位往開始地址為address的記憶體填充count 個值為 value 的資料
例:
mw.b 82000000 ff 100000從地址0x82000000地址開始填充0x100000(1M位元組)個值為0xff的資料
指令: md檢視記憶體命令
md[.b,.w,.l] address [count]
表示以[.b,.w,.l]為單位顯示從地址address開始的記憶體資料,顯示的資料個數為count
例:
md.b 82000000 10顯示從地址0x82000000地址開始的0x10個位元組的資料
返回資訊:
82000000: d3 2c b4 4b 2c d3 4b b4 d3 d3 b4 b4 d3 2c b4 4b .,.K,.K......,.K
指令: mm修改記憶體命令
mm[.b,.w,.l] address
表示以[.b,.w,.l]為單位從地址address開始修改記憶體資料,執行mm命令後,輸入新資料後回車,地址會自動增加,按“CTRL + c”退出;
例: 把第一個位元組資料0xd3修改為0xd4
mm.b 82000000
返回:
82000000: d3 ? d4
82000001: 2c ?
指令: cp複製記憶體命令
cp[.b,.w,.l] source target [count]
表示以[.b,.w,.l]為單位從源地址source的記憶體複製count個數據到 目的地址 target的記憶體中去;
下載的指令
指令: tftp通過網口下載檔案到裝置
tftp address filename 把檔案filename下載到地址address
例:
下載
tftp 0x82000000 u-boot-hi3520d.bin 把TFTP目錄下名為u-boot-hi3520d.bin的檔案拷貝到SDRAM的 82000000 地址
上傳
tftp 0x82000000 flash 2000000 把SDRAM的 82000000 地址開始的 0x2000000(32M)位元組的拷貝到把TFTP目錄下命名為flash(flash名字是否可變)
Flash操作的指令(不同的Flash不同)
指令: eraseFlash擦除命令
erase start end 擦除的範圍為 start – end
erase start+len 擦除的範圍為 start – (start+len-1)
erase all 擦除所有
例:
對於SPI NOR FLASH
sf erase 0 100000 擦除flash 0 - 0x100000 的資料
指令: writeFlash燒寫命令
writeaddr off size將SDRAM的 addr 地址處的 size 位元組的資料燒寫到 flash 的 off 偏移地址
例:
對於SPI NOR FLASH
sf write 82000000 0 100000 把SDRAM地址 0x82000000 處 0x100000(1M位元組)的資料燒寫到 flash 的 0 偏移地址
指令: readFlash讀取命令
readaddr off size從 Flash 的 off 偏移地址處讀取 size 位元組的資料到SDRAM的 addr地址
例:
對於SPI NOR FLASH
sf read 82000000 0 2000000 從 flash 的 0 偏移地址出讀取 0x2000000(32M)位元組的資料到 SDRAM的 82000000 地址
作者:Nothing_655f
連結:https://www.jianshu.com/p/df1d7db37c9f
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。