要通过用全新内容替换来更新 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 可能会删除对未更改部分的写入。但你仍然必须发送它们。