Setelah pada pembahasan sebelumnya kita berhasil menaklukkan BIOS Real Mode dan menampilkan teks ke layar menggunakan interupsi 0x10, kini saatnya kita melangkah ke era modern: UEFI (Unified Extensible Firmware Interface).
Jika BIOS membatasi kita pada mode 16-bit dengan memori yang sangat sempit, UEFI membuka pintu menuju arsitektur 64-bit sejak detik pertama booting. Mari kita bedah prosedur pembuatannya di lingkungan Fedora.
1. Persiapan Environment (Fedora)
Berbeda dengan pengembangan BIOS yang cukup menggunakan NASM, pengembangan UEFI membutuhkan EDK2 (EFI Development Kit II) dari TianoCore. Karena kita menggunakan Fedora, kita akan menggunakan dnf untuk memasang dependensi yang diperlukan.
Install Dependensi
Buka terminal dan jalankan perintah berikut:
sudo dnf groupinstall "Development Tools" "C Development Tools and Libraries"
sudo dnf install libuuid-devel acpica-tools nasm python3 git qemu-system-x86 ovmf
Setup EDK2
Kita akan mengunduh framework EDK2. Ini bukan sekadar kompiler, melainkan SDK lengkap yang menyediakan pustaka standar untuk berkomunikasi dengan firmware.
git clone --recursive https://github.com/tianocore/edk2.git
cd edk2
source edksetup.sh
make -C BaseTools
2. Struktur Proyek: Hello World UEFI
Dalam UEFI, kita tidak lagi menulis kode di sektor nol (MBR). Kita menulis aplikasi .efi dalam bahasa C. Mari kita buat folder proyek baru di dalam direktori edk2 dengan nama RezaPkg.
File 1: HelloWorld.c
File ini berisi logika utama. Perhatikan bahwa kita tidak menggunakan main(), melainkan UefiMain.
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h>
EFI_STATUS
EFIAPI
UefiMain (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
// Mencetak string ke layar (Ekuivalen dengan INT 10h di BIOS)
Print(L"Hello UEFI World dari Fedora!\n");
Print(L"Tekan tombol apa saja untuk keluar...\n");
// Reset input buffer
SystemTable->ConIn->Reset(SystemTable->ConIn, FALSE);
// Menunggu keypress (Ekuivalen dengan INT 16h di BIOS)
EFI_INPUT_KEY Key;
UINTN Index;
gBS->WaitForEvent(1, &SystemTable->ConIn->WaitForKey, &Index);
SystemTable->ConIn->ReadKeyStroke(SystemTable->ConIn, &Key);
return EFI_SUCCESS;
}
File 2: HelloWorld.inf
Ini adalah file deskripsi yang memberitahu EDK2 bagaimana cara mengompilasi kode kita.
Ini, TOML
[Defines]
INF_VERSION = 0x00010005
BASE_NAME = HelloWorld
FILE_GUID = 12345678-1234-1234-1234-123456789012
MODULE_TYPE = UEFI_APPLICATION
VERSION_STRING = 1.0
ENTRY_POINT = UefiMain
[Sources]
HelloWorld.c
[Packages]
MdePkg/MdePkg.dec
[LibraryClasses]
UefiApplicationEntryPoint
UefiLib
3. Proses Build dan Uji Coba
Untuk mengompilasi kode di atas, kita harus mendaftarkan paket RezaPkg ke dalam file konfigurasi utama EDK2 (biasanya MdeModulePkg/MdeModulePkg.dsc di bagian [Components]), lalu jalankan:
Bash
# Build menggunakan GCC5 yang ada di Fedora
build -a X64 -t GCC5 -p MdeModulePkg/MdeModulePkg.dsc
Menjalankan di QEMU
Setelah berhasil, kita akan mendapatkan file HelloWorld.efi. Kita bisa mengujinya menggunakan emulator QEMU dengan mengarahkan BIOS-nya ke file OVMF (Open Virtual Machine Firmware):
Bash
qemu-system-x86_64 -bios /usr/share/OVMF/OVMF_CODE.fd -net none -drive file=fat:rw:Build/MdeModule/DEBUG_GCC5/X64/,format=raw
4. BIOS vs UEFI: Apa Bedanya?
Bagi teman-teman yang mengikuti seri OSDev ini dari awal, berikut adalah tabel komparasi teknis untuk memudahkan pemahaman:
| Fitur | BIOS (Legacy) | UEFI (Modern) |
| Bahasa Utama | Assembly (Low Level) | C (High Level) |
| Mode Prosesor | 16-bit Real Mode | 64-bit Protected/Long Mode |
| Metode Pemanggilan | Interrupt (int 0x10, int 0x13) | Protocol & Service Calls (gBS->...) |
| Limitasi Memori | 1 MB pertama | Tidak terbatas (Akses RAM Penuh) |
| Identifikasi | Berdasarkan lokasi sektor (LBA) | Berdasarkan GUID dan sistem file FAT32 |
Kesimpulan
Beralih ke UEFI bukan berarti kita meninggalkan dasar-dasar sistem operasi, melainkan kita berpindah ke standar industri yang lebih efisien dan kuat. Dengan EDK2 di Fedora, kita memiliki alat yang sangat tangguh untuk membangun bootloader yang mampu memuat kernel sistem operasi modern.
