Saya mencoba membuat OS di Assembly-Fun. Saya gagal. Kode itu kerak. Ini adalah upaya kedua saya, saya kira.
Saya menggunakan limine bootloader dengan protokol silang.
Karena repo ini menggunakan limine sebagai submodule, Anda harus mengkloning repo ini secara rekursif menggunakan:
git clone --recursive https://github.com/soumitradev/BruhOS.git
Menyiapkan kompiler silang sangat disarankan jika Anda ingin mengkompilasi proyek ini. File Basic toolchain.sh termasuk dalam root repo ini yang menginstal kompiler silang untuk platform X86_64 untuk file ELF.
Setelah menginstal Cross Compiler, Anda dapat menjalankan make run untuk menjalankan OS di QEMU.
Sampai sekarang, perintah membuat berikut tersedia:
make all : Buat file .hdd untuk OS. Itu saja.make disk : Buat file .hdd untuk OS. Itu saja.make run : Buat file .hdd untuk OS dan jalankan di QEMU.make log : Buat file .hdd untuk OS, jalankan, dan biarkan QEMU menghasilkan log.make logs : Buat file .hdd untuk OS, jalankan, dan biarkan QEMU menghasilkan log.make debug : Buat file .hdd untuk OS, jalankan, dan lampirkan ke GDB untuk debugging.make clean : Bersihkan direktori yang berfungsi dan lepaskan semua artefak build. Menjalankan skrip toolchain.sh akan menginstal kompiler silang di ~/.local/bin/cross_compiler/x86_64/ . Ini termasuk GCC, GDB, dan binutils. Binari Cross Compiler memiliki awalan x86-64-elf- . Jadi misalnya, untuk menjalankan gcc , Anda harus menjalankan ~/.local/bin/cross_compiler/x86_64/bin/x86-64-elf-gcc . Perhatikan bagaimana awalan diisi ke biner yang ingin kami jalankan.
Catatan: Untuk membuat proses ini lebih cepat, Anda harus mengatur jumlah utas sebagai variabel, yang biasanya 1 lebih dari jumlah utas yang dimiliki mesin Anda. Mesin saya memiliki 8 utas, jadi saya atur variabel THREADS di skrip toolchain.sh ke 9. Silakan periksa jumlah utas yang Anda miliki, dan ubah variabel itu dalam skrip toolchain.sh yang sesuai.
Pada saat penulisan, versi GCC, GDB dan Binutils terbaru masing -masing adalah 10.2.0, 9.2 dan 2.35. Jika Anda menginginkan versi yang berbeda, ganti variabel BINUTILSVERSION , GCCVERSION , dan GDBVERSION dalam skrip toolchain.sh yang sama.
Catatan: Jangan jalankan skrip ini sebagai superuser. Menjalankan skrip akan membutuhkan koneksi internet yang stabil dan secangkir kopi karena butuh waktu;)
Limine adalah bootloader paling epik yang pernah ada.
QWORD, ROCK, dan DRIPOS sangat membantu. Kode ini cukup banyak clusterfuck dari kode mereka. Kode mereka ditulis dengan baik, mudah dimengerti dan secara keseluruhan merupakan tempat yang tepat untuk mulai belajar Osdev.
Osdev Discord Server juga merupakan tempat yang tepat untuk belajar, mengajukan pertanyaan, dan umumnya merupakan komunitas yang hebat.
Tangkapan layar karena tidak sepadan dengan waktu yang dihabiskan untuk mendapatkan toolchain untuk menguji kernel setengah jadi.


Semua file menggunakan standar C ++ 17, jangan gunakan pustaka standar apa pun kecuali libgcc (jelas untuk pengembangan OS/kernel). Semua file objek dan file pembuatan kernel harus dibersihkan sebelum berkomitmen menggunakan make clean atau menghapus file secara manual. Gitignore menyertakan beberapa filter dasar, tetapi selalu memeriksa ulang Anda tidak melakukan artefak build.
Semua file kecuali Makefile adalah ruang indentasi dengan indentasi dengan 2 spasi. Ya, saya suka 4 ruang, tetapi memiliki beberapa pengalaman sebelumnya, ini dapat menghasilkan pohon seperti pohon besar, dan terlihat lebih bersih dengan 2 lekukan ruang. Makefile membutuhkan lekukan tab menurut definisi. Memformatnya akan menyebabkannya rusak.
Pastikan Anda menggunakan pedoman pemformatan Google . Ini dapat diatur dalam kode VS.
Jangan mendorong komitmen apa pun tanpa menguji dan memastikan mereka bekerja.
Jika fitur dasar berfungsi karena dimaksudkan untuk digunakan, dorong komit Anda. Saya tidak berharap Anda kehilangan setiap cacat keamanan dan menambalnya sebelum mendorong.
Saya dapat menambahkan skrip pemeriksaan pra-dusun nanti yang memastikan bahwa kode Anda mengikuti standar ini.