目录
uboot是一个裸机程序(bootloader)
作用
要运行linux系统时,如何从外置的flash拷贝到DDR中,才能启动
uboot使用步骤
步骤1中的命令例子
注意
uboot源码获取方法
uboot是一个裸机程序(bootloader)
作用
- 用于启动Linux或其他系统
- 主要工作是初始化DDR(因为Linux是运行在DDR里面的)
- 一般 Linux 镜像 ( zImage / uImage ) + 设备树 ( .dtb ) 存放在SD、EMMC、NAND、SPI FLASH 等等外置存储区域
要运行linux系统时,如何从外置的flash拷贝到DDR中,才能启动
- Uboot提供了flash的读写服务
- Uboot的主要目的就是为系统的启动做准备
- Uboot的宿命就是启动linux后,再把cpu还给linux
- Uboot不仅仅能启动Linux,也可以启动其他系统,比如vxworks
- Linux不仅仅能通过uboot启动
- Uboot是个通用的bootloader,他支持多种架构
uboot使用步骤
先配置,一个板子一个配置文件,然后执行配置文件,就会把uboot配置好,然后再次编译,就可以得到配对这个板子的uboot执行文件(.bin),用bin文件来启动板子,这就是裸机开发,通常是操控寄存器来编程,汇编
- 1.下载uboot源码,在源码根目录下先配置(可以写一个shell脚本来执行清理和编译)
- 1.1清理工程
- 1.2先使用默认配置文件来配置uboot,就会生成一个.config文件,(根据默认配置文件将配置写入.config文件里,编译的时候需要用到.config配置项)
- 1.3使用多少核编译命令
- 1.2先使用默认配置文件来配置uboot,就会生成一个.config文件,(根据默认配置文件将配置写入.config文件里,编译的时候需要用到.config配置项)
- 1.1清理工程
- 2.编译完成以后就会生成一个u-boot.bin。必须向u-boot.bin添加头部信息。Uboot编译最后会通过/tools/mkimage软件添加头部信息,生成u-boot.imx (最后烧到板子上的是imx,可以使用mfg烧录,要将新的imx替换到掉原来的imx,在使用mfg烧录时,会把整个系统也重新烧录进去)
步骤1中的命令例子
- 1.1的命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
- 1.2的命令make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
- 1.3的命令make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
- ARCH是指定架构
- CROSS_COMPILE是指定编译器,只需要前缀
- mx6ull_14x14_ddr512_emmc_defconfig是默认配置文件
- V=1用于设置编译过程输出信息
- -j12使用12核来编译uboot,最好设置成我们虚拟机所设置的核心数
-
注意
- 如果配置过uboot,那么一定要注意shell脚本会清除整个工程,那么配置的文件也会被删除,配置项也会被删除掉
- 为了方便开发,建议直接在uboot顶层Makefile里面设置好ARCH和CORSS_COMPILE这两个变量的值,就可以直接用make -j几核来进行编译
uboot源码获取方法
- 官网下载源码,缺点就是支持少,比如某一款具体芯片驱动等不完善
- SOC厂商会从uboot官网下载某一个版本的uboot,然后在这个版本的uboot上加入相应的SOC以及驱动。这就是SOC厂商定制版的uboot
- 做开发板的厂商,开发板会参考SOC厂商的板子。开发板必然会和官方的板子不一样。因此开发板厂商又会去修改SOC厂商做好的uboot,以适应自己的板子