> For the complete documentation index, see [llms.txt](https://bob-mcd-team.gitbook.io/uefi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bob-mcd-team.gitbook.io/uefi/uefi-development.md).

# UEFI 개발

- [UEFI 개발 시작하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start.md)
- [0. EDK II 빌드 환경 구성](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/0.edkii-build.md): EDK II 를 이용하여 EFI 만들기
- [1. 간단한 EFI application 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/1.efi-application.md)
- [2. 간단한 Pkg 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/2.simple-pkg.md)
- [3. Hello World 출력하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/3.print-hello-world.md)
- [4. 라이브러리와 Hello World](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/4.library-and-hello-world.md)
- [5. Conf를 통한 Build 단순화](https://bob-mcd-team.gitbook.io/uefi/uefi-development/uefi-start/5.conf-build.md)
- [핸들 및 프로토콜](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol.md)
- [6. 핸들/프로토콜 데이터 베이스 구조 - Part 1](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol/6.handle-protocol-part-1.md): ImageHandle에 대한 이론 및 기본 사용
- [7. 핸들/프로토콜 데이터 베이스 구조 - Part 2](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol/7.handle-protocol-part-2.md): 애플리케이션 프로토콜에 대한 기본적인 사용
- [8. HandleProtocol API 함수 & ImageHandle 프로토콜을 통한 정보](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol/8.handleprotocol-api.md): HandleProtocol 함수에 대한 기본 사용 및 ImageHandle 프로토콜로부터의 정보 얻기
- [9. ProtocolsPerHandle API를 통한 ImageHandle 프로토콜 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol/9.protocolsperhandle-api.md): API를 통해서 간편하게 ImageHandle 프로토콜 가져오기
- [10. EFI\_STATUS 타입 과 EFI\_ERROR 매크로](https://bob-mcd-team.gitbook.io/uefi/uefi-development/handle-protocol/10.efi_status.md)
- [메모리 맵](https://bob-mcd-team.gitbook.io/uefi/uefi-development/memory-map.md)
- [11. EFI 메모리 맵 정보 얻기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/memory-map/11.efi-memory-map.md)
- [12. EFI 메모리 맵을 리눅스 커널 스타일로 바꾸기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/memory-map/12.efi-memory-map-kernel-style.md): EFI\_SHELL\_PARAMETERS\_PROTOCOL
- [명령줄 인수를 받는 간단한 앱 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/shell-app.md)
- [13.ShellAppMain Entry point](https://bob-mcd-team.gitbook.io/uefi/uefi-development/shell-app/13.shellappmain-entry-point.md)
- [14.gRT->GetNextVariableName API를 사용하여 모든 변수 이름 및 GUID 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/shell-app/14.getnextvariablename-api.md)
- [부팅 옵션](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option.md)
- [15. gRT->GetVariable API를 사용하여 부팅 변수 가져오기 및 구문 분석](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option/15.getvariable-api.md)
- [16. OVMF 이미지 내에 부팅 옵션 추가](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option/16.ovmf-image-boot-option.md)
- [17. 부팅 옵션에 WaitForEvent 함수 추가](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option/17.waitforevent.md)
- [18. ReadKeyStroke 함수로 사용자 입력 처리](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option/18.readkeystroke.md)
- [19. bcfg 명령어를 사용한 부팅 옵션 수정](https://bob-mcd-team.gitbook.io/uefi/uefi-development/boot-option/19.use-bcfg.md)
- [PCD](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd.md)
- [20. PCD 소개](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/20.intro-pcd.md)
- [21. PCD 변수에 대한 Overriding](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/21.pcd-variable-overriding.md)
- [22. Feature Flag PCD와 BOOLEAN FixedAtBuild PCD의 비교](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/22.feature-flag-pcd.md): Lesson 22에서는 다른 Feature Flag PCD라고 하는 PCD 유형을 소개할 예정이다. 이는 기본적으로 Boolean 값을 가진다.
- [23. PatchableInModule PCD 및 GenPatchPcdTable/PatchPcdValue 유틸리티를 통해 PCD를 변경하는 방법](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/23.patchableinmodule-pcd.md): PatchableInModule PCD class에 대해서 알아보자.
- [24. Dynamic/DynamiEx PCDs](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/24.dynamic-dynamiex-pcds.md)
- [25. PCD 더 알아보기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pcd/25.more-pcd.md)
- [테이블](https://bob-mcd-team.gitbook.io/uefi/uefi-development/table.md)
- [26. EFI\_CONFIGURATION\_TABLE에서 참조되는 테이블](https://bob-mcd-team.gitbook.io/uefi/uefi-development/table/26.efi_configuration_table.md)
- [27. dmem/EFI\_SMBIOS\_PROTOCOL/smbiosview를 통해서 SMBIOS 정보 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/table/27.-dmem-efi_smbios_protocol-smbiosview-smbios.md)
- [28. EFI\_SHELL\_PROTOCOL을 통하여 ACPI 테이블을 파일에 저장하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/table/28.efi_shell_protocol.md)
- [29. EFI\_ACPI\_SDT\_PROTOCOL 및 ShellLib를 사용하여 ACPI BGRT 테이블에서 BMP 이미지 저장하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/table/29.efi_acpi_sdt_protocol.md)
- [PCI](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pci.md)
- [30. PCI 루트 브리지 찾은 후 시스템의 모든 PCI 기능 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pci/30.pci.md)
- [31. ShellLib/PrintLib 함수를 사용해 PCI Vendor/Device 정보 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pci/31.pci-vendor-device.md)
- [32. EFI\_PCI\_IO\_PROTOCOL을 사용해 PCI Option ROM 이미지 표시](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pci/32.efi_pci_io_protocol.md)
- [33. EfiRom 유틸리티를 사용한 PCI Option ROM 이미지 파싱 및 생성](https://bob-mcd-team.gitbook.io/uefi/uefi-development/pci/33.efirom.md)
- [드라이버 및 라이브러리](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library.md)
- [34. 간단한 UEFI 드라이버 생성](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/34.simple-uefi-driver.md)
- [35. 애플리케이션에서 사용할 간단한 라이브러리 생성](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/35.simple-library.md)
- [36. Library의 constructor와 destructor, NULL Library](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/36.library-constructor-destructor.md): 이번 장에서는 Library의 constructor(생성자)와 destructor(소멸자)에 대해 배운다.
- [37. Shell에 acpiview 명령을 추가하는 방법 조사](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/37.shell-acpiview.md)
- [38. 사용자 지정 프로토콜을 만들고 사용하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/38.installmultipleprotocolinterfaes.md): InstallMultipleProtocolInterfaes와 UninstallMultipleProtocolInterfaces 사용
- [39. RegisterKeyNotify / UnrigisterKeyNotify 함수를 사용해 단축키 기능을 추가하는 드라이버 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/39.registerkeynotify-unrigisterkeynotify.md): 39장에서는 단축키 조합에 대한 callback을 등록하는 드라이버를 만든다
- [40. Key #### NVRAM 변수](https://bob-mcd-team.gitbook.io/uefi/uefi-development/driver-library/40.key-nvram-variable.md)
- [디버그](https://bob-mcd-team.gitbook.io/uefi/uefi-development/debug.md)
- [41. DEBUG 출력문 내부 구조와 DEBUG 문 제어를 위한 PCD 분석, 그리고 OVMF 부트 로그 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/debug/41.debug.md)
- [42. GDB를 이용한 Driver/Application 및 OVMF Debug](https://bob-mcd-team.gitbook.io/uefi/uefi-development/debug/42.gdb-ovmf-debug.md)
- [HII](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii.md)
- [43. HII 데이터베이스 개념 및 출력](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/43.hii-database.md)
- [44. HII 데이터베이스 내부](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/44.hii-database-inside.md)
- [45. EFI\_HII\_DATABASE\_PROTOCOL의 NewPackageList를 사용하여 문자열 패키지가 포함된 문자열 목록 게시](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/45.efi_hii_database_protocol.md): 파트 1: 패키지 목록 데이터 생성의 일반적인 측면
- [46. EFI\_HII\_DATABASE\_PROTOCOL의 NewPackageList를 사용하여 문자열 패키지가 포함된 HII 패키지 목록 게시](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/46.efi_hii_database_protocol-newpackagelist.md): 파트 2: 문자열 패키지 데이터 생성
- [47. EFI\_HII\_DATABASE\_PROTOCOL의 NewPackageList를 사용하여 문자열 패키지가 포함된 HII 패키지 목록 게시](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/47.efi_hii_database_protocol-newpackagelist.md): 파트 3: NewPackageList 및 GetString 프로토콜 함수를 사용하여 모든 것을 결합하기
- [48. UNI 파일 및 HiiLib를 사용하여 HII String 패키지 게시 및 작업하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/48.uni-hiilib.md)
- [49.MODULE\_UNI\_FILE/PACKAGE\_UNI\_FILE/\[UserExtensions.TianoCore."ExtraFiles"\]의 도움으로 UNI 파일 선언하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/49.uni-file.md)
- [50.UEFI\_HII\_RESOURCE\_SECTION을 사용하여 문자열 패키지와 함께 HII 패키지 목록 게시하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/50.uefi_hii_resource_section.md)
- [51. UEFI APP에 메뉴얼 추가하기(shell의 -?와 help 옵션)](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/51.uefi-app-manual.md): - EFI\_SHELL\_PROTOCOL의 EFI\_SHELL\_GET\_HELP\_TEXT 함수
- [52. Russian 글꼴 추가 - Part 1.](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/52.russian-font-part-1.md): EFI\_NARROW\_GLYPH/EFI\_WIDE\_GLYPH 형식 조사 및 \*.woff 글꼴 파일에서 GLYPH 배열 구성
- [53. Russian 글꼴 추가 - Part 2.](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/53.russian-font-part-2.md): EFI\_HII\_SIMPLE\_FONT\_PACKAGE 구성 및 HII 데이터베이스에 채우기
- [54. EFI\_HII\_STRING\_PROTOCOL의 NewString 및 SetString 함수를 사용하여 다른 언어에 대한 문자열 패키지를 동적으로 추가](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/54.efi_hii_string_protocol.md): 이 장에서는 UNI 변환을 시스템에 동적으로 추가하려 한다.
- [55. PlatformLangCodes EFI 변수 수정 및 다른 언어를 동적 추가하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/55.platformlangcodes.md)
- [56. 코드에서 FILE\_GUID 및 BASE\_NAME을 가져오기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/hii/56.file_guid-base_name.md)
- [VFR](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr.md)
- [57. VFR을 사용해 간단한 폼 생성 및 EFI\_FORM\_BROWSER2\_PROTOCOL.SendForm()를 통해 화면에 폼 표시하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/57.vfr-form.md)
- [58. VFR 요소 : subtitle 및 text](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/58.subtitle-and-text.md)
- [59. 간단한 폼 애플리케이션을 UEFI 드라이버 Form으로 변환하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/59.form-application.md)
- [60. gRT->SetVariable() 함수를 사용한 UEFI 변수 생성, 변경 및 삭제](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/60.setvariable.md)
- [61.dmpstore 명령을 사용하여 변수를 파일에 저장/로드하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/61.dmpstore.md): dmpstore 변수 덤프에서 CRC32 체크섬을 재계산하는 애플리케이션 작성하기
- [62. UEFI Device path의 구조](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/62.uefi-device-path.md): 동적 및 정적 Device path. Device path를 통한 상호 작용
- [63. checkbox를 가진 HII 폼 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/63.checkbox-hii-form-part-1.md): 파트 1: checkbox 요소 및 efivarstore 요소에 대한 VFR 코드
- [64. checkbox를 가진 HII폼 만들기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/64.checkbox-hii-form-part-2.md): 파트 2: efivarstore가 올바르게 작동하는 데 필요한 코드 작성하기
- [65. VFR 추가 입력 요소 Part 1: number](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/65.vfr-number.md)
- [66. VFR 추가 입력 요소 Part 2: string](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/66.vfr-string.md)
- [67. VFR 추가 입력 요소 Part 3: date & time](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/67.vfr-date-time.md)
- [68. VFR 추가 입력 요소 Part 3: oneof & orderedlist](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/68.vfr-oneof-orderedlist.md)
- [69. VFR의 조건부 키워드](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/69.vfr-if.md): suppressif/grayoutif/disableif/warningif/nosubmitif/inconsistentif
- [70. VFR의 상수 및 연산자가 내장된 기본 조건문](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/70.vfr-if.md): ideqval/ideqvalist/ideqid/questionref/pushthis
- [71. 기본 VFR 내장 문자열용 함수](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/71.vfr-string-func.md): stringref/toupper/tolower/length
- [72. label 키워드를 이용하여 HII 양식에 동적 요소 추가하기](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/72.label-keyword.md)
- [73. VFR question 기본값 설정](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/73.vfr-question.md): default/defaultstore/resetbutton
