2017-10-17 7 views
-1

많은 양의 데이터를 디스크에 쓸 수 있어야하는 UEFI 응용 프로그램을 작성하고 있습니다. FAT-32 파일 크기 제한 및 디렉토리 당 파일 수 등을 알고 있습니다. 문제가되지 않아야합니다. 내가 쓰려고하는 메모리 영역은 메모리 맵에서 사용할 수있는 것으로 표시되어 있으며 문제없이 읽기/쓰기가 가능하지만 일정량의 데이터가 기록 된 후 VM은 오류 메시지없이 다시 부팅됩니다. 다음 줄에 문제가 있습니다 :EFI_FILE_HANDLE-> 약 3.4를 쓰면 충돌이 발생합니다. GiB

uefi_call_wrapper(handle->Write, 3, handle, size, content); 

핸들이 몇 줄의 이전 초기화되고, 크기는 항상 최대 128MiB 및 콘텐츠 읽기/쓰기 액세스 권한이있는 유효한 메모리 영역이다. 나는 이미 EDK2를 사용하여 Windows에서 전체를 다시 작성했으며 동일한 문제가 발생했습니다.

아무도 도와 줄 수 있습니까? 미리 감사하고 멋진 저녁을 보내십시오.

+0

어떤 오류가 발생하고 있습니까? –

+0

나는 어떤 에러도 내지 않는다. 단지 VM이 재부팅되고 실제 hw에서만 멈추고 아무 일도 일어나지 않는다. – AlexRoot

+0

'handle'의 타입은 무엇입니까? 쓰기는 작은 크기로 호출 할 때 작동합니까? 실패하기 시작하는 크기는 얼마입니까? 재부팅이 쓰기 호출 내에서 발생했는지, 반환 된 후 재부팅이 발생하지 않았습니까? – prl

답변

0

안녕 얘들 아, 고마워. size 인수는 포인터입니다. 방금 문제의 해결책을 찾았습니다. 워치 독 타이머를 재설정해야한다는 것을 알지 못했습니다. 전화 후 uefi_call_wrapper(ST->BootServices->SetWatchdogTimer, 4, 0, 0, 0, NULL); 모든 것이 예상대로 작동합니다.

건배!

1

핸들이 EFI_FILE_PROTOCOL에 대한 포인터라고 가정하면 쓰기를위한 BufferSize 매개 변수는 참조로 전달됩니다. 함수가 반환되면 BufferSize는 기록 된 바이트 수를 포함합니다. 당신은 당신의 질문에 충분한 맥락을주지 않았지만 당신이 가치로 그것을 전달하는 것처럼 보입니다.