1.uboot到底是干嘛的
- uboot主要作用是用来启动操作系统内核。
- uboot还要负责部署整个计算机系统。
- uboot中还有操作Flash等板子上硬盘的驱动。
- uboot还得提供一个命令行界面供人来操作。
2.uboot必须解决哪些问题
- 自身可开机直接启动
- 能够引导操作系统内核启动并给内核传参:uboot的终极目标就是启动内核,uboot事先把要传递的参数放在特定的位置,这些参数将被用来指导linux内核的启动过程
- 能提供系统部署功能
-
能进行soc级和板级硬件管理
3.uboot的“生命周期”
- uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核,启动内核命令一旦执行就回不来了。
4.uboot的工作方式
- uboot的本质就是一个裸机程序,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机程序的镜像文件。然后这个镜像文件被合理的烧录到启动介质中拿给SoC去启动
- uboot启动后大部分时间和工作都是在shell下完成的(譬如uboot要部署系统要在shell下输命令、要设置环境变量也得在命令行地下,要启动内核也要在命令行底下敲命令)
- uboot的环境变量和操作系统的环境变量工作原理和方式几乎完全相同,环境变量可以被认为是系统的全局变量,环境变量名都是系统内置的,系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。这样设计的好处就是灵活,譬如我们要让一个程序更改运行方法,不用去重新修改程序代码再重新编译运行,而只要修改相应的环境变量就可以了。
5.uboot的常用命令
- printenv/print:打印、输出
- setenv/set:设置环境变量
- ping:网络测试指令 设置IP命令:Ifconfig eth0 192.168.1.20
- tftp:下载指令 tftp 0x30000000 zImage-qt
- movi:SD卡/iNand操作指令 movi read u-boot 0x30000000,意思就是把iNand中的u-boot分区读出到DDR的0x30000000起始的位置处
- nand:NandFlash操作指令
- mm、mw、md:内存操作指令
- 显示内存中的内容(md)、将内容写到内存中(mv)、写内存(mm)
自动运行倒数时间:bootdelay
- 网络设置:ipaddr serverip
- 自动运行命令设置:bootcmd
- uboot给kernel传参:bootargs
- 新建一个环境变量:set var value
- 更改一个环境变量:set var value
- 删除一个环境变量:set var
6.uboot中对Flash和DDR的管理
- uboot必须从Flash起始地址开始存放,uboot分区的大小必须保证uboot肯定能放下,一般设计为512KB或者1MB
- 环境变量分区一般紧贴着uboot来存放,大小为32KB或者更多一点
- kernel可以紧贴环境变量存放,大小一般为3MB或5MB或其他
- 一般kernel启动后将自由分区挂载到rootfs下使用