什么是Uboot?(Universal Boot Loader)
- Uboot为一个裸机程序,比较复杂。类似于windows X86电脑的BIOS。
- Uboot是一个bootloader,作用就是引导Linux或其他系统的启动,也可以用于系统升级,但常用的系统升级是OTA。Uboot最主要的工作就是初始化DDR,因为Linux是在DDR内运行。Linux系统运行起来有4-5M,而芯片内部的RAM没有这么大,因此放到DDR内运行,不在芯片内运行。一般”Linux镜像中zImage(uImage)+*设备树(.dtb文件)“*存放在SD、EMMC、NAND、SPI FLAHS等外置存储区域。
- 需要将Linux镜像从外置flash拷贝到DDR中,再去进行启动。外置flash的驱动就是由Uboot来做。
简而言之:Uboot就是为系统的启动做准备,将Linux镜像从外置flash到DDR中。
Uboot的获取:
- Uboot官网。缺点就是支持少,比如某一款具体芯片驱动等不完善。
- SOC厂商会从Uboot官网下载某一个版本的Uboot,然后在这个版本的Uboot上加入相应的SOC以及驱动,这就是SOC厂商定制版的Uboot。
- 做开发板的厂商,开发板会参考SOC芯片厂商的板子,开发板必然会和官方的板子不一样,因此开发板厂商又会去修改SOC厂商做好的Uboot,以适应自己的板子。最了解芯片的是芯片厂商,因此很有参考的必要性。
官方Uboot的编译:
- 编译Uboot的时候需要先配置;
- 编译完成后就会生成一个uboot.bin,必须向Uboo.bin添加头部信息。Uboot编译最后会通过/tools/mkimage软件添加头部信息,最终生成uboot.imx。最终烧写到emmc的就是uboot.imx文件。
- 如果配置过Uboot,那么一定要注意shell脚本会清除整个工程,那么配置的文件也会被全部删除,配置项也会删除掉。
- 为了方便开发,建议直接在Uboot顶层makefile里面设置好ARCH和CORSS_COMPILE,这两个变量的值。
Uboot命令的使用
-
printenv-查看当前板子的环境变量。
-
setenv-设置环境变量
#自定义环境变量 setenv autho zhipengtang #再保存,即可pri看到新增了一个环境变量author=zhipengtang #删除环境变量 setenv author #将原有的变量设置为空,即不写入值,再保存,pri可以看到改变了没有了
-
saveenv-保存环境变量
#saveenv是跟在setenv之后的,当setenv设置或者删除环境变量后,在通过saveenv指令保存更改。