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は実際に変更されていない部分への書き込みを削除できます。しかし、まだ送信する必要があります。