Aplicar patches incrementais no volume ubifs

Aplicar patches incrementais no volume ubifs

Para atualizar um volume ubifs substituindo-o por conteúdo totalmente novo, ubiupdatevol de mtd-utils pode ser usado:

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

Existe uma maneira de aplicar patch no volume ubifs em vez de relançar o conteúdo completo? Por exemplo, aplique apenas a diferença binária b/w ubifs_base.img e ubifs_dest.img em /dev/ubiX_Y.

Responder1

Não usando a API de atualização de volume, não. De acordo comos documentos, o usuário deve transmitir todo o tamanho do volume antes que a atualização seja confirmada:

Para atualizar um volume, primeiro você precisa chamar o UBI_IOCVOLUPioctl do dispositivo de caractere de volume UBI correspondente e passar para ele um ponteiro para um valor de 64 bits contendo o comprimento do conteúdo do novo volume em bytes. Então essa quantidade de bytes deve ser gravada no dispositivo de caracteres de volume. Assim que o último byte for enviado ao dispositivo de caractere, a operação de atualização será concluída. Esquematicamente, a sequência é:

fd = open("/dev/my_volume");
ioctl(fd, UBI_IOCVOLUP, &image_size);
write(fd, buf, image_size);
close(fd);

Veja include/mtd/ubi-user.hpara mais detalhes. Tenha em mente que o conteúdo antigo do volume não é preservado em caso de atualização interrompida. Além disso, você não precisa gravar todos os novos dados de uma só vez.

Então você definitivamente poderia fazer uma atualização delta, mas precisaria criar um utilitário que transmita as partes inalteradas de outra fonte, porque depois de iniciar a operação de atualização de volume, você terá que escrever tudo. Ou, se não quiser usar a API, você pode criar a nova imagem em armazenamento temporário e ubiupdatevolpronto.

A propósito, na prática, é possível que o UBI elimine as gravações nas partes inalteradas. Mas você ainda precisa enviá-los.

informação relacionada