강좌 & 팁
글 수 2,412
2015.11.11 11:59:12 (*.39.166.80)
40049
[UEFI] SHELL FAQ 번역
이번 번역글은 UEFI 의 SHELL에 대한 FAQ 입니다.
번역 원문은 http://tianocore.sourceforge.net/wiki/Shell_FAQ 입니다.
발로 번역한 거라 내용중 틀릴 수도 있는데 그런 부분은 꼭! 지적해 주세요.
번역된 내용은 나중에 한글 FAQ 사이트에 올려 오픈 소스 하시는 분들에게 도움이 되고 싶습니다.
번역을 도와 주신 미지님께 감사 드립니다.
SHELL FAQ
### EBC(EFI Byte Code) 로 쉘 어플리케이션을 만들 수 있나요?
예, 가능합니다. EBC 컴파일러에서 ULA 에 관련된 항목을 체크해 보세요
[1] 이 항목은 드라이브/앱과 관련된 지원에 대한 세부 항목입니다.
쉘 어플리케이션이나 UEFI 어플리케이션이 EBC 사용 하는 경우, 이와 관련된 기술적 이슈는 없습니다.
주로 유효성 이슈만 있습니다.
다른 이슈로는 UEFI 2.3 규격 섹션 2.6.2 아이템 (19) 에 대한 이슈가 있고
이 이슈는 주로 EBC 인터프리터에 대한 요구만 있는 상태입니다.
EBC 인터프리터에 대한요구는 플랫폼에 디바이스를 추가하고자 할때
컨테이너에 EBC 드라이버를 지원할 경우에 대한 것입니다.
EBC 인터프리터는 옵션사항이고 모든 플랫폼에서 적용 가능한 것은 아닙니다.
결과적으로 말씀 드리면 ,
EBC 로 컴파일되는 쉘 어플리케이션이나 UEFI 어플리케이션은 모든 플랫폼에서 실행되지는 않습니다.
Intel® C Compiler for EFI Byte Code Product In-Depth
### 쉘 안에 쉘을 수행하거나 스크립트 안에 스크립트를 실행할수 있나요?
예, 쉘은 포함된 쉘 인스턴스를 수행할수 있고
쉘 스크립트 역시 또 다른 포함된 스크립트를 실행할 수 있습니다.
### 스크립트의 위치는 고정적인가요?
아닙니다. 쉘 스크립트는 모든 미디어에서 FAT 파일 시스템 내 어디에든 있을 수 있습니다.
CWD 에 위치가 지정되어 있지 않다면 스크립트에 대한 경로를 지정할 수 있습니다.
### 외부 USB 나 다른 드라이브에서 동작 중에 드라이버를 추가할 수 있나요?
예, 쉘로 부트할 수 있고 쉘 로드 명령으로 로드할 수 있습니다.
- BDS 옵션이나 다른 것이 될 수 있습니다.
### efi 쉘과 관련된 이벤트가 있나요?
없습니다, 하지만 프리부트 타임과 아키텍처 프로토콜 후에 있습니다.
### EFI 쉘에서 펌웨어 볼륨의 캡슐을 서명하기 위해 사용할 수 있는 서명 툴이 있나요?
GUID 부분을 추줄하는 방법과 같은 할수 있는 방법을 제공하고 있습니다.
EDK II 는 GUID 부분을 검출하는 툴을 제공합니다.
이 툴을 사용하면 압축, 암호화 서명에 대한 처리를 할 수 있습니다.
BaseTools CEC 32 LZMA 압축과 같은 툴을 위한 소스가 있습니다.
이 예제를 보면 서명 툴로 사용될 수 있음을 알 수 있습니다.
### 언제 서명할 수 있고 PEI 와 DXE 서명 체크는 어떻게 하나요?
빌드시 서명할수도 있고 , 부트 중에 서명하는 것도 가능합니다.
PEI 와 DXE 서명 체크 같은 경우, 각각 적합한 아키텍쳐와 함께 빌드될 때 서명할 수 있습니다.
(예를 들면 32 비트용 PEI 와 X86 용 DXE )
### 모든 드라이버를 모으는 툴은 어떤 것이 있고 드라이버 디스패처가 어떤 순서로 드라이버를 실행하나요?
이 동작 매커니즘에 대해서는 PI 규격서에 설명되어 있습니다.
아키텍처 프로토콜과 DXE 서비스에 대한 UEFI 드라이버 의존성을 의미하는 의존 관계는
모든 드라이버에 적용되는 개념입니다.
PEI 와 DXE 디스패처는 각 드라이버의 의존성을 체크하고,
플래시 디바이스에 있는 각 드라이버를 디스패치할지 또는 실행할지를 결정합니다.
드라이버 의존관계 평가 결과가 TRUE 가 아니면
해당 드라이버는 별개로 취급되고 플래시 디바이스에 있는 다음 드라이버를 처리할 것입니다.
몇몇 드라이버는 디스패치되지 않을 수도 있습니다.
### 디스패치 처리는 의존관계를 검색하기 위해서 플래쉬에 접근하는 것을 말하나요?
그 코드는 실행으로 인해 가능한 작은 플래시에 접근할 것입니다.
예를 들면, PEI 단계에서는 드라이버 의존 관계가 TRUE 가 아니면 캐쉬 메모리를 사용합니다.
### 디스패치되지 않는 PEIM 트랙을 유지하기 위해 PEI 코어는 어떻게 캐쉬를 할당하나요?
이빅션 모드가 아닌 상태로 만들고 사이드 임시 메모리를 셋탕한 후 PEI 코어는 메모리를 할당할 것입니다.
priori 파일이라고 명명된 또 다른 방법이 있는데 이 파일은 펌웨어 볼륨에 하나씩 할당할 수 있습니다.
이 파일은 디스패처에게 드라이버 목록을 어떤 순서로 디스패치하는지를 알려줄 것입니다.
이 파일은 수동으로 순서를 지정하기 위한 것입니다.
이 파일은 FV 에서 어떤 특별한 곳에 있을 필요는 없습니다.
FV 에만 있다면 어디에 있던 디스패처는 찾아낼 것입니다.
### 새로운 UEFI 쉘 2.0을 UDK2010.SR1 에서 있는 Nt32 에 추가하려면 어떻게 해야 하나요?
여러분은 Nt32Pkg.dsc 와 Nt32Pkg.fdf 를 아래와 같이 업데이트할 필요가 있습니다.
Nt32Pkg.dsc
1) [LibraryClasses.common.UEFI_APPLICATION] 섹션 끝에 다음을 추가해야 합니다.
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
2) [PcdsFixedAtBuild] 섹션 끝에 다음을 추가해야 합니다.
# Update the PCD as follows using the UEFI Shell's 2.0 PCD:
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|
{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 }
3) [Components.IA32] 섹션 끝에 다음을 추가해야 합니다.
ShellPkg/Application/Shell/Shell.inf {
<LibraryClasses>
NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
FileHandleLib|ShellPkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
SortLib|ShellPkg/Library/UefiSortLib/UefiSortLib.inf
HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
PathLib|ShellPkg/Library/BasePathLib/BasePathLib.inf
!ifndef $(NO_SHELL_PROFILES)
NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
!endif
<PcdsFeatureFlag>
gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|
Nt32Pkg.fdf
4) Nt32Pkg.fdf 파일에서 # DXE 단계 모듈의 끝에 다음을 추가해야 합니다.
INF ShellPkg/Application/Shell/Shell.inf
5) Nt32Pkg.fdf 파일의 FILE 섹션에서 EFI EDK 쉘 1.0 라인의 시작 부분에 "#" 을 추가하여 주석 처리 합니다.
#FILE APPLICATION = PCD(gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile) {
# SECTION PE32 = EdkShellBinPkg/FullShell/Ia32/Shell_Full.efi
# }