
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를 사용하지 않습니다. 에 따르면문서, userland는 업데이트가 커밋되기 전에 전체 볼륨 크기를 스트리밍해야 합니다.
볼륨을 업데이트하려면 먼저 해당 UBI 볼륨 문자 장치의 ioctl을 호출
UBI_IOCVOLUP
하고 새 볼륨 내용의 길이(바이트)가 포함된 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가 변경되지 않은 부분에 대한 쓰기를 생략할 수도 있습니다. 하지만 여전히 보내야 합니다.