

Ini adalah seri tutorial untuk pengembang Hobby OS yang baru mengenal arsitektur 64 bit ARMV8-A ARM. Tutorial akan memberikan tur selangkah demi selangkah, tentang cara menulis kernel sistem operasi monolitik untuk embedded system dari awal. Mereka mencakup implementasi tugas sistem operasi umum, seperti menulis ke konsol serial, mengatur memori virtual dan menangani pengecualian HW. Semuanya sambil memanfaatkan fitur unik Rust untuk menyediakan keselamatan dan kecepatan.
Selamat bersenang-senang!
Salam,
Andre (@andre-richter)
PS: Untuk bahasa lain, silakan cari file readme alternatif. Misalnya, README.CN.md atau README.ES.md . Terima kasih banyak kepada penerjemah kami?
kernel yang berdiri sendiri dan dapat di-boot.README tutorial akan memiliki bagian tl;dr memberikan gambaran singkat tentang penambahan, dan menunjukkan kode sumber diff ke tutorial sebelumnya, sehingga Anda dapat dengan mudah memeriksa perubahan/penambahan.tl;dr . Rencana jangka panjang adalah bahwa semua tutorial mendapatkan teks lengkap, tetapi untuk saat ini ini adalah eksklusif untuk tutorial di mana saya berpikir bahwa tl;dr dan diff tidak cukup untuk mendapatkan ide.QEMU .UART .make doc di setiap tutorial. Ini memungkinkan Anda menelusuri kode yang didokumentasikan secara luas dengan cara yang nyaman.make doc 
Tutorial tersebut terutama ditargetkan pada distribusi berbasis Linux . Sebagian besar barang juga akan bekerja pada macOS , tetapi ini hanya eksperimental .
Pasang mesin Docker.
( Linux saja ) Pastikan akun pengguna Anda ada di grup Docker.
Siapkan Rust toolchain. Sebagian besar akan ditangani pada penggunaan pertama melalui file rust-toolchain.toml. Yang tersisa untuk kita lakukan adalah:
Jika Anda sudah memiliki versi karat yang diinstal:
cargo install cargo-binutils rustfiltJika Anda perlu menginstal karat dari awal:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME /.cargo/env
cargo install cargo-binutils rustfilt Jika Anda menggunakan Visual Studio Code , saya sangat menyarankan untuk menginstal ekstensi Rust Analyzer.
( Hanya macOS ) Pasang beberapa permata Ruby .
Ini terakhir diuji oleh penulis dengan Ruby versi 3.0.2 di macOS Monterey . Jika Anda menggunakan rbenv , file .ruby-version masing-masing sudah ada. Jika Anda tidak pernah mendengar tentang rbenv , coba gunakan panduan kecil ini.
Jalankan ini di folder root repositori:
bundle config set --local path ' .vendor/bundle '
bundle config set --local without ' development '
bundle install Seri ini mencoba untuk menempatkan fokus yang kuat pada keramahan pengguna. Oleh karena itu, upaya dilakukan untuk menghilangkan titik nyeri terbesar dalam pengembangan tertanam sebanyak mungkin: Toolchain hassle .
Rust sendiri sudah banyak membantu dalam hal itu, karena memiliki dukungan bawaan untuk kompilasi silang. Semua yang kita butuhkan untuk kompilasi silang dari host x86 ke arsitektur AArch64 Raspberry Pi akan dipasang secara otomatis oleh rustup . Namun, selain kompiler karat, kami akan menggunakan beberapa alat lagi. Antara lain:
QEMU untuk meniru kernel kami pada sistem host.Minipush untuk memuat kernel ke raspberry pi on-demand di atas UART .OpenOCD dan GDB untuk debugging pada target.Ada banyak hal yang salah saat menginstal dan/atau menyusun versi yang benar dari setiap alat pada mesin host Anda. Misalnya, distribusi Anda mungkin tidak memberikan versi terbaru yang diperlukan. Atau Anda kehilangan beberapa dependensi yang sulit didapat untuk kompilasi salah satu alat ini.
Inilah sebabnya kami akan menggunakan Docker jika memungkinkan. Kami menyediakan wadah yang menyertainya yang memiliki semua alat atau dependensi yang dibutuhkan sebelumnya, dan ditarik secara otomatis setelah dibutuhkan. Jika Anda ingin tahu lebih banyak tentang Docker dan mengintip wadah yang disediakan, silakan merujuk ke folder Docker Repositori.
Karena kernel yang dikembangkan dalam tutorial berjalan pada perangkat keras yang sebenarnya, sangat disarankan untuk mendapatkan kabel serial USB untuk mendapatkan pengalaman penuh.
CP2102 .GND dan GPIO 14/15 seperti yang ditunjukkan di bawah ini.chainloader dikembangkan, yang akan menjadi file terakhir yang perlu Anda salin secara manual pada kartu SD untuk sementara waktu. Ini akan memungkinkan Anda untuk memuat kernel tutorial selama boot sesuai permintaan melalui UART . 
Versi asli dari tutorial dimulai sebagai garpu tutorial luar biasa Zoltan Baldaszti tentang pemrograman logam telanjang di RPI3 di C . Terima kasih telah memberi saya awal!
Berlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus dilisensikan ganda seperti di atas, tanpa syarat atau ketentuan tambahan.