Files
Foundry-Boot/doc/uefi_boot.md
T
2025-02-25 01:14:52 +00:00

142 lines
3.3 KiB
Markdown

# UEFI Boot Process and Disk Layout
## Disk Layout with ESP (EFI System Partition)
```
Sector 0 (MBR/GPT):
+-----------------------------------+ 0x000
| Protective MBR |
| (For BIOS compatibility) |
+-----------------------------------+ 0x200
EFI System Partition (FAT32):
+-----------------------------------+ Sector 2048
| FAT32 Filesystem |
| /EFI/ |
| /BOOT/ |
| BOOTX64.EFI |
+-----------------------------------+
Main Partition (FAT32):
+-----------------------------------+
| FAT32 Filesystem |
| (Kernel and other files) |
+-----------------------------------+
```
## UEFI Boot Process
1. **System Startup**
- Firmware initializes hardware
- Loads UEFI runtime services
- Sets up initial page tables and long mode
- CPU already in 64-bit mode
2. **Boot Manager**
- Scans for bootable devices
- Looks for EFI System Partition (ESP)
- Searches for bootloader at `/EFI/BOOT/BOOTX64.EFI`
3. **UEFI Bootloader**
- Already in long mode (64-bit)
- Has access to UEFI services:
- File operations
- Memory management
- Video output
- ACPI tables
- Tasks:
- Load kernel from main partition
- Set up memory map
- Exit boot services
- Jump to kernel
4. **Kernel Load**
- Bootloader passes:
- Memory map
- Framebuffer info
- ACPI tables
- Kernel takes control
## Key Differences from BIOS
1. **Initial State**
- BIOS: 16-bit real mode
- UEFI: 64-bit long mode
2. **Services**
- BIOS: Limited interrupt-based services
- UEFI: Rich API for system services
3. **Memory Management**
- BIOS: Manual memory detection needed
- UEFI: Provides memory map and allocation services
4. **File Access**
- BIOS: Manual disk I/O and filesystem parsing
- UEFI: Built-in filesystem support
5. **Graphics**
- BIOS: VGA/VBE modes
- UEFI: GOP (Graphics Output Protocol)
## UEFI Boot Services
```
Available until ExitBootServices() is called:
- Memory allocation
- File system access
- Graphics output
- Timer services
- Environment variables
Runtime Services (available after boot):
- Time services
- Variable services
- Reset system
- Virtual memory services
```
## Memory Map Example
```
Type Physical Address Range
EfiLoaderCode 0x0000000000000000-0x0000000000100000
EfiLoaderData 0x0000000000100000-0x0000000000200000
EfiBootServicesCode 0x0000000000200000-0x0000000000300000
EfiBootServicesData 0x0000000000300000-0x0000000000400000
EfiConventionalMemory 0x0000000000400000-...
EfiACPIReclaimMemory ...
EfiACPIMemoryNVS ...
EfiReservedMemoryType ...
```
## Required UEFI Protocols
```
- EFI_LOADED_IMAGE_PROTOCOL: Access to bootloader image info
- EFI_SIMPLE_FILE_SYSTEM_PROTOCOL: File operations
- EFI_GRAPHICS_OUTPUT_PROTOCOL: Display output
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL: Text output
```
## Boot Flow Control
```
UEFI Firmware
Boot Manager
BOOTX64.EFI
├── Get System Info
│ ├── Memory Map
│ ├── ACPI Tables
│ └── GOP Info
├── Load Kernel
│ └── Parse FAT32
├── ExitBootServices()
└── Jump to Kernel
└── Pass Boot Info
```