在 ubifs 卷上应用增量补丁

在 ubifs 卷上应用增量补丁

要通过用全新内容替换来更新 ubifs 卷,可以使用 mtd-utils 中的 ubiupdatevol:

ubiupdatevol /dev/ubiX_Y /path/to/ubifs.img

有没有办法在 ubifs 卷上应用补丁而不是替换完整内容?例如,仅在 上应用二进制 diff b/w ubifs_base.img 和 ubifs_dest.img /dev/ubiX_Y

答案1

不使用卷更新 API,不。根据文档,用户态必须在提交更新之前传输整个卷大小:

要更新卷,首先必须调用UBI_IOCVOLUP相应 UBI 卷字符设备的 ioctl,并向其传递一个指向 64 位值的指针,该值包含新卷内容的长度(以字节为单位)。然后必须将这个字节数写入卷字符设备。一旦最后一个字节发送到字符设备,更新操作就完成了。概括地说,顺序是:

fd = open("/dev/my_volume");
ioctl(fd, UBI_IOCVOLUP, &image_size);
write(fd, buf, image_size);
close(fd);

请参阅include/mtd/ubi-user.h了解更多详情。请记住,如果更新中断,则不会保留卷的旧内容。此外,您不必一次性写入所有新数据。

因此,您绝对可以进行增量更新,但您需要创建一个实用程序来从另一个源流式传输未更改的部分,因为一旦开始卷更新操作,您就必须编写整个内容。或者,如果您不想使用 API,您可以在临时存储中创建新图像,然后ubiupdatevol使用它。

顺便说一句,实际上,UBI 可能会删除对未更改部分的写入。但你仍然必须发送它们。

相关内容