
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 は変更されていない部分への書き込みを省略できる可能性があります。ただし、それでも送信する必要があります。