#: Train-OS Sesi pelatihan untuk membangun sistem operasi. Mulai dari bawah ke atas, hanya menggunakan sumber daya dari AMD dan Intel .
Masih di Tahap Alpha
Repositori ini belum dipoles dan masih harus dianggap dalam tahap alfa. Kode harus dikompilasi dan berfungsi, tetapi SMS hanyalah draf pertama yang saya catat selain ketika saya mengkode dan meneliti.
Apa yang berbeda dengan tutorial lainnya?
Ada banyak tutorial dan sebagian besar bahan yang saya sajikan juga tercakup di sana. Jadi mengapa repot -repot? Saya terutama suka dan terinspirasi oleh ini:
- Phil Todo: Tautan
- Intermezzos: Todo: Link
Apa bedanya dalam versi ini? Ketika saya belajar hal -hal baru, saya sering merasa bahwa saya tidak tahu/belajar bagaimana saya bisa melakukan apa yang baru saja saya lakukan sendiri di waktu berikutnya. Saya tidak tahu apakah itu cara saya belajar atau hanya hal khas yang mudah dihilangkan saat menulis tutorial. Berikut adalah beberapa poin yang saya heran tentang secara teratur dan bahwa saya ingin membahas (saya mungkin akan kehilangan hal -hal penting lainnya untuk menebusnya)
- Berikan beberapa detail lebih lanjut tentang poin apa yang hanya merupakan konvensi yang disepakati, apa standar, apa yang spesifik arsitektur. Saya masih ingat ketika saya pertama kali mulai belajar pemrograman sebagai remaja saya seperti "Uuhh ... bagaimana komputer tahu bahwa fungsi utama harus disebut terlebih dahulu", dan tidak ada teman atau guru saya yang baru. Itu hanya "sihir". Hal -hal ini mengganggu saya, saya ingin uderstand dari mana hal -hal berasal dari ...
- Arahkan ke standar dan bekerja dari sana. Saya tidak akan menyajikan solusi yang sudah selesai yang baru saja Anda salin. Kami mengambil standar, dan benar -benar mencari segalanya . Sama seperti kita harus melakukannya jika kita ingin menjalankan kode pada Katakanlah korteks lengan alih -alih mesin x86_64 Anda. Atau, dibingkai secara berbeda, bagaimana jika kita akan menjadi yang pertama menulis tutorial, bagaimana kita akan mendapatkan bootloader itu, interupsi dikonfigurasi atau CPU ke mode 64-bit di tempat pertama?
- Lakukan sesuatu dua kali. Saya pertama -tama saya akan pergi barebones, ini membantu untuk memahami apa yang terjadi dan kemudian, kami menggunakan perkakas untuk menghindari melakukan pekerjaan dasar itu setiap saat.
- Langkah menengah dan "pos pemeriksaan"
- Berikan garis besar terlebih dahulu -> untuk melihat gambaran yang lebih besar
- Berikan contoh ke dalam kode nyata -> misalnya bahwa tempat sampah kernel pertama sebenarnya persis bagaimana linux dibangun
- menyajikan alternatif/pilihan untuk setiap
dependency yang kita mulai gunakan. Bagi saya itu mengecewakan jika saya ingin mengikuti tutorial dan banyak perpustakaan eksternal melakukan keajaiban yang sebenarnya ingin saya pelajari.
Garis besar
Garis besar dari apa yang ingin saya lakukan. Semoga, dalam urutan yang kurang lebih kronologis. Intinya adalah bahwa ada begitu banyak yang bisa kami lakukan sehingga sebenarnya cukup sulit untuk memilih jalan.
Pertama, saya ingin mendapatkan pemahaman yang lebih baik tentang proses boot. Apa yang terjadi sebelum bootloader masuk. Sebenarnya menggulung bootloader Anda sendiri (tautan ke OSDEV) adalah tugas besar dengan sendirinya.
Rencana saya adalah menjelajahi fase awal dalam proses boot sedikit. Tujuannya adalah untuk memahami dan menghargai apa yang dilakukan bootloader untuk kita. Pada akhirnya, saya ingin memiliki pemahaman kasar tentang mode prosesor yang berbeda, apa yang mereka tawarkan dan cara beralih ke mode lindung 32-bit. Tujuan konkret adalah untuk dapat beralih ke mode yang dilindungi dan mencetak Hello World! ke layar. Semuanya diimplementasikan dalam perakitan dan tanpa menggunakan boot loader.
Setelah itu, saya berencana untuk beralih dan menggunakan Grub sebagai bootloader. Dan lanjutkan dari sana.
Tl; dr
- Tulis gambar yang dapat di -boot minimal.
- Bootloader yang mencetak
Hello World dalam mode nyata 16-bit. - Beralih secara manual ke mode lindung 32-bin dan cetak
Hello World . - Beralih secara manual ke mode panjang 64 bin
- Gunakan grub sebagai bootloader dan cetak
Hello World . - Beralih ke mode panjang (lagi).
- Lompat ke
C , cetak Hello World . - Tumpukan
- Menerapkan driver video VGA.
- Interupsi (Bagian 1) - Beri tahu CPU di mana menemukan penangan, di ASM
- Interupsi (bagian 2) - pindahkan kode dari 10. ke atas ke c
- Menerapkan penangan yang lebih baik
- Debugging
- Tangani interupsi/pengecualian
- Menerapkan paging memori.
- Renovasi kernel
Tidak ditentukan:
- refactoring?
- utilitas (memset?)
Kemudian...
- sistem file
- proses
- penjadwalan
- Panggilan Sistem
- Jelajahi tumpukan, provoke stack overflows dan pengecualian
- Terhubung dengan GDB melalui UART (untuk debugging dan pratinjau tertanam)
- Kompilasi silang beberapa (atau banyak) bagian ke prosesor lengan. (Saya memiliki papan STM dan Infineon yang tergeletak di sekitar yang tidak digunakan)
Prasyarat?
Tidak ada. Serius, jangan takut. Inti dari tutorial ini adalah untuk mengembangkan semua pengetahuan yang diperlukan dari bawah ke atas. Hanya ada satu kondisi yang saya asumsikan, dan itu adalah Anda dapat memprogram dengan sopan. Maksud saya, Anda setidaknya telah mendengar tentang tumpukan dan tumpukan dan bisa menjadi produktif dalam beberapa bahasa. Saya kira itu sudah cukup. Lagi pula, kami tidak mencoba mengembangkan OS arus utama gen berikutnya di sini, kami mengutak -atik tingkat hobi.
Dan satu hal yang dapat saya jamin: bahkan jika Anda tidak akan pernah menyentuh kode ini lagi dan tidak akan pernah menulis OS. Pengalaman akan mengubah pemahaman Anda tentang sistem yang Anda kerjakan secara mendalam . Pengetahuan yang diperoleh dari pengembangan di tingkat kernel menyebar seperti biji sepanjang karier Anda dan wawasan akan terbukti berguna pada saat -saat yang paling tidak terduga.
Scratchpad (ide yang tidak terorganisir dari sini)
Ide
- Apa yang dilakukan CPU jika Anda memberikan instruksi setelah 512 byte pertama? Apakah mereka dieksekusi? (CPU dalam mode nyata 16-bit)
Garis besar
- Bootload -> Dua pilihan menggulung sendiri atau menggunakan grub yang ada, misalnya.
- Mode 16bit
- Memasuki Mode Lindung 32bit
- Memasuki mode panjang 64bit
- masukkan c
- Tulis Modul Manajer Memori
Siklus 0 - Lingkungan & Toolchain Kompilasi Lintas -Kompilasi
- Anda dapat melewatkan beberapa langkah. Kami tidak akan membutuhkan toolchaine kompilasi silang sebelum sebelum kami mulai menulis kode C.
- Mulailah membangun toolchain Anda di suatu tempat di bawah $ rumah
- Pastikan ruang lingkup variabel lingkungan sudah benar
- Kesalahan seperti "tidak memiliki izin untuk membuat direktori
/usr/lib/i686-elf " menunjukkan bahwa $PREFIX tidak diatur dengan benar. - Kami tidak mendapatkan CPU barebones yang "asli", masih ada bios di hadapan kami. Ini menginisialisasi CPU dan menyerahkan kepada kami dengan CPU dalam mode nyata.
Siklus 0 - Bootloader
Sumber daya
- Dokumentasi NASM https://www.nasm.us/xdoc/2.14.02/html/nasmdoc3.html
- Manual Intel