Menambahkan Bootloader ke VirtualBox Disk Image (Vdi)


Di Internet, banyak sekali tutorial membuat bootloader sendiri, mulai dari bootloader yang tidak melakukan apa-apa hingga bootloader yang dapat memanggil kernel dari hard disk. Kelemahan tutorial yang ada di Internet adalah kebanyakan harus melakukan emulasi floppy disk di Virtual Machine (biasanya Qemu atau Bosch). Oleh karena Qemu dan Bosch kurang populer untuk kalangan awam, di sini saya akan tunjukkan cara menggunakan VirtualBox untuk mencoba bootloader buatan sendiri.

Bootloader adalah program yang berukuran 512 byte dan terletak di sektor pertama sebuah hard disk (yang disebut juga dengan boot sector). Tugas dari bootloader adalah untuk meload kernel (sistem operasi). Salah satu ciri program bootloader adalah 2 byte terakhirnya, yaitu byte ke 511 dan 512, berisi bilangan heksadesimal 0xAA dan 0x55.

Berikut adalah contoh program bootloader (boot.asm) yang mencetak “Hello World” di layar ketika dijalankan.

Untuk penjelasan setiap baris dapat dilihat di sini.

Program bootloader ini dapat di-compile menggunakan Netwide Assembler (NASM), yaitu dengan mengetikkan perintah berikut:

compile_bootloader1

Hasil dari kompilasi adalah program binary boot.bin. Anda dapat melihat bahwa ukuran program ini tepat 512 byte.

Selanjutnya adalah meletakkan boot.bin di 512 byte pertama dari VirtualBox disk image yang kita gunakan. Saya asumsikan bahwa Anda dapat membuat satu virtual machine dari VirtualBox ini dan menggunakan disk image tipe Vdi.

Langkah terakhir adalah dengan menyalin byte demi byte dari program boot.bin ke sector pertama dari Vdi. Untuk itu, Anda membutuhkan sebuah program Hex Editor. Saya sendiri menggunakan Bless Hex Editor. Berikut adalah screenshot dari isi Vdi yang saya buat (Saya buat Vdi fixed-size sebesar 32MB).

vdi_hex_content

Dari Bless Hex Editor terlihat bahwa isi byte-byte pertama dari Vdi bukanlah bootsector. Lalu, di manakah letak bootsector dari Vdi? Untuk mengetahuinya, saya melakukan penghitungan berikut.

Saya menciptakan hard disk 32 MB, yang artinya terdapat 1024 * 1024 * 32 byte = 33.554.432 byte.  Selanjutnya, di Bless Hex Editor saya lihat bahwa offset byte terakhir adalah 0x2001FFF byte atau samadengan terdapat 33.562.624 byte dalam Vdi. Dengan demikian, terdapat selisih 8192 byte (8KB). Saya berkesimpulan bahwa 8KB ini digunakan untuk metadata Vdi. Sector hard disk dimulai di byte ke 8193, atau offset 0x2000.

Dengan pengetahuan ini, saya buka boot.bin di Bless Hex Editor, lalu saya salin semua 512 byte ke Vdi dimulai di byte ke 8193 (atau offset 0x2000 – ingat offset mulai dari 0x00). Lalu, periksa jika ukuran Vdi sekarang bertambah 512 byte. Jika ya, hapus 512 byte tambahan yang berisi 0x00 sehingga jumlah byte di Vdi tetap seperti sebelumnya, yaitu 33.562.624 byte.

Setelah Anda simpan file Vdi, cobalah boot Virtual Machine Anda. Seharusnya sekarang Virtual Machine Anda akan booting ke teks “Hello World”.

hello_world


2 responses to “Menambahkan Bootloader ke VirtualBox Disk Image (Vdi)”

Leave a Reply