wrote a basic bootloader
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user