uboot其實就是一段比較複雜的單片機代碼用來作爲引導程序,它的主要任務是初始化硬件設備,將系統的軟硬件環境帶到一個合適的狀態,再將內核從一種存儲介質讀入到內存中,然後跳到內核的入口點去運行,即操作系統。
uboot有兩種工作模式:啓動模式和下載模式。
uboot啓動過程屬於兩階段stage1(彙編)和stage2(C語言),stage1完成初始化硬件,爲stage2準備內存空間,並將stage2的代碼複製到內存中,設置好堆棧,然後跳到stage2,在stage2中調用內核。
1.uoobt移植(暫時不介紹)
2.編譯生成u-boot.bin文件
以mini2440移植uboot爲例(未經移植的uboot不支持mini2440\)
(1)選擇要使用的board
make mini2440_config
(2)編譯生成u-boot.bin
make CROSS_COMPILE=arm-linux-
3.uboot的使用-基本命令
不同單板所支持的命令不一定會一樣
(1) help 用於查看當前單板所支持的所有命令
(2) printenv 查看環境相關變量
(3) setenv 添加、修改、刪除環境變量
setenv name value 修改或添加變量name
setenv name 刪除變量name
(4) saveenv 保持環境變量,將當前的定義的所有環境變量保存到flash
(5) tftp 通過網絡下載文件(需要先配置網絡)
例:
Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.2.118
Uboot> setenv serverip 192.168.2.1 (tftp服務器的地址)
Uboot> tftp 32000000 uImage (把severip中的服務目錄下的uImage通過tftp讀入到0x32000000)
(6) md 顯示內存區的內容
md採用16進制和ASCII碼兩種形式來顯示存儲單元的惡內容
md可以採用標示符.l(長字),.w(字),.b(字節)
Uboot> md.w 100000 以字的形式顯示在0x100000處的內容
(7) mm 修改內存,地址自動增加
用法 mm [.b,.w,.l] address
mm提供一種互動修改存儲器內容的方法,它會顯示地址和當前的值,然後提示用戶輸入。如果輸入了一個合法的16進制的值將會被寫入該地址,然後提示下一個地址。如果沒有任何輸入值,只是按下回車,那麼該地址的內容保持不變。結束輸入,則輸入空格在回車。
Uboot> mm 100000
(8) flinfo 查看flash扇區信息
(9) protect flash寫保護,打開或關閉扇區寫保護。
用法 protect off|on all 關閉|打開所有扇區的寫保護
protect off|on start end 關閉|打開從start到end扇區的寫保護(start和end是指定扇區的地址)
(10) erase 插除flash扇區
用法 erase start end
在使用cp命令向nor flash寫入數據之前必須要先使用erase命令查除flash,應爲nor flash按字節寫入時,無法寫入1,所以必須通過查除來寫入1。
Uboot> erase 3000 1effff
(11) cp 拷貝數據
用法 cp [.b,.w,.l] sddress daddress len 將內存saddress地址處的數據(長度爲len)拷貝到daddress處
cp提供了一種內存與內存,內存與flash之間數據拷貝的方法
Uboot> cp.b 31000000 50000 d0000
(12) go 執行內存中的二進制代碼
用法 go addr [arg...]
(13) bootm 執行內存中的二進制代碼,要求二進制代碼有固定的頭文件
用法 bootm [addr [arg...] ]
(14) bdinfo (簡寫爲bdi) 顯示開發板信息