向Flash中燒寫uboot和linux操作系統(tǒng)
2011年03月28日
向Flash中燒寫uboot和linux操作系統(tǒng)
================================================================================
from:http://www.diybl.com/course/6_system/linux/Linuxjs/20090428/165769.html
一、片內(nèi)啟動(dòng)
1、用Xmodem協(xié)議,發(fā)送loader.bin和uboot.bin文件,此時(shí)uboot.bin被發(fā)送到系統(tǒng)的
SDRAM中,發(fā)送完后uboot開始運(yùn)行,如果這時(shí)斷電或退出,則一切將從頭開始,因?yàn)镾DRAM內(nèi)存儲(chǔ)的數(shù)據(jù)會(huì)在斷電或退出后消失
2、擦除 Flash
在對(duì)Flash進(jìn)行燒寫之前,需要將其擦除:
Uboot>protect off all 去掉Flash的扇區(qū)寫保護(hù)
Uboot>erase all 擦除Flash的所有扇區(qū)
(注:
如果只是要擦除某塊區(qū)域的Flash,比如0x10000000到0x10060000之間的區(qū)域,則可用命令:
1)protect off 10000000
2)erase 10000000 1006ffff
如果是要對(duì)某塊區(qū)域加上寫保護(hù),比如0x10000000到0x10060000之間的區(qū)域,則可用命令:
1)protect on 10000000 1006ffff
可用flinfo命令來查看那些區(qū)域是受保護(hù)的,那些區(qū)域不是受保護(hù)的。
3、燒寫boot.bin到Flash
在Uboot提示符下鍵入命令:
Uboot>loadb 21000000
(下完之后會(huì)顯示boot.bin的大小,然后在后面用命令cp.b燒寫時(shí)將其后4位變成f,假如文件大小為5e33a,則在燒寫時(shí)將其變?yōu)?ffff) 將文件發(fā)送到系統(tǒng)的SDRAM中然后在超級(jí)終端使用Kermit協(xié)議,發(fā)送文件boot.bin,發(fā)送完畢后,鍵入以下命令:
Uboot>cp.b 21000000 10000000 5ffff 將發(fā)送到SDRAM中的數(shù)據(jù)寫入Flash
Uboot>protect on 10000000 10005ffff 對(duì)寫入Flash的內(nèi)容進(jìn)行寫保護(hù)
注:
此處還可以用tftp或bootp協(xié)議來完成,不過要先設(shè)置網(wǎng)絡(luò)變量,即設(shè)置本機(jī)和目標(biāo)機(jī)的IP地址,還有目標(biāo)機(jī)的Mac地址。
網(wǎng)絡(luò)環(huán)境變量:
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000
ramdisk_size=15360
console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目標(biāo)板 ip 地址] 目標(biāo)板 ip 地址
Uboot>setenv serverip [主機(jī) ip 地址] 主機(jī) ip 地址
tftp協(xié)議:
1)tftp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000
bootp協(xié)議:
1)bootp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000 10005fff
4、燒寫 Uboot.gz 到 Flash
在Uboot提示符下鍵入命令:裝入U(xiǎn)boot.gz6
Uboot>loadb 20000000 將文件發(fā)送到系統(tǒng)的SDRAM中.
然后在超級(jí)終端使用Kermit協(xié)議,發(fā)送文件Uboot.gz,發(fā)送完畢后,鍵入以下命令:
Uboot>cp.b 20000000 10010000 ffff 將發(fā)送到SDRAM中的數(shù)據(jù)寫入Flash
Uboot>protect on 10000000 1001ffff 對(duì)寫入Flash的內(nèi)容進(jìn)行寫保護(hù)
(注:此處也可以用tftp或bootp協(xié)議)
二、片外啟動(dòng)
如何在uboot內(nèi)運(yùn)行自己的程序
1、手動(dòng)運(yùn)行(只是將程序下載到SDRAM中運(yùn)行,僅做測(cè)試之用,斷電或退出后就會(huì)消失)
1)loadb 20000000 下載用戶程序(*.bin)
2)go 20000000 程序就會(huì)運(yùn)行
2、自動(dòng)運(yùn)行(將程序?qū)懭隖lash,uboot啟動(dòng)之后程序自動(dòng)運(yùn)行
1)設(shè)置環(huán)境變量
Uboot>setenv usr_prg cp.b 10300000 20000000 ffff(程序的大?。?br> Uboot>setenv run_prg go 20000000
Uboot>setenv bootcmd run usr_prg\;run run_prg
Uboot>saveenv
2)寫入程序,即將其燒入Flash
protect off all
erase 10300000 103fffff
loadb 20000000 下載*.bin
cp.b 20000000 10300000 ffff(用戶程序的大小)
3)reset之后程序就會(huì)自動(dòng)運(yùn)行"T1X$m
二、燒寫linux程序開
1、下載linux到系統(tǒng)的SDRAM運(yùn)行(僅做測(cè)試之用,斷電或退出后就會(huì)消失)程
1)運(yùn)行Uboot,設(shè)置環(huán)境變量
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000
ramdisk_size=15360
console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目標(biāo)板 ip 地址] 目標(biāo)板 ip 地址
Uboot>setenv serverip [主機(jī) ip 地址] 主機(jī) ip 地址
2)下載linux內(nèi)核,文件系統(tǒng)
打開tftpserver應(yīng)用程序,設(shè)置根目錄路徑,將內(nèi)核、文件系統(tǒng)等拷貝到所設(shè)置的根目錄下。
Uboot>tftp 21100000 ramdisk.gz 下載文件系統(tǒng)
Uboot>tftp 21000000 uImage 下載 linux 內(nèi)核
Uboot>bootm 21000000 啟動(dòng) linux
然后linux操作系統(tǒng)就開始運(yùn)行。
2、燒寫 Linux 到系統(tǒng)的 Flash 運(yùn)行
1)設(shè)置運(yùn)行Linux的環(huán)境變量
Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000
ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝內(nèi)核到sdram
Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝文件系統(tǒng)到sdram
Uboot>setenv boot bootm 設(shè)置變量
Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設(shè)置默認(rèn)變量bootcmd
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr 目標(biāo)板 ip 地址 目標(biāo)板 ip 地址,由你自己決定
Uboot>setenv serverip 主機(jī)ip地址 主機(jī)ip地址,就是你的PC的ip程序開
Uboot>saveenv 保存環(huán)境變量
2)燒寫Linux內(nèi)核到Flash
Uboot>tftp 21100000 ramdisk.gz
Uboot>cp.b 21100000 100d0000 226000
Uboot>tftp 21000000 uImage
Uboot>cp.b 21000000 10020000 b0000
reset之linux操作系統(tǒng)就開始運(yùn)行。
================================================================================
================================================================================
from: http://www.91linux.com/html/article/qianrushiyingyong/20081227/15061.html
u-boot命令介紹及燒寫程序?qū)嵗?br> bootdelay
定義執(zhí)行自動(dòng)啟動(dòng)的等候秒數(shù)
baudrate
定義串口控制臺(tái)的波特率
netmask
定義以太網(wǎng)接口的掩碼
ethaddr
定義以太網(wǎng)接口的MAC地址
bootfile
定義缺省的下載文件
bootargs
定義傳遞給Linux內(nèi)核的命令行參數(shù)
bootcmd
定義自動(dòng)啟動(dòng)時(shí)執(zhí)行的幾條命令
serverip
定義tftp服務(wù)器端的IP地址
ipaddr
定義本地的IP地址
stdin
定義標(biāo)準(zhǔn)輸入設(shè)備,一般是串口
stdout
定義標(biāo)準(zhǔn)輸出設(shè)備,一般是串口
stderr
定義標(biāo)準(zhǔn)出錯(cuò)信息輸出設(shè)備,一般是串口
u-boot命令介紹及燒寫程序?qū)嵗齴z
Printenv 打印環(huán)境變量。
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes
Setenv 設(shè)置新的變量
Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes
Saveenv 保存變量
命令將當(dāng)前定義的所有的變量及其值存入flash中。用來存儲(chǔ)變量及其值的空間只有8k字節(jié),應(yīng)不要超過。
Loadb 通過串口Kermit協(xié)議下載二進(jìn)制數(shù)據(jù)。
Tftp 通過網(wǎng)絡(luò)下載程序,需要先設(shè)置好網(wǎng)絡(luò)配置
Uboot> setenv ipaddr 192.168.0.1
Uboot> setenv serverip 192.168.1.115 (tftp服務(wù)器的地址)
下載bin文件到地址0x20000000處。
Uboot> tftp 20000000 u-bo.bin (u-boot.bin應(yīng)位于tftp服務(wù)程序的目錄)
Uboot> tftp 32000000 vmlinux
把server(IP=環(huán)境變量中設(shè)置的serverip)中/tftpdroot/ 下的vmlinux通過TFTP讀入到物理內(nèi)存32000000處。
Md 顯示內(nèi)存區(qū)的內(nèi)容。
Mm 修改內(nèi)存,地址自動(dòng)遞增。
Nm 修改內(nèi)存,地址不自動(dòng)遞增。
Mw 用模型填充內(nèi)存
mw 32000000 ff 10000(把內(nèi)存0x32000000開始的0x10000字節(jié)設(shè)為0xFF)
Cp 拷貝一塊內(nèi)存到另一塊
Cmp 比較兩塊內(nèi)存區(qū)
這些內(nèi)存操作命令后都可加一個(gè)后綴表示操作數(shù)據(jù)的大小,比如cp.b表示按字節(jié)拷貝。
Protect 寫保護(hù)操作
protect on 1:0-3(就是對(duì)第一塊FLASH的0-3扇區(qū)進(jìn)行保護(hù))
protect off 1:0-3取消寫保護(hù)
Erase 擦除扇區(qū)。
erase: 刪除FLASH的扇區(qū)
erase 1:0-2(就是對(duì)每一塊FLASH的0-2扇區(qū)進(jìn)行刪除)
對(duì)DataFlash的操作
U-Boot在引導(dǎo)時(shí)如果發(fā)現(xiàn)NPCS0和NPCS3上連有DataFlash,就會(huì)分配虛擬的地址給它,具體為 :
0xC0000000---NPCS0
0xD0000000---NPCS3
run 執(zhí)行設(shè)置好的腳本
Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit
bootcmd 保留的環(huán)境變量,也是一種腳本
如果定義了該變量,在autoboot模式下,將會(huì)執(zhí)行該腳本的內(nèi)容。
Go 執(zhí)行內(nèi)存中的二進(jìn)制代碼,一個(gè)簡(jiǎn)單的跳轉(zhuǎn)到指定地址
Bootm 執(zhí)行內(nèi)存中的二進(jìn)制代碼
要求二進(jìn)制代碼為制定格式的。通常為mkimage處理過的二進(jìn)制文件。
起動(dòng)UBOOT TOOLS制作的壓縮LINUX內(nèi)核, bootm 3200000
Bootp 通過網(wǎng)絡(luò)啟動(dòng),需要提前設(shè)置好硬件地址。
??? 得到所有命令列表
help help usb, 列出USB功能的使用說明
ping 注:只能開發(fā)板PING別的機(jī)器
usb
usb start: 起動(dòng)usb 功能
usb info: 列出設(shè)備
usb scan: 掃描usb storage(u 盤)設(shè)備
kgo 起動(dòng)沒有壓縮的linux內(nèi)核
kgo 32000000
fatls 列出DOS FAT文件系統(tǒng)
fatls usb 0列出第一塊U盤中的文件
fatload 讀入FAT中的一個(gè)文件
fatload usb 0:
0 32000000
u-boot.bin 把USB中的u-boot.bin 讀到物理內(nèi)存0x32000000處!
flinfo 列出flash的信息
nfs
nfs 32000000 192.168.0.115:u-boot.bin
把192.168.0.115(LINUX 的NFS文件系統(tǒng))中的NFS文件系統(tǒng)中的u-boot.bin讀入內(nèi)存0x32000000處。
例:通過串口更新u-boot程序
[
u-boot@wpf
]# loadb
## Ready for binary (kermit) download to 0x33000000 at 115200 bps...
loadb這個(gè)指令以kermit協(xié)議從串口下載二進(jìn)制文件到開發(fā)板的內(nèi)存中,默認(rèn)下載到0x33000000。當(dāng)然你可以改在別的地址,例如:loadb 30000000
就是下載到0x30000000。這時(shí)候選擇超級(jí)終端菜單上:傳送〉發(fā)送文件,文件名選擇編譯好的U-Boot.bin,協(xié)議選擇Kermit,點(diǎn)發(fā)送??梢钥吹桨l(fā)
送進(jìn)度。
發(fā)送結(jié)束出現(xiàn)提示:
## Total Size = 0x0001d73c = 120636 Bytes
## Start Addr = 0x33000000
這時(shí)可以測(cè)試新的修改好不好使:
[
u-boot@wpf
]# go 33000000
## Starting application at 0x33000000 ...
go指令可以直接執(zhí)行內(nèi)存地址上的程序,
然后燒寫在NOR Flash中的U-boot。先看看NOR Flash的情況:
[
u-boot@wpf
]# flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
Size: 1 MB in 19 Sectors
Sector Start Addresses:
00000000 (RO) 00004000 (RO) 00006000 (RO) 00008000 (RO) 00010000 (RO)
00020000 00030000 00040000 00050000 00060000
00070000 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 (RO)
一共有19個(gè)sector,其中前5個(gè)總計(jì)128kb的sector有U-Boot程序。要燒寫首先要去掉寫保護(hù):
[
u-boot@wpf
]# protect off 0 1ffff
[
u-boot@wpf
]# flinfo
Bank # 1: AMD: 1x Amd29LV800BB (8Mbit)
Size: 1 MB in 19 Sectors
Sector Start Addresses:
00000000 00004000 00006000 00008000 00010000
00020000 00030000 00040000 00050000 00060000
00070000 00080000 00090000 000A0000 000B0000
000C0000 000D0000 000E0000 000F0000 (RO)
可以看到寫保護(hù)已經(jīng)去掉,然后擦除:
[
u-boot@wpf
]# erase 0 1ffff
Erasing sector 0 ... ok.
Erasing sector 1 ... ok.
Erasing sector 2 ... ok.
Erasing sector 3 ... ok.
Erasing sector 4 ... ok.
Erased 5 sectors
燒寫:(33000000下載地址 0 Nor起始地址 1d73c 文件長(zhǎng)度)
[
u-boot@wpf
]# cp.b 33000000 0 1d73c
Copy to Flash... done
重啟開發(fā)板,U-Boot的燒寫就完成了。當(dāng)然,一個(gè)更好的下載方法是利用tftp命令
http://hi.baidu.com/vcmfc_linux/blog/item/9d07dfef11001c36acafd5d0.html
================================================================================
================================================================================
from: http://www.ubuntuchina.com/viewthread.php?tid=3492
uboot 下載內(nèi)核和文件系統(tǒng)的步驟http://hi.baidu.com/xuhailong330 ... aa9bdc8d1029ab.html
1)下載linux到系統(tǒng)的SDRAM運(yùn)行(僅做測(cè)試之用,斷電或退出后就會(huì)消失)
1>運(yùn)行Uboot,設(shè)置環(huán)境變量
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目標(biāo)板 ip 地址] 目標(biāo)板 ip 地址
Uboot>setenv serverip [主機(jī) ip 地址] 主機(jī) ip 地址
2>下載linux內(nèi)核,文件系統(tǒng)
打開tftpserver應(yīng)用程序,設(shè)置根目錄路徑,將內(nèi)核、文件系統(tǒng)等拷貝到所設(shè)置的根目錄下。
Uboot>tftp 21100000 ramdisk.gz 下載文件系統(tǒng)
Uboot>tftp 21000000 uImage 下載 linux 內(nèi)核
Uboot>bootm 21000000 啟動(dòng) linux
然后linux操作系統(tǒng)就開始運(yùn)行。
2)燒寫 Linux 到系統(tǒng)的 Flash 運(yùn)行
1>設(shè)置運(yùn)行Linux的環(huán)境變量
Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝內(nèi)核到sdram
Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝文件系統(tǒng)到sdram
Uboot>setenv boot bootm 設(shè)置變量boot
Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設(shè)置默認(rèn)變量bootcmd
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr 目標(biāo)板 ip 地址 目標(biāo)板 ip 地址,由你自己決定
Uboot>setenv serverip 主機(jī)ip地址 主機(jī)ip地址,就是你的PC的ip
Uboot>saveenv 保存環(huán)境變量
2>燒寫Linux內(nèi)核到Flash
Uboot>tftp 21100000 ramdisk.gz
Uboot>cp.b 21100000 100d0000 226000
Uboot>tftp 21000000 uImage
Uboot>cp.b 21000000 10020000 b0000
reset之linux操作系統(tǒng)就開始運(yùn)行。
一、片內(nèi)啟動(dòng)
1、用Xmodem協(xié)議,發(fā)送loader.bin和uboot.bin文件,此時(shí)uboot.bin被發(fā)送到系統(tǒng)的SDRAM中,發(fā)送完后uboot開始運(yùn)行,如果這時(shí)斷電或退出,則一切將從頭開始,因?yàn)镾DRAM內(nèi)存儲(chǔ)的數(shù)據(jù)會(huì)在斷電或退出后消失。
2、擦除 Flash
在對(duì)Flash進(jìn)行燒寫之前,需要將其擦除:
Uboot>protect off all 去掉Flash的扇區(qū)寫保護(hù)
Uboot>erase all 擦除Flash的所有扇區(qū)
(注:
如果只是要擦除某塊區(qū)域的Flash,比如0x10000000到0x10060000之間的區(qū)域,則可用命令:
1)protect off 10000000 1006ffff
2)erase 10000000 1006ffff
如果是要對(duì)某塊區(qū)域加上寫保護(hù),比如0x10000000到0x10060000之間的區(qū)域,則可用命令:
1)protect on 10000000 1006ffff
可用flinfo命令來查看那些區(qū)域是受保護(hù)的,那些區(qū)域不是受保護(hù)的。
)
3、燒寫boot.bin到Flash
在Uboot提示符下鍵入命令:
Uboot>loadb 21000000 (下完之后會(huì)顯示boot.bin的大小,然后在后面用命令cp.b燒寫時(shí)將其后4位變成f,假如文件大小為5e33a,則在燒寫時(shí)將其變?yōu)?ffff) 將文件發(fā)送到系統(tǒng)的SDRAM中
然后在超級(jí)終端使用Kermit協(xié)議,發(fā)送文件boot.bin,發(fā)送完畢后,鍵入以下命令:
Uboot>cp.b 21000000 10000000 5ffff 將發(fā)送到SDRAM中的數(shù)據(jù)寫入Flash
Uboot>protect on 10000000 10005ffff 對(duì)寫入Flash的內(nèi)容進(jìn)行寫保護(hù)
(注:
此處還可以用tftp或bootp協(xié)議來完成,不過要先設(shè)置網(wǎng)絡(luò)變量,即設(shè)置本機(jī)和目標(biāo)機(jī)的IP地址,還有目標(biāo)機(jī)的Mac地址。
網(wǎng)絡(luò)環(huán)境變量:
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目標(biāo)板 ip 地址] 目標(biāo)板 ip 地址
Uboot>setenv serverip [主機(jī) ip 地址] 主機(jī) ip 地址
tftp協(xié)議:
1)tftp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000 10005fff
bootp協(xié)議:
1)bootp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000 10005fff
)
4、燒寫 Uboot.gz 到 Flash
在Uboot提示符下鍵入命令:裝入U(xiǎn)boot.gz
Uboot>loadb 20000000 將文件發(fā)送到系統(tǒng)的SDRAM中
然后在超級(jí)終端使用Kermit協(xié)議,發(fā)送文件Uboot.gz,發(fā)送完畢后,鍵入以下命令:
Uboot>cp.b 20000000 10010000 ffff 將發(fā)送到SDRAM中的數(shù)據(jù)寫入Flash
Uboot>protect on 10000000 1001ffff 對(duì)寫入Flash的內(nèi)容進(jìn)行寫保護(hù)
(注:此處也可以用tftp或bootp協(xié)議)
二、片外啟動(dòng)
一)如何在uboot內(nèi)運(yùn)行自己的程序
1、手動(dòng)運(yùn)行(只是將程序下載到SDRAM中運(yùn)行,僅做測(cè)試之用,斷電或退出后就會(huì)消失)
1)loadb 20000000 下載用戶程序(*.bin)
2)go 20000000 程序就會(huì)運(yùn)行
2、自動(dòng)運(yùn)行(將程序?qū)懭隖lash,uboot啟動(dòng)之后程序自動(dòng)運(yùn)行)
1)設(shè)置環(huán)境變量
Uboot>setenv usr_prg cp.b 10300000 20000000 ffff(程序的大?。?
Uboot>setenv run_prg go 20000000
Uboot>setenv bootcmd run usr_prg\;run run_prg
Uboot>saveenv
2)寫入程序,即將其燒入Flash
protect off all
erase 10300000 103fffff
loadb 20000000 下載*.bin
cp.b 20000000 10300000 ffff(用戶程序的大?。?
3)reset之后程序就會(huì)自動(dòng)運(yùn)行
二、燒寫linux
1、下載linux到系統(tǒng)的SDRAM運(yùn)行(僅做測(cè)試之用,斷電或退出后就會(huì)消失)
1)運(yùn)行Uboot,設(shè)置環(huán)境變量
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr [目標(biāo)板 ip 地址] 目標(biāo)板 ip 地址
Uboot>setenv serverip [主機(jī) ip 地址] 主機(jī) ip 地址
2)下載linux內(nèi)核,文件系統(tǒng)
打開tftpserver應(yīng)用程序,設(shè)置根目錄路徑,將內(nèi)核、文件系統(tǒng)等拷貝到所設(shè)置的根目錄下。
Uboot>tftp 21100000 ramdisk.gz 下載文件系統(tǒng)
Uboot>tftp 21000000 uImage 下載 linux 內(nèi)核
Uboot>bootm 21000000 啟動(dòng) linux
然后linux操作系統(tǒng)就開始運(yùn)行。
2、燒寫 Linux 到系統(tǒng)的 Flash 運(yùn)行
1)設(shè)置運(yùn)行Linux的環(huán)境變量
Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M 啟動(dòng)系統(tǒng)環(huán)境變量
Uboot>setenv image cp.b 10020000 21000000 b0000 拷貝內(nèi)核到sdram
Uboot>setenv ramdisk cp.b 100d0000 21100000 226000 拷貝文件系統(tǒng)到sdram
Uboot>setenv boot bootm 設(shè)置變量boot
Uboot>setenv bootcmd run ramdisk\;run image\;run boot 設(shè)置默認(rèn)變量bootcmd
Uboot>setenv ethaddr 12:34:56:78:99:aa mac 地址
Uboot>setenv ipaddr 目標(biāo)板 ip 地址 目標(biāo)板 ip 地址,由你自己決定
Uboot>setenv serverip 主機(jī)ip地址 主機(jī)ip地址,就是你的PC的ip
Uboot>saveenv 保存環(huán)境變量
2)燒寫Linux內(nèi)核到Flash
Uboot>tftp 21100000 ramdisk.gz
Uboot>cp.b 21100000 100d0000 226000
Uboot>tftp 21000000 uImage
Uboot>cp.b 21000000 10020000 b0000
reset之linux操作系統(tǒng)就開始運(yùn)行。
================================================================================
================================================================================
from: http://blog.21ic.com/user1/5165/archives/2008/50377.html
u-boot命令解釋
lanxch 發(fā)表于 2008-9-4 13:42:00
0
推薦
U-Boot上電啟動(dòng)后,敲任意鍵能夠退出自動(dòng)啟動(dòng)狀態(tài),進(jìn)入命令行。
U-Boot 1.1.2 (Apr 26 2005 - 12:27:13)
U-Boot code: 11080000 -> 1109614C BSS: -> 1109A91C
RAM Configuration:
Bank #0:
10000000 32
MB
Micron StrataFlash MT28F128J3 device initialized
Flash: 32 MB
In: serial
Out: serial
Err: serial
Hit any key to stop autoboot: 0
U-Boot>
在命令行提示符下,能夠輸入U(xiǎn)-Boot的命令并執(zhí)行。U-Boot能夠支持幾十個(gè)常用命令,通過這些命令,能夠?qū)ρ邪l(fā)板進(jìn)行調(diào)試,能夠引導(dǎo)Linux內(nèi)核,還能夠擦寫Flash完成系統(tǒng)部署等功能。掌控這些命令的使用,才能夠順利地進(jìn)行嵌入式系統(tǒng)的研發(fā)。
輸入help命令,能夠得到當(dāng)前U-Boot的任何命令列表。每一條命令后面是簡(jiǎn)單的命令說明。
=> help
- alias for 'help'
autoscr - run from memory
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootm - boot application image from memory
bootp - boot image via network using BootP/TFTP protocol
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
dhcp - invoke DHCP client to obtain IP/boot params
echo - echo args to console
erase - erase FLASH memory
flinfo - print FLASH memory information
go - start application at address 'addr'
help - print online help
iminfo - print header information for application image
imls - list all images found in flash
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loop - infinite loop on address range
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
printenv - print environment variables
protect - enable or disable FLASH write protection
rarpboot - boot image via network using RARP/TFTP protocol
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
sleep - delay execution for some time
tftpboot - boot image via network using TFTP protocol
version - print monitor version
=>
U-Boot還提供了更加周詳?shù)拿顜椭?,通過help命令還能夠查看每個(gè)命令的參數(shù)說明。由于研發(fā)過程的需要,有必要先把U-Boot命令的用法弄清楚。接下來,根據(jù)每一條命令的幫助信息,解釋一下這些命令的功能和參數(shù)。
=> help bootm
bootm [addr [arg ...]]
- boot application image stored in memory
passing arguments 'arg ...'; when booting a Linux kernel,
'arg' can be the address of an initrd image
bootm命令能夠引導(dǎo)啟動(dòng)存儲(chǔ)在內(nèi)存中的程式映像。這些內(nèi)存包括RAM和能夠永久保存的Flash。
第1個(gè)參數(shù)addr是程式映像的地址,這個(gè)程式映像必須轉(zhuǎn)換成U-Boot的格式。
第2個(gè)參數(shù)對(duì)于引導(dǎo)Linux內(nèi)核有用,通常作為U-Boot格式的RAMDISK映像存儲(chǔ)地址;也能夠是傳遞給Linux內(nèi)核的參數(shù)(缺省情況下傳遞bootargs環(huán)境變量給內(nèi)核)。
=> help bootp
bootp [loadAddress] [bootfilename]
bootp命令通過bootp請(qǐng)求,需要DHCP服務(wù)器分配IP地址,然后通過TFTP協(xié)議下載指定的文檔到內(nèi)存。
第1個(gè)參數(shù)是下載文檔存放的內(nèi)存地址。
第2個(gè)參數(shù)是要下載的文檔名稱,這個(gè)文檔應(yīng)該在研發(fā)主機(jī)上準(zhǔn)備好。
=> help cmp
cmp [.b, .w, .l] addr1 addr2 count
- compare memory
cmp命令能夠比較2塊內(nèi)存中的內(nèi)容。.b以字節(jié)為單位;.w以字為單位;.l以長(zhǎng)字為單位。注意:cmp.b中間不能保留空格,需要連續(xù)敲入命令。
第1個(gè)參數(shù)addr1是第一塊內(nèi)存的起始地址。
第2個(gè)參數(shù)addr2是第二塊內(nèi)存的起始地址。
第3個(gè)參數(shù)count是要比較的數(shù)目,單位按照字節(jié)、字或長(zhǎng)字。
=> help cp
cp [.b, .w, .l] source target count
- copy memory
cp命令能夠在內(nèi)存中復(fù)制數(shù)據(jù)塊,包括對(duì)Flash的讀寫操作。
第1個(gè)參數(shù)source是要復(fù)制的數(shù)據(jù)塊起始地址。
第2個(gè)參數(shù)target是數(shù)據(jù)塊要復(fù)制到的地址。這個(gè)地址假如在Flash中,那么會(huì)直接調(diào)用寫Flash的函數(shù)操作。所以U-Boot寫Flash就使用這個(gè)命令,當(dāng)然需要先把對(duì)應(yīng)Flash區(qū)域擦干凈。
第3個(gè)參數(shù)count是要復(fù)制的數(shù)目,根據(jù)cp.b cp.w cp.l分別以字節(jié)、字、長(zhǎng)字為單位。
=> help crc32
crc32 address count [addr]
- compute CRC32 checksum [save at addr]
crc32命令能夠計(jì)算存儲(chǔ)數(shù)據(jù)的校驗(yàn)和。
第1個(gè)參數(shù)address是需要校驗(yàn)的數(shù)據(jù)起始地址。
第2個(gè)參數(shù)count是要校驗(yàn)的數(shù)據(jù)字節(jié)數(shù)。
第3個(gè)參數(shù)addr用來指定保存結(jié)果的地址。
=> help echo
echo [args..]
- echo args to console; \c suppresses newline
echo命令回顯參數(shù)。
=> help 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
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。