Selamat datang di artikel penutup dari seri pembedahan booting UEFI. Kita telah menempuh perjalanan panjang: dari memahami keterbatasan BIOS, menelusuri struktur GPT, hingga “bercerai” dengan firmware melalui ExitBootServices. Sekarang, kita berada di gerbang terakhir: Handover ke Kernel.
Artikel final ini akan membahas bagaimana RezaOS beralih dari sekadar “Aplikasi UEFI” menjadi sebuah Sistem Operasi mandiri yang berjalan di mode 64-bit sepenuhnya.
1. Menyiapkan Biner Kernel: ELF64 vs Raw Binary
Sebelum bootloader bisa melompat ke kernel, kita harus menentukan bagaimana kernel disimpan di dalam disk.
- Raw Binary: Kernel disimpan sebagai aliran instruksi mentah. Sangat sederhana, namun bootloader harus tahu persis di mana entry point-nya berada (misal: selalu di byte ke-0).
- ELF64 (Executable and Linkable Format): Ini adalah format standar industri (digunakan oleh Linux). ELF menyimpan informasi detail tentang di mana kode (
.text) dan data (.data) harus diletakkan di RAM.
Untuk RezaOS, menggunakan format ELF64 sangat disarankan. Bootloader kita akan membaca Header ELF, mengalokasikan memori sesuai permintaan kernel, dan menyalin setiap bagian ke alamat yang tepat.
2. Struktur “Boot Info”: Jembatan Informasi
Saat kita melakukan lompatan (jump) ke kernel, kita tidak bisa datang dengan tangan kosong. Kernel butuh data yang telah dikumpulkan oleh bootloader saat masih di fase UEFI. Kita membungkus data ini dalam sebuah struct bernama BootInfo.
Data wajib di dalam BootInfo:
- Alamat Framebuffer: Lokasi memori video agar kernel bisa menggambar di layar.
- Memory Map: Daftar RAM yang kosong dan yang terpakai.
- Pointer ACPI: Alamat tabel konfigurasi hardware (untuk mendeteksi jumlah Core CPU dan manajemen daya).
- Font Data: Jika kernel ingin menulis teks, bootloader harus memberikan data font (bitmap).
Tanpa informasi ini, kernel akan buta terhadap hardware saat pertama kali bangun.
3. Lompatan Terakhir: The Leap of Faith
Setelah ExitBootServices dipanggil dan pointer kernel sudah siap di RAM, kita melakukan “Lompatan Besar”. Secara teknis di bahasa C, ini dilakukan dengan mengubah alamat memori kernel menjadi sebuah function pointer.
C
// Definisi tipe fungsi kernel: menerima pointer ke BootInfo
typedef void (*KernelEntry)(BootInfo*);
// Casting alamat kernel ke tipe fungsi
KernelEntry rezaos_kernel = (KernelEntry)KernelAddress;
// LOMPAT!
rezaos_kernel(myBootInfo);
Pada titik ini, instruksi selanjutnya yang dieksekusi CPU bukan lagi milik UEFI, melainkan kode kernel RezaOS yang Anda tulis.
4. Tugas Pertama Kernel 64-bit
Begitu mendarat di dalam kernel, Anda berada di “alam liar”. Anda tidak punya bantuan apa pun. Tugas pertama kernel adalah:
- Inisialisasi GDT & IDT Baru: UEFI memang memberikan GDT, tapi kernel harus punya sendiri yang disimpan di memori kernel agar aman. IDT (Interrupt Descriptor Table) wajib dibuat agar kernel bisa menangani Keyboard dan Mouse.
- Physical Memory Manager (PMM): Berdasarkan Memory Map dari UEFI, kernel mulai menandai mana RAM yang bisa dipakai untuk aplikasi dan mana yang tidak.
- Virtual Memory (Paging): Kernel akan mengatur ulang tabel paging (PML4) untuk memetakan kernel ke alamat tinggi (misal di area -2GB).
5. Ringkasan Seri: Perjalanan Booting Lengkap
| Tahapan | Aksi Utama | Penanggung Jawab |
| Power On | SEC/PEI/DXE Phases | Firmware UEFI |
| Pemuatan | Mencari /EFI/BOOT/BOOTX64.EFI | UEFI Boot Manager |
| Inisialisasi | Cari Protokol GOP, Alokasi RAM | Bootloader RezaOS |
| Loading | Baca Kernel ELF dari Disk ke RAM | Bootloader RezaOS |
| Handover | ExitBootServices & Simpan BootInfo | Bootloader RezaOS |
| Execution | Lompat ke Entry Point Kernel | Bootloader -> Kernel |
| Running | Inisialisasi IDT, GDT, Penjadwalan | Kernel RezaOS |
Kesimpulan Akhir
Mengembangkan sistem operasi melalui jalur UEFI memberikan kita keuntungan luar biasa: kita memulai di dunia 64-bit yang modern, bukan di dunia 16-bit yang gelap. Meskipun proses ExitBootServices dan pemuatan ELF terlihat rumit, ini adalah standar profesional yang akan menjamin RezaOS kompatibel dengan berbagai perangkat modern, mulai dari laptop hingga server.
Dengan selesainya seri artikel ini, Anda kini memiliki peta jalan yang lengkap untuk membangun sistem operasi masa depan. Selamat datang di dunia System Programming yang sesungguhnya!
Terima kasih telah mengikuti seri Membedah Arsitektur Booting UEFI ini.
