在 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 可能會刪除未更改部分的寫入。但你仍然必鬚髮送它們。

相關內容