강좌 & 팁
글 수 2,412
2015.11.06 21:23:31 (*.39.166.80)
39314
이번 번역글은 UEFI 의 PEI에 대한 FAQ 입니다.
번역 원문은 http://tianocore.sourceforge.net/wiki/PEI 입니다.
발로 번역한 거라 내용중 틀릴 수도 있는데 그런 부분은 꼭! 지적해 주세요.
번역된 내용을 나중에 한글 FAQ 를 해당 사이트에 올려 오픈 소스 하시는 분들에게 도움이 되고 싶습니다.
번역을 도와 주신 미지님께 감사 드립니다.
PEI FAQ
PEI 란 Pre EFI Initialization 의 약자입니다.
### SEC 와 PEI를 별도의 바이너리로 내장할 수 있나요?
예, 원하시는 것은 EDK II 에서 지원합니다.
EDK 는 SEC 를 지원하기 위한 특별한 빌드 과정을 있습니다.
EDK II 로 만들어질 각 플랫폼들은 자기 자신만의 고유한 SEC 라이브러리 코드를 가질 수 있습니다.
이런 SEC 전용 라이브러리 코드는 따로 분리하여 빌드된 후 나머지 빌드 과정에서 포함됩니다.
### 어느 단계에서 TXT 기능이 포함되나요?
SEC 단계로 구현되기 보다는 대부분 직접 구현한 PEI 단계에서 기능을 지원합니다
### BSP(부트 스트랩 프로세서)에서 PEI 단계를 수행하나요? 그리고 AP들은 어떻게 처리 되나요?
리셋시점에서 AP 를 Wait-for-SIPI 상태로 만듭니다.
BSP 단계에서 실행되는 코드는 AP 에서 수행할 특정 코드를 실행하기 위해 해당 AP를 깨워야 합니다.
이런 과정은 PI 단계 중 특정 된 부분이나 아니면 전체에서 처리될 수 있지만,
일반적으로 DXE 드라이버가 CPU를 초기화 하는 DXE 단계에서 처리됩니다.
### SEC 단계에서는 무엇을 처리 하나요?
SEC 단계가 해야하는 목적을 한마디로 요약하면 C 언어로 작성되어 수행될 코드의 플랫폼을 얻는 것입니다.
이 과정은 보통 임시 RAM 에 스택에 관련된 초기화 처리가 포함됩니다.
인텔 프로세서의 경우, NEM 프로세서를 셋업한후 기본적으로 임시 메모리에 대한 처리를 합니다.
이 후 프로세서 레지스터를 설정하고 protected Flat 32 비트 모드로 전환합니다.
그 다음 Ap 를 설정하고 PeiMain 함수로 처리를 이동합니다.
### 예제에 있는 PEI 모듈 드라이버가 나열되는 자세한 순서를 실행 전에 알 수 있습니까?
빌드 과정 또는 실행 전에 순서를 결정하는 우선 순위 리스트를 정의하는 툴은 없습니다.
레이크포트의 경우 PCD, ReportStatusCodeRouterPei, StatusCodeHandlerPei 가 이에 해당 예제입니다.
### PEI 와 Sec 를 별도로 분리할 수 있나요?
Sec 를 별도의 바이너리 형태로 포함시키는 것이 가능합니다.
대부분 Sec는 별도의 모듈로 존재하고 , 리커버리 펌웨어 볼륨에 저장된 PEI 의 일부가 됩니다.
### 쉐도우 PEICore 란 무엇일까요?
"쉐도우" 란 용어는 80386 시대의 BIOS 에서 유래된 것으로,
8비트 ROM 에 저장된 코드를 32 비트 RAM에 복사하는 것을 의미합니다.
이런 쉐도우 처리는 BIOS 코드 수행 성능을 개선하는 것이 목적입니다.
PEIM 바이너리 이미지는 다음 둘 중 한 곳에서 실행될 수 있습니다.
하나는 쉐도우 되지 않은 FV (펌웨어 볼륨) 이고 또 하나는 압축된 컴포넌트 입니다
이중 압축된 컴포넌트는 영구적인 메모리가 인스톨된 이후에 쉐도우 됩니다.
쉐도우에 압축이 꼭 필요한 것은 아닙니다.
압축하지 않아도 컴포넌트를 쉐도우 할 수 있고 PEI 코어 자체를 쉐도우 할 수 있습니다.
### 초기에 구축된 PPI(PEIM to PEIM Interface) 는 추가적인 PPI 또는 GUID 와 다르게 표기되나요?
초기에 구축될 PPI(PEIM to PEIM Interface)에 대해서는
GUID 관련 정의와 함께 PI 규격서 볼륨 1 에서 정의합니다.
초기에 구축되어지는 PPI 예로는 EFI_PEI_MASTER_BOOT_MODE_PPI, EFI_DXE_IPL_PPI,
EFI_PEI_PERMANENT_MEMORY_INSTALLED_PPI 가 있습니다.
이것들은 항상 초기에 구축되어야 합니다.
### PEI(Pre EFI Initialization) 단계 마지막에서 메모리 맵은 어떻게 보여 지나요?
PHIT(PEI Handoff 정보 테이블)에는 포인터들이 나열 되어 있습니다.
이중 PHIT 에 PEI 메모리 하단과 상단을 가리키는 포인터 정보가 저장되어 있고
이것은 메모리가 상단과 하단 양쪽에 할당됨을 보여 줍니다.
프리 메모리 역시 PHIT 에 프리 메모리 상단과 하단 양쪽 정보를 포인터 형태로 보여 줍니다.
핸드 오프 블록 역시 PHIT 에 포인터 형태로 표현됩니다.
PHIT는 PEI 단계에서 볼수 있는 모든 리소스 정보를 포함합니다.
자세한 것은 PI Vol. 3 Spec 을 보십시오.
### 실행 단계에서 최소한의 PEI 드라이버 세트는 무엇인가요?
실행 전에 알수 있을까요?
기본적으로.
PEI 는 PEI 코어 서비스를 초기화하고, 부트 모드를 알아 내고, 메모리를 초기화 합니다.
DEBUG를 활성화한 특별한 플랫폼에서는 각각의 PEIM 을 볼 수 있습니다.
이렇게 PEIM 정보를 보고가 할때는
호스트 시스템에 터미널 에뮬레이션 어플리케이션을 실행한 상태에서 시리얼을 리디렉션 해야 합니다.
실행하기 전까지는 순서나 어떤 PEIM 이 실행될지 알수 없고 정의할 수도 없습니다.
### DEPEX 가 없다면 PEI 디스패치 순서는 어떻게 됩니까?
DSC/FDF 마다 FV에 정의된 순서가 우선 순위 리스트로 사용될 수도 있고
그렇치 않을 수도 있습니다.
(DSC/FDF 파일들은 FV 에 모듈이 생성되는 순서와 포함되는 순서를 지정합니다.)
### PEI(Pre EFI Initialization) 는 콜백을 지원합니까?
PEI 는 DXE 같은 이벤트는 없지만, 유사한 방식의 PPI 노티피케이션을 사용할 수 있습니다.
### PEI 가 32 비트이고 DXE 는 64 비트 일 경우 라이브러리를 사용하거나 호출할 수 있나요?
일반적으로 라이브러리와 API 모두 질문하신 부분은 문제가 되지 않습니다.
"C" 에서 호출할수 있는 인터페이스로 코딩되고
32 비트나 64 비트로 컴파일 하면,
32 비트거나 64 비트 라이브러리로 만들어 질 것입니다.
Itanium 과 EFI 바이트 코드 컴파일러 역시 지원됩니다.
오픈 소스에서 ARM 도 추가 할때 CPU 에 의존적인 몇 가지 기본 라이브리가 있습니다.