uboot开发流程

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

你可能感兴趣的:(uboot开发流程)