向Flash中烧写uboot和linux操做系统

 1、片内启动
一、用Xmodem协议,发送loader.bin和uboot.bin文件,此时uboot.bin被发送到系统的SDRAM中,发送完后uboot开始运行,若是这时断电或退出,则一切将从头开始,由于SDRAM内存储的数据会在断电或退出后消失。
二、擦除 Flash
在对Flash进行烧写以前,须要将其擦除:
Uboot>protect off all         去掉Flash的扇区写保护
Uboot>erase all                擦除Flash的全部扇区
(注:
若是只是要擦除某块区域的Flash,好比0x10000000到0x10060000之间的区域,则可用命令:
1)protect off 10000000 1006ffff
2)erase 10000000 1006ffff
若是是要对某块区域加上写保护,好比0x10000000到0x10060000之间的区域,则可用命令:
1)protect on 10000000 1006ffff
可用flinfo命令来查看那些区域是受保护的,那些区域不是受保护的。
)
三、烧写boot.bin到Flash
在Uboot提示符下键入命令:
Uboot>loadb 21000000 (下完以后会显示boot.bin的大小,而后在后面用命令cp.b烧写时将其后4位变成f,假如文件大小为5e33a,则在烧写时将其变为5ffff)   将文件发送到系统的SDRAM中
而后在超级终端使用Kermit协议,发送文件boot.bin,发送完毕后,键入如下命令:
Uboot>cp.b 21000000 10000000 5ffff     将发送到SDRAM中的数据写入Flash
Uboot>protect on 10000000 10005ffff    对写入Flash的内容进行写保护
(注:
此处还能够用tftp或bootp协议来完成,不过要先设置网络变量,即设置本机和目标机的IP地址,还有目标机的Mac地址。
网络环境变量:
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 
console=ttyS0,115200,mem=32M                       启动系统环境变量
Uboot>setenv ethaddr 12:34:56:78:99:aa             mac 地址
Uboot>setenv ipaddr [目标板 ip 地址]                 目标板 ip 地址
Uboot>setenv serverip [主机 ip 地址]                 主机 ip 地址
tftp协议:
1)tftp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000 10005fff
bootp协议:
1)bootp 21000000 lb/boot.bin
2)cp.b 21000000 10000000 5ffff
3)protect on 10000000 10005fff
)
四、烧写 Uboot.gz 到 Flash
在Uboot提示符下键入命令:装入Uboot.gz
Uboot>loadb 20000000                  将文件发送到系统的SDRAM中
而后在超级终端使用Kermit协议,发送文件Uboot.gz,发送完毕后,键入如下命令:
Uboot>cp.b 20000000 10010000 ffff     将发送到SDRAM中的数据写入Flash
Uboot>protect on 10000000 1001ffff    对写入Flash的内容进行写保护
(注:此处也能够用tftp或bootp协议)

2、片外启动
一)如何在uboot内运行本身的程序
一、手动运行(只是将程序下载到SDRAM中运行,仅作测试之用,断电或退出后就会消失)
1)loadb 20000000      下载用户程序(*.bin) <注:必须是.bin文件,可用arm-linux-objcopy命令生成> 
2)go 20000000         程序就会运行
二、自动运行(将程序写入Flash,uboot启动以后程序自动运行)
1)设置环境变量 
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以后程序就会自动运行
2、烧写linux
一、下载linux到系统的SDRAM运行(仅作测试之用,断电或退出后就会消失)
1)运行Uboot,设置环境变量
Uboot>setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360
console=ttyS0,115200,mem=32M                       启动系统环境变量
Uboot>setenv ethaddr 12:34:56:78:99:aa             mac 地址
Uboot>setenv ipaddr [目标板 ip 地址]                 目标板 ip 地址
Uboot>setenv serverip [主机 ip 地址]                 主机 ip 地址
2)下载linux内核,文件系统
打开tftpserver应用程序,设置根目录路径,将内核、文件系统等拷贝到所设置的根目录下。
Uboot>tftp 21100000 ramdisk.gz                     下载文件系统
Uboot>tftp 21000000 uImage                         下载 linux 内核
Uboot>bootm 21000000                               启动 linux
而后linux操做系统就开始运行。
二、烧写 Linux 到系统的 Flash 运行
1)设置运行Linux的环境变量
Uboot> setenv bootargs root=/dev/ram rw initrd=0x21100000,6000000 ramdisk_size=15360 console=ttyS0,115200,mem=32M        启动系统环境变量
Uboot>setenv p_w_picpath cp.b 10020000 21000000 b0000       拷贝内核到sdram
Uboot>setenv ramdisk cp.b 100d0000 21100000 226000    拷贝文件系统到sdram
Uboot>setenv boot bootm                               设置变量boot
Uboot>setenv bootcmd run ramdisk\;run p_w_picpath\;run boot    设置默认变量bootcmd
Uboot>setenv ethaddr 12:34:56:78:99:aa                   mac 地址
Uboot>setenv ipaddr 目标板 ip 地址                            目标板 ip 地址,由你本身决定
Uboot>setenv serverip 主机ip地址                             主机ip地址,就是你的PC的ip
Uboot>saveenv                                            保存环境变量
2)烧写Linux内核到Flash
Uboot>tftp 21100000 ramdisk.gz
Uboot>cp.b 21100000 100d0000 226000
Uboot>tftp 21000000 uImage
Uboot>cp.b 21000000 10020000 b0000
reset之linux操做系统就开始运行。linux