OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4664|回复: 1

IMX6ULL eMMC板添加 "A/B(无缝)系统"之四:A/B自动启动实验

[复制链接]

5

主题

120

帖子

0

精华

高级会员

Rank: 4

积分
813
金钱
813
注册时间
2021-2-26
在线时间
117 小时
发表于 2021-3-21 14:42:21 | 显示全部楼层 |阅读模式
前面我们已经把系统启动起来了,并且A/B的切换也没问题了。那今天我们就要让系统自动根据A/B来启动系统,不需要再手动干预。
为此,我们需要在uboot的env里面新增一个key,我们这里管他叫作boot_slot, 改动如下:
首先我们要撤销上一章节理添加的CONFIG_BOOTARGS定义
  1. - #define CONFIG_BOOTARGS                        "console=ttymxc0,115200 root=/dev/mmcblk1p5 rootwait rw"
复制代码
其次添加环境变量boot_slot, 默认是a
  1. --- a/src/bootloader/u-boot/include/env_default.h
  2. +++ b/src/bootloader/u-boot/include/env_default.h
  3. @@ -100,6 +100,9 @@ const uchar default_environment[] = {
  4.         "soc="          CONFIG_SYS_SOC                  "\0"
  5. #endif
  6. #endif
  7. +#ifdef CONFIG_SUPPORT_AB_BOOT
  8. +       "boot_slot="    CONFIG_DEFAULT_BOOT_SLOT        "\0"
  9. +#endif
  10. #ifdef CONFIG_EXTRA_ENV_SETTINGS
  11.         CONFIG_EXTRA_ENV_SETTINGS
  12. #endif

  13. --- a/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
  14. +++ b/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
  15. #define CONFIG_SYS_MMC_ENV_DEV         1   /* USDHC2 */
  16. #define CONFIG_SYS_MMC_ENV_PART                0       /* user area */
  17. +#define CONFIG_SUPPORT_AB_BOOT
  18. +#ifdef CONFIG_SUPPORT_AB_BOOT
  19. +#define CONFIG_DEFAULT_BOOT_SLOT       "a"
  20. +#endif
  21. #define CONFIG_MMCROOT                 "/dev/mmcblk1p5"  /* USDHC2 */

  22. #define CONFIG_CMD_BMODE
复制代码
光添加一个环境变量还不够,还得让uboot启动的时候,自己根据环境变量boot_slot的值,去修改load kernel的fat分区,和rootfs的分区。
所以,就有了如下patch

  1. --- a/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
  2. +++ b/src/bootloader/u-boot/include/configs/mx6ull_alientek_emmc.h
  3. @@ -194,15 +194,30 @@
  4.                         "if test $fdt_file = undefined; then " \
  5.                                 "setenv fdt_file imx6ull-alientek-emmc.dtb; " \
  6.                         "fi;\0" \
  7. +               "find_mmcpara="\
  8. +                       "if test ${boot_slot} = a; then " \
  9. +                               "setenv mmcpart 1; " \
  10. +                               "setenv mmcroot /dev/mmcblk1p5 rootwati rw;" \
  11. +                       "else " \
  12. +                               "if test ${boot_slot} = b; then " \
  13. +                                       "setenv mmcpart 2; " \
  14. +                                       "setenv mmcroot /dev/mmcblk1p6 rootwati rw;" \
  15. +                               "else " \
  16. +                                       "setenv mmcpart 1; " \
  17. +                                       "setenv mmcroot /dev/mmcblk1p5 rootwati rw;" \
  18. +                               "fi; " \
  19. +                       "fi;\0" \

  20. #define CONFIG_BOOTCOMMAND \
  21.            "run findfdt;" \
  22. +          "run find_mmcpara;" \
  23.            "mmc dev ${mmcdev};" \
  24.            "mmc dev ${mmcdev}; if mmc rescan; then " \
  25.                    "if run loadbootscript; then " \
  26.                            "run bootscript; " \
  27.                    "else " \
  28.                            "if run loadimage; then " \
  29. +                                       "printenv; " \
  30.                                    "run mmcboot; " \
  31.                            "else run netboot; " \
  32.                            "fi; " \
复制代码

printenv这一行可以忽略,是debug的时候用的。

重新编译uboot,烧录到板子里,启动的时候默认是a分区,启动是进入uboot 命令行,修改boot_slot为b,saveenv,重启后即可发现,板子启动到了b分区。
到这里基本上细心的同学可能会发现,切换分区还得手动来修改啊,别着急,下一章节我们就会降到如何自动处理了,敬请期待。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

200

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
1063
金钱
1063
注册时间
2019-9-19
在线时间
194 小时
发表于 2021-3-27 10:58:02 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 21:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表