142 lines
3.3 KiB
Markdown
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
|
|
```
|