我使用SWUpdate通过双重复制策略更新同一设备的不同硬件版本。所有这些的引导程序环境看起来非常相似。但是,我必须将mmc分区设置为根据主动副本和boot_file进行引导,具体取决于硬件版本。为了使sw-description文件尽可能全面并且易于维护,我想在第一步为所有设备设置“基本”引导环境,在第二步中根据硬件覆盖一些变量 - 修订和主动副本:
software =
{
version = "1.1";
hardware-compatibility = ["0.1","1.0"];
device1=
{
copy-1:
{
images:
(
{
filename = "rootfs.ext3.gz";
device = "/dev/mmcblk0p3";
compressed = true;
},
{
filename = "u-boot-env-base"; #basic boot environment
type = "uboot";
}
);
bootenv: # device-specific boot variables
(
{
name = "boot_file"
value = "uImage1"
},
{
name = "mmcpart";
value = "3";
}
);
}
}
}
虽然报告了两个引导加载程序环境的报告但是只应用了一个,但两者都是错误的顺序,因为当通过fw_printenv
检查时,“u-boot-env-base”没有改变。
我在用
SWUpdate v2018.11.0
U-boat 2018.09。
我觉得我在旧的设置中使用了这个(SWUpdate 2016)。
我已经用这个问题在邮件列表中发了言。 SWUpdate开发人员和维护人员Stefano Babic回答了我的问题,我只想在这里总结一下。
我所描述的是期望的行为。在更新期间,未预见到两次设置引导加载程序变量。文件中定义的u-boot变量优先于bootenv部分中的u-boot名称 - 值对,因为文件是在更新的最后处理的。我的解决方案是仅在bootenv部分设置变量。