
Para actualizar un volumen ubifs reemplazándolo con contenido completamente nuevo, se puede utilizar ubiupdatevol de mtd-utils:
ubiupdatevol /dev/ubiX_Y /path/to/ubifs.img
¿Hay alguna forma de aplicar un parche en el volumen de ubifs en lugar de relacionar el contenido completo? Por ejemplo, aplique solo la diferencia binaria b/w ubifs_base.img y ubifs_dest.img en /dev/ubiX_Y
.
Respuesta1
No usar la API de actualización de volumen, no. De acuerdo alos documentos, el área de usuario debe transmitir el tamaño completo del volumen antes de confirmar la actualización:
Para actualizar un volumen, primero debe llamar al
UBI_IOCVOLUP
ioctl del dispositivo de caracteres de volumen UBI correspondiente y pasarle un puntero a un valor de 64 bits que contenga la longitud del contenido del nuevo volumen en bytes. Luego, esta cantidad de bytes debe escribirse en el dispositivo de caracteres de volumen. Una vez que se ha enviado el último byte al dispositivo de caracteres, finaliza la operación de actualización. Esquemáticamente, la secuencia es:fd = open("/dev/my_volume"); ioctl(fd, UBI_IOCVOLUP, &image_size); write(fd, buf, image_size); close(fd);
Ver
include/mtd/ubi-user.h
para más detalles. Tenga en cuenta que el contenido antiguo del volumen no se conserva en caso de que se interrumpa la actualización. Además, no es necesario escribir todos los datos nuevos de una sola vez.
Así que definitivamente podrías hacer una actualización delta, pero necesitarías crear una utilidad que transmita las partes sin cambios desde otra fuente, porque una vez que inicias la operación de actualización del volumen, tienes que escribir todo. O, si no tiene ganas de usar la API, puede crear la nueva imagen en un almacenamiento temporal y ubiupdatevol
listo.
En la práctica, por cierto, es posible que UBI pueda eludir las escrituras en las partes sin cambios. Pero aún tienes que enviarlos.