17. 부팅 옵션에 WaitForEvent 함수 추가

이전 장에서 부팅 옵션에 HelloWorld 애플리케이션을 부팅 옵션에 추가했다.

EFI Shell에서 exit 명령어를 통해 BIOS로 이동한 후 부팅 매니저를 보면 HelloWorld 애플리케이션을 확인할 수 있다. 해당 애플리케이션을 실행하면 글자를 출력하고 바로 BIOS 화면으로 돌아가는 것을 확인할 수 있다.

Shell> exit
BIOS 화면
부팅 매니저에서 확인 가능한 Hello Wolrd 애플리케이셔ㄴ

문자열을 출력하고 바로 BIOS로 돌아가는 것을 고치기 위해 이번 장에서는 HelloWorld 애플리케이션 코드에 WaitForEvent 함수를 추가한다.

WaitForEvent 는 사용자로부터 키 입력을 받을 때까지 기다리는 함수이다.

해당 문제를 해결하기 위해서 EFI_SIMPLE_TEXT_INPUT_PROTOCOLEFI_EVENT WaitForKey를 사용해야 한다.(gST->ConIn으로 사용할 수 있다.)

함수를 추가하기 위해 UefiLessonsPkg/HelloWorld/HelloWorld.c에 아래 코드를 추가한다.

OVMF를 새롭게 빌드한 후 BIOS -> Boot Manager -> HelloWorld 애플리케이션을 실행하면 처음과는 달리 문자열들을 출력하고 대기하는 화면을 볼 수 있다.

키 입력을 대기하고 있는 상태

아직 문제가 남아있다. 이번에는 엔터키 입력을 했을 경우 다시 문자열 출력 화면으로 돌아온다.

이 문제는 입력 버퍼를 읽거나 지우지 않아 발생하는 문제로 Reset 함수를 통해 해결할 수 있다.

UefiLessonsPkg/HelloWorld/HelloWorld.c에 아래 코드를 추가한다.

다시 OVMF를 빌드하고 HelloWorld 애플리케이션을 실행해보면 모든 키 입력에서 정상적으로 종료가 되는 것을 볼 수 있다.

HelloWorld.c

Last updated