Применять инкрементные патчи на томе ubifs

Чтобы обновить том ubifs, заменив его совершенно новым контентом, можно использовать ubiupdatevol из mtd-utils

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

Есть ли способ применить патч к объему ubifs вместо того, чтобы ссылаться на весь контент? Например, примените только двоичный diff b / w ubifs_base.img и ubifs_dest.img к /dev/ubiX_Y .

    Не используя API обновления тома, нет. Согласно документам , пользовательская область должна передавать весь размер тома до того, как обновление будет зафиксировано:

    Для обновления тома сначала необходимо вызвать ioctl UBI_IOCVOLUP соответствующего символьного устройства тома UBI и передать ему указатель на 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 может исключить записи в неизмененные части. Но вы все равно должны отправить их.