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) 显示开发板信息