Linux系统移植①:uboot概念
Linux系统移植①:uboot概念
uboot概念
1、uboot是一个比较复杂的裸机程序。
2、uboot就是一个bootloader,作用就是用原于启动Linux或其他系统。uboot最主要的工作就是初始化DDR。因为Linux是运行再DDR里面的。一般Linux镜像zImage(uImage)+设备树(.dtb)存放在SD、EMMC、NAND、SPI Flash等等外置存储区域。
这就牵扯到一个问题,需要将Linux镜像从外置flash拷贝到DDR中,再去启动。
3、bootloader是引导加载程序,其中最常用的一种就是uboot。
4、uboot的主要目的就是为系统的启动做准备。
5、uboot不仅能启动Linux,也可以启动其他系统,比如vxworks等其他系统。
6、 Linux不仅仅能通过uboot启动。
7、uboot是个通用的bootloader,它支持多种架构。
uboot获取:
1、官网可获取uboot源码:https://ftp.denx.de/pub/u-boot/
(缺点就是支持少,比如某一款具体的芯片驱动等不够完善。)
2、SOC厂商会从uboot官网下载某个版本的uboot,然后在这个版本的uboot上加入相应的SOC以及驱动。这种成为SOC厂商定制的uboot-比如NXP官方的I.MAX6ULL EVK板子。
3、做开发板的厂商,开发板会参考SOC厂商的板子。开发板必然会和官方的板子不一样,因此开发板厂商又会去修改SOC厂商做好的uboot,以适应自己的板子。
uboot交叉编译
1、编译uboot之前需要先进行配置
如图配置交叉编译指定平台为arm 和交叉编译工具链arm-linux-gnueabihf-, 最后指定配置文件为mx6ull_14x14_ddr512_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
配置完环境以后,再进行内核编译
其中V=1代表开启编译打印等级,可通过串口日志查看详细编译过程
ARCH为指定编译平台为arm平台
CROSS_COMPILE为指定交叉编译工具链
-j4为采用多线程编译方式,提高编译效率
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
若编译报错如下,则可能是Ubuntu版本过高导致,最好用Ubuntu16.04版本
正常编译结果如下:
编译完成后会生成u-boot.bin文件
必须向u-boot.bin添加头部信息。
uboot编译最后会通过/tools/mkinage软件添加头部信息,生成u-boot.imx文件
使用厂商提供的OTG工具进行烧写
烧写完成以后,重新启动,串口结果如下:
查看uboot信息发现已经被更新: