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

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

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

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

コンテンツ全体を再配置する代わりに、ubifs ボリュームにパッチを適用する方法はありますか? たとえば、ubifs_base.img と ubifs_dest.img 間のバイナリ差分のみを適用します/dev/ubiX_Y

答え1

ボリューム更新APIを使用していないので、いいえ。ドキュメント更新がコミットされる前に、ユーザーランドはボリューム サイズ全体をストリーミングする必要があります。

ボリュームを更新するには、まず対応する UBI ボリューム キャラクタ デバイスの ioctl を呼び出してUBI_IOCVOLUP、新しいボリューム コンテンツの長さ (バイト単位) を含む 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 は変更されていない部分への書き込みを省略できる可能性があります。ただし、それでも送信する必要があります。

関連情報