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