• 版本

核心板上电时,Console口首先会输出Uboot的版本号,如:

U-Boot dub-2015.04-r12.1+g5ea79be (May 16 2018 - 12:45:15)

其中dub-2015.04-r12.1就是Digi的UBoot版本号,表明它是基于开源U-Boot v2015.04版本的基础上开发的Digi Uboot版本。注意,UBoot的版本不同平台略有不同,请参考官方文档获取新近的资料。

U-Boot定义了默认的一些参数,比如分区大小,默认的文件系统格式等。当U-Boot版本发生重大变化时,不同版本的U-Boot所支持的参数类型和值可能稍有区别。因此当您手动更新U-Boot之后,建议您恢复参数到默认值再进行其它操作。命令如下:
env default -a
如果您使用卡刷脚本进行固件更新,相关的操作已经包含在脚本中。 注意在DEY 2.4-r2起,U-Boot由dub-2015.04升级为dub-2017.03。使用DEY 2.4-r2之后的镜像,请使用相应的U-Boot版本。建议新用户选择DEY版本,都采用DEY 2.4之后的版本。

  • 接口和启动方式支持

U-Boot一般支持这些接口,Uart Console, DDR和flash闪存(NAND或eMMC),uSD卡,以太网口,I2C, OTP位编程(eFuse),不同的平台所支持的启动方式略有不同,主要有NAND/eMMC/uSD,TFTP,USB(recovery)等方式启动。

  • 闪存分区

低端SOM是工业级NAND,CC6/CC6+/CC8是工业级eMMC闪存,它们的默认分区稍有不同,本文成文较早,没包括双启动和后面的MP系列,请参考相关的文档以获取更详细资料:

NAND常用命令

  • 读设备分区表 mtdparts
  • 查看默认分区配置 printenv mtdparts
  • 重置默认分区配置 mtdparts default
  • 添加删除分区 mtdparts add / del / delall

U-Boot环境变量

U-Boot的环境变量参数可用于配置:串口,RAM/Flash,网口,内核命令,首次启动命令(比如清除用户分区),连接的显示屏配置等。这些参数存放于environment冗余分区以提高可靠性。在U-Boot中可以读取(printenv)和设置(setenv),操作系统也可以访问这些参数,用户还可以设置自定义参数。
常用的环境变量参数如下:

bootcmd uboot启动时自动执行这个参数定义的命令,它用可用于自动或条件加载不同的操作系统
bootdelay在执行bootcmd之前的等待时间
ipaddr 核心板默认IP
serverip 默认的TFTP服务器IP
script 自启动脚本名称
extra_args 默认没有设置值,它可用于传递自定义值给操作系统,比如显示屏配置
ftd_file 指定加载内核分区的设备树文件

设置参数命令用“setenv 环境变量名 值”,并不需要用等号。设置完成要用“saveenv”写入flash中。
以太网口和Wifi/Bluetooth的MAC地址也作为环境变量参数存于flash中,“env default -a”用于恢复所有环境变量为默认值,但对于Mac地址来说,如果你在flash中使用这个命令恢复默认环境变量,出厂就有的MAC地址并不会被清除。在外部存储中用这个命令可以重置MAC地址,但需要用“-f”选项强制写入。

常用U-Boot命令

help 显示U-Boot命令帮助
version 显示U-Boot版本
setenv 设置一个环境变量参数
saveenv 保存环境变量参数到flash,输入两次冗余拷贝
printenv 显示所有环境变量
ping ping某个IP
mtdparts 显示/改变flash分区
update 更新/写入flash分区
updatefile 更新eMMC的FAT分区文件
reset 重启核心板
boot 启动命令
source 从RAM中执行脚本(需先从文件系统中加载脚本到RAM)
文件系统相关命令
ubi part 分区名 选择工作的UBI分区
ubi info 1 读取分区信息
ubifsmount ubi0 加载分区
ubifsls 读取分区内容
ubifsload $loadaddr <filename> [bytes] 加载脚本到RAM
例:ubi part rootfs
ubifsmount ubi0
ubifsls usr/bin
ls mmc 0 FAT或EXT4分区用ls命令列出内容,不需要先加载
pmic 访问PMIC寄存器

在系统启动时,内核分区的boot.scr脚本被执行,其内容不同平台略有不同,如cc6ulsbc:

# U-Boot bootscript for NAND images created by Yocto.
#

#
# Set device tree filename depending on the board ID (if defined)
#
if test -n "${board_id}"; then
        setenv fdt_file zImage-imx6ul-ccimx6ulsbc-id${board_id}.dtb
else
        #
        # Set device tree filename depending on the hardware variant
        #
        if test "${module_variant}" = "0x02" || test "${module_variant}" = "0x04"; then
                setenv fdt_file zImage-imx6ul-ccimx6ulsbc-wb.dtb
        elif test "${module_variant}" = "0x03"; then
                setenv fdt_file zImage-imx6ul-ccimx6ulsbc.dtb
        else
                echo "------ Using default fdt_file: $fdt_file"
        fi
fi

if test "${mtdbootpart}" = "recovery"; then
        setenv boot_initrd true
        setenv initrd_file uramdisk-recovery.img
else
        true
fi
dboot linux nand ${mtdbootpart}

我们可以更改并重新编译一个boot.scr,实际上,也可以直接绕过该脚本,而在u-boot中指定想要加载的设备树文件。

printenv bootcmd

可以看到“bootcmd= if run loadscript; then setexpr bs_ivt_offset ${filesize} - 0x4020;ifhab_auth_img ${loadaddr} ${bs_ivt_offset}; then source ${loadaddr};fi; fi;“

这里加载了boot.scr