高级会员
- 积分
- 813
- 金钱
- 813
- 注册时间
- 2021-2-26
- 在线时间
- 117 小时
|
前面我们已经把系统启动起来了,并且A/B的切换也没问题了。那今天我们就要让系统自动根据A/B来启动系统,不需要再手动干预。
为此,我们需要在uboot的env里面新增一个key,我们这里管他叫作boot_slot, 改动如下:
首先我们要撤销上一章节理添加的CONFIG_BOOTARGS定义
- - #define CONFIG_BOOTARGS "console=ttymxc0,115200 root=/dev/mmcblk1p5 rootwait rw"
复制代码 其次添加环境变量boot_slot, 默认是a
- --- a/src/bootloader/u-boot/include/env_default.h
- +++ b/src/bootloader/u-boot/include/env_default.h
- @@ -100,6 +100,9 @@ const uchar default_environment[] = {
- "soc=" CONFIG_SYS_SOC "\0"
- #endif
- #endif
- +#ifdef CONFIG_SUPPORT_AB_BOOT
- + "boot_slot=" CONFIG_DEFAULT_BOOT_SLOT "\0"
- +#endif
- #ifdef CONFIG_EXTRA_ENV_SETTINGS
- CONFIG_EXTRA_ENV_SETTINGS
- #endif
- --- a/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
- +++ b/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
- #define CONFIG_SYS_MMC_ENV_DEV 1 /* USDHC2 */
- #define CONFIG_SYS_MMC_ENV_PART 0 /* user area */
- +#define CONFIG_SUPPORT_AB_BOOT
- +#ifdef CONFIG_SUPPORT_AB_BOOT
- +#define CONFIG_DEFAULT_BOOT_SLOT "a"
- +#endif
- #define CONFIG_MMCROOT "/dev/mmcblk1p5" /* USDHC2 */
- #define CONFIG_CMD_BMODE
复制代码 光添加一个环境变量还不够,还得让uboot启动的时候,自己根据环境变量boot_slot的值,去修改load kernel的fat分区,和rootfs的分区。
所以,就有了如下patch
- --- a/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
- +++ b/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
- @@ -194,15 +194,30 @@
- "if test $fdt_file = undefined; then " \
- "setenv fdt_file imx6ull-alientek-emmc.dtb; " \
- "fi;\0" \
- + "find_mmcpara="\
- + "if test ${boot_slot} = a; then " \
- + "setenv mmcpart 1; " \
- + "setenv mmcroot /dev/mmcblk1p5 rootwati rw;" \
- + "else " \
- + "if test ${boot_slot} = b; then " \
- + "setenv mmcpart 2; " \
- + "setenv mmcroot /dev/mmcblk1p6 rootwati rw;" \
- + "else " \
- + "setenv mmcpart 1; " \
- + "setenv mmcroot /dev/mmcblk1p5 rootwati rw;" \
- + "fi; " \
- + "fi;\0" \
- #define CONFIG_BOOTCOMMAND \
- "run findfdt;" \
- + "run find_mmcpara;" \
- "mmc dev ${mmcdev};" \
- "mmc dev ${mmcdev}; if mmc rescan; then " \
- "if run loadbootscript; then " \
- "run bootscript; " \
- "else " \
- "if run loadimage; then " \
- + "printenv; " \
- "run mmcboot; " \
- "else run netboot; " \
- "fi; " \
复制代码
printenv这一行可以忽略,是debug的时候用的。
重新编译uboot,烧录到板子里,启动的时候默认是a分区,启动是进入uboot 命令行,修改boot_slot为b,saveenv,重启后即可发现,板子启动到了b分区。
到这里基本上细心的同学可能会发现,切换分区还得手动来修改啊,别着急,下一章节我们就会降到如何自动处理了,敬请期待。
|
|