ubifsボリュームに増分パッチを適用する

ubifsボリュームに増分パッチを適用する

ubifsボリュームを新しいコンテンツに置き換えて更新するには、mtd-utilsでubiupdatevolを使用します。

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

コンテンツ全体を置き換えずにubifsボリュームにパッチを適用する方法はありますか?たとえば、白黒ubifs_base.imgとubifs_dest.imgにのみバイナリdiffを適用します/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は実際に変更されていない部分への書き込みを削除できます。しかし、まだ送信する必要があります。

おすすめ記事