ubifs 볼륨에 증분 패치 적용

ubifs 볼륨에 증분 패치 적용

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는 실제로 변경되지 않은 부분에 대한 쓰기를 삭제할 수 있습니다. 하지만 여전히 보내야 합니다.

관련 정보