Sistem operasi yang ditulis dengan karat.
Untuk membangun OS, pastikan untuk menggunakan Rust Build nightly . Ini diperlukan karena penggunaan beberapa bendera dan properti yang tidak stabil yang hanya tersedia di build nightly .
Catatan: Target telah ditentukan dalam
.cargo/config.toml.
cargo buildCatatan: Jika menyusun target khusus, Anda dapat mengganti target menggunakan flag
--target <target>.
cargo build --target x86_64-fractal_os.json Untuk membuat gambar yang dapat di -boot, kami menggunakan ketergantungan bootloader. Bersamaan dengan itu, kami akan menggunakan alat bootimage untuk mengkompilasi kernel dan bootloader dan menautkannya bersama.
Pastikan Anda telah menginstal bootimage.
cargo install bootimageCatatan: Untuk menjalankan bootimage dan membangun bootloader, Anda harus menginstal komponen Rustup
llvm-tools-preview.
rustup component add llvm-tools-previewSetelah dependensi dan alat telah diinstal, Anda dapat menjalankan bootimage kargo untuk membuat gambar disk yang dapat di -boot.
cargo bootimageSetelah menghasilkan file gambar yang dapat di -boot, Anda dapat menjalankan fraktal dengan mudah pada emulator seperti QEMU.
qemu-system-x86_64 -drive format=raw,file=target/x86_64-fractal_os/debug/bootimage-fractal_os.binAnda juga dapat menjalankannya dengan pelari kargo dengan bantuan pelari bootimage.
cargo runDi atas akan menunjuk ke build terakhir dari gambar yang dapat di -boot dan akan memulai instance qemu. Anda juga dapat memberikan target spesifik dan melewati opsi QEMU.
cargo run --target < target > -- [QEMU options] Segala sesuatu setelah -- akan diteruskan ke QEMU.
Untuk menjalankan kerangka tes khusus untuk Fractalos, Anda dapat menjalankan perintah tes kargo.
cargo testIni akan menjalankan semua tes unit dan integrasi.
Catatan: Tes integrasi terletak di bawah
/testsDirektori, sementara uji unit mandiri dalam file implementasi konkret/src.
Kernel menggunakan peti compiler_builtins bersama dengan mem . Namun fungsinya cukup tidak dioptimalkan. Saat ini ada PR terbuka terhadap masalah ini, jadi ini perlu menggunakan implementasi fungsi kami sendiri seperti memcmp dan memcpy atau tunggu sampai PR ini bergabung.
Sebagai seorang insinyur perangkat lunak dengan latar belakang EEE (teknik listrik dan elektronik), saya selalu senang mengetahui apa yang membuat segalanya berdetak, dan cara apa yang lebih baik untuk mengetahui bagaimana sistem operasi bekerja bersama dengan semua perangkat keras, dan perangkat lunaknya selain menulis sendiri?
Pada saat yang sama menjelajahi apa yang membuat semua elemen sistem operasi yang bersih, saya juga belajar karat. Saya merasa sangat menyenangkan.
Ini hanya beberapa hal penting yang sedang dalam perjalanan untuk diterapkan. Tidak berurutan.