Shell Execution Requirements - jljusten/tianocore GitHub Wiki
The shell is explicitly defined as a UEFI 2.1+ Application. That means that is has a requirement on a completed system table and many protocols. The shell will use features only found in UEFI 2.3+ (such as SimpleTextInputEx), but will function with a reduced feature set without these features. Note that these reductions in functionality may make the the shell non-spec compliant.
The shell uses many functions found on the System Table or sub-tables.
- EFI Table Header
- ConsoleInHandle
- ConIn
- ConsoleOutHandle
- ConOut
- StandardErrorHandle
- StdErr
All major sections of this table are used.
- Event, Timer, and Task Priority Services
- Memory Allocation Services
- Protocol Handler Services
- Image Services
- Miscelaneous Boot Services
Many sections of this table are used.
- Variable Services
- Time Services
- Miscelaneous Runtime Services
The shell uses many UEFI standard protocols to perform.
- gEfiSimpleTextInProtocolGuid
- gEfiSimpleTextOutProtocolGuid
- gEfiSimpleFileSystemProtocolGuid
- gEfiLoadedImageProtocolGuid
- gEfiComponentName2ProtocolGuid
- gEfiUnicodeCollation2ProtocolGuid
- gEfiDevicePathProtocolGuid
- gEfiDevicePathToTextProtocolGuid
- gEfiPciRootBridgeIoProtocolGuid
- gEfiBlockIoProtocolGuid
These are used for shell nesting operations, but are not required by the first shell instance.
- gEfiShellProtocolGuid
- gEfiShellParametersProtocolGuid
Lacking these protocols will reduce the feature set.
- gEfiSimpleTextInputExProtocolGuid
The main shell and some commands will function without these. Some commands may not function.
- gEfiSimplePointerProtocolGuid
- gEfiDriverHealthProtocolGuid
- gEfiDriverFamilyOverrideProtocolGuid
- gEfiHiiConfigAccessProtocolGuid
- gEfiHiiDatabaseProtocolGuid
- gEfiCpuArchProtocolGuid
- gEfiIp6ProtocolGuid
- gEfiIp6ServiceBindingProtocolGuid
- gEfiIp6ConfigProtocolGuid