
要透過全新內容替換來更新 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 可能會刪除未更改部分的寫入。但你仍然必鬚髮送它們。