OS pertama saya dipicu oleh kafein.
Ini adalah proyek pembelajaran, kita akan melihat seberapa jauh kelanjutannya. Ketika saya mengatakan "dipicu oleh kafein", saya benar -benar berarti kafein, bukan kerangka kerja bangunan OS baru. Tapi itu akan menjadi nama yang cukup keren untuk kerangka kerja bangunan OS.
Saya menjalankan proyek ini di Ubuntu18.04 LTS. Saya menggunakan remote build menggunakan Visual Studio di PC, tetapi Anda bisa menggunakan Makefile langsung pada mesin Ubuntu. OS saya saat ini berjalan di VM di Ubuntu. Saya tidak akan merekomendasikan menjalankan ini "pada logam" karena kesalahan dapat membumbui komputer dengan mengubah bios dan data ROM. Berikut ini adalah paket yang saya instal untuk menyelesaikan proyek ini:
Makefile akan menghasilkan file ISO di lokasi yang sama dengan nama yang sama setiap kali dijalankan. Di VirtualBox, saya membuat VM bernama Caffeineos dengan RAM 512MB, tidak ada VDK/VMDK dan dengan media optik yang menunjuk pada file ISO dan kotak "CD Langsung" dicentang.
Bahkan file ISO akan berubah dengan setiap build, VM akan selalu pergi ke lokasi yang sama untuk menemukan ISO dan boot darinya.
Saat ini saya memiliki kernal yang dapat di -boot. Tidak ada apa -apa selain mencetak nama OS. Sejauh ini saya telah mengikuti totorial, tetapi sangat sedikit yang mencakup apa pun yang melewati titik ini. Tidak ada yang saya temukan menggunakan C ++, hanya C.
Saya meneliti apa bagian selanjutnya dari kernel yang harus saya bangun selanjutnya. Dugaan saya adalah memori dinamis. Saat ini saya mencapai output menggunakan alamat VGA untuk menulis teks ke layar. Saya belum menemukan masukan. Seperti yang saya katakan, tutorial tidak benar -benar melewati OS "halo dunia" yang dapat di -boot.
Saya telah mendeteksi RAM dan mendapat nilai yang membuat Sence (MEM ~ rendah = 640kb, rendah+HI ~ = 512MB), jadi saya sangat senang. Saya juga bisa mendapatkan string dari bootloader dengan melemparkan UInt32_t ke const char* dan mencetak array di pointer. Saya telah menggunakan spesifikasi multiboot.h dari situs GNU.org. File multiboot.h berisi deklarasi emmpty struct dan typedef yang cocok dengan bloksisasi info yang dikirimkan boot loader (grub2.02) melalui multiboot_info_t*. Dengan mengetahui blocksize, saya dapat memasukkan pointer ke dalam data yang saya butuhkan dari bootloader.