====DEY中的U-Boot命令和系统启动过程==== * 版本 核心板上电时,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系列**,请参考相关的文档以获取更详细资料: * [[#cc6ul-partition|ConnectCore 6UL]] * [[#cc6-partition|ConnectCore 6]] * [[#cc8x-partition|ConnectCore 8,9系列]] {{digi:arm-embedded:linux:dey:cc6ul-nand.png?500|}} {{digi:arm-embedded:linux:dey:cc6-emmc-partition.png?500|}} ===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 [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