
Peringatan! Hampir belum ada yang lengkap. Semuanya di sini bersifat eksperimental dan dalam pengembangan yang sangat aktif. Lanjutkan dengan hati -hati.
Komputer itu aneh . Aneh dalam arti bahwa mereka merasa ajaib jika Anda tidak tahu cara kerjanya. Jika, dan kapan, Anda mulai belajar cara kerjanya, perasaan ajaib itu memudar. Anda akan berakhir dengan "Wow! Ini Brillaint" atau "Wow ... ini omong kosong."
Jadi, pada dasarnya Anda memiliki dua opsi:
Jika belum jelas, saya mengambil yang terakhir.
Pada dasarnya, saya ingin belajar lebih banyak tentang "komputer". Bekerja pada perangkat lunak tingkat tinggi cukup menyenangkan, tetapi saya memiliki kebiasaan buruk untuk melihat internel tingkat rendah dan cara kerja barang.
"Oh, jadi panggilan saya ke
malloc()dannewakhirnya memanggil Syscallmmap()? Mari kita periksa implementasinya .. Oh, apaVMA? Apa ituMMU? Apa ituTLB?? ApaTCRdanMAIR??? Bagaimana saya bisa sampai di sini? Mengapa saya di sini .. hanya untuk menderita ..?:?
Ada lapisan abstraksi yang saya tidak tahu! Saya seharusnya berhenti di sana, tetapi tidak. Sebaliknya, saya berkata: "Oke. Saya sangat suka perasaan call-of-the-void dari hal-hal tingkat rendah. Mari kita menjadi liar dan mencoba mempelajari semua abstraksi dengan menulis sistem operasi 'sederhana'. Apa yang bisa salah?" Dan sekarang, inilah saya.
Sistem Operasi Hobi-Hobi Work-in-Progress /Microkernel "Buatan Tangan" . Namanya berasal dari benua yang paling politis & berantakan di dunia Game of Thrones. [^2] Saya sangat suka Got (ya, menilai saya semau Anda) dan kekacauan politik rasanya mirip dengan tujuan saya sendiri dengan proyek ini. Semuanya ada di semua tempat dan tidak ada yang masuk akal.
Proyek ini ada hanya untuk membantu saya belajar tentang sistem operasi dan bersenang -senang di sepanjang jalan. Saya tidak mengklaim tahu banyak tentang pengembangan OS . Jadi, praktik, desain chocies dan beberapa implementasi yang Anda lihat di sini akan membuat Anda takut.
Saya menyarankan untuk kepupu ekspektasi Anda rendah>. <
Catatan penting: Westeros sedang dalam pengembangan sangat awal . Hal-hal akan berubah, rem atau lurus menjadi bodoh. Saya masih belum menentukan tujuan akhir. Sampai saat itu mengharapkan segalanya, di mana -mana, sekaligus.
/dev dan /proc (idk jika ini mungkin?)mkdir , touch & catMari selami sedikit lebih banyak ke dalam hal -hal. Mesin target sangat spesifik & statis . Saya ingin membuatnya sesederhana mungkin dengan hanya mendukung Arsitektur ARM64 (ARMV8) dan Mesin ARM VIR VIMU.
Inilah mesin targetnya.

Hanya periferal dasar yang harus didefinisikan. Sayangnya, ini berarti tidak ada usb, nvme dan nic. :( Mungkin di masa depan?
Inilah periferal yang saya rencanakan untuk didukung.
Kernel mengikuti desain microkernel sederhana (seperti keluarga L4). Saya ingin membuat kernel sederhana yang mudah dimengerti dan membantu saya belajar sebanyak mungkin selama proses.
Awalnya saya mengikuti XV6 MIT. Namun, ketika ditanya, orang -orang mengatakan kepada saya bahwa itu agak terlalu "naif/murah" dan mungkin tidak akan membantu saya IRL ( mereka adalah orang -orang luar biasa btw ). Jadi, saya memutuskan untuk menerima saran mereka dan pergi dengan desain microkernel. Ini juga tampaknya lebih menarik
Peringatan! Desain microkernel buatan saya akan memicu Anda. Misalnya, saya menempatkan driver perangkat di ruang pengguna dan penjadwal di dalam ruang kernel (pada dasarnya tidak benar -benar mengikuti desain "tepat/akedemik").
Beri aku waktu. Saya masih belajar saat saya pergi>. <
Berikut adalah gambaran keseluruhan kernel. (Todo: akan segera diperbarui ...)

TODO: Spesifikasi OS keseluruhan. Apa tujuan dan tujuan masa depan.


|-- Build <- Compiled objects, binaries & debug files
|-- Documents <- Reference documents
|-- Emulation <- QEMU scripts & Device Tree Structure
|-- Kernel <- The source code. Headers, C and C++ files
| `-- Arch <- Architecture related code
| `-- Drivers <- Driver source and header files
| `-- Library <- Library source and header files
| `-- Include <- Kernel header files
|-- Media <- Images and other media
|-- Toolchain <- Cross-compiling environment
|-- Userland <- User level source code
| `-- Dir. <- TBD.
|-- .gitignore <- Good ol' .gitignore
|-- Makefile <- Makefile
`-- README.md <- Main README
Saat ini, satu -satunya cara untuk mem -boot Westeros adalah di mesin AARCH64 VIRT QEMU melalui parameter -kernel .
Bagian yang bertanggung jawab untuk meluncurkan kernel (dan karena itu OS) disebut shim. Ini adalah sepotong kecil kode yang ditautkan di samping gambar kernel dan bertanggung jawab untuk bootstrap sistem.
Ini menangani beberapa operasi sebelum kernel mengambil kendali.
Referensi: Sel4 - Elfloader
State of Arm64 Machine (misalnya, register) tepat sebelum kmain()
0xffff0000401080000x401010000x401020030x401020000x400007010x401030000x401040030x401040000x400007010xbbff440c04000b00000000 (DEVICE_nGnRnE)0b00000100 (DEVICE_nGnRE)0b00001100 (DEVICE_GRE)0b01000100 (NORMAL_NC)0b11111111 (NORMAL)0b10111011 (NORMAL_WT)0b00000000 (Res)0b00000000 (Res)0x4801000100b0 (48 bit)0b100 (44 bits, 16TB)0b01000 (16)0b01000 (16)0b0 (Hierarchical permissions enabled)0b0 (Hierarchical permissions enabled)0b0 (Top Byte used)0b0 (Top Byte used)0b0 (8 bit)0b0 (TTBR0_EL1.ASID defines the ASID)0b0 (Perform table walk)0b0 (Perform table walk)0b10 (4 KiB)0b00 (4 KiB)0b00 (Non-shareable)0b00 (Non-shareable)0b00 (Outer Non-cacheable)0b00 (Outer Non-cacheable)0b00 (Inner Non-cacheable)0b00 (Inner Non-cacheable)0x40101000 (k_l0_pgtbl)0x40103000 (u_l0_pgtbl)0xc508390b1 (MMU enabled)0b0 (Alignment fault checking is disabled)0b00b1 (SP Alignment check enabled)0b1 (SP Alignment check enabled for EL0)0b1 (System instruction memory barrier enabled for EL0 Aarch32)0b0 (Access to Stage 1 Normal memory from EL0 & EL1 are Stage 1 Non-cacheable)Kernel Westeros mengikuti desain microkernel. Orang/org yang berbeda memiliki interpretasi yang berbeda tentang bagaimana microkernel harus dirancang (misalnya, L4, Minix). Di sini saya menggunakan istilah mikro sebagai menjaga kernel sesederhana mungkin. Ini berarti:
Semua hal di atas perlu diimplementasikan sebagai aplikasi ruang pengguna.
Kernel akan memberikan layanan & fungsi berikut:
mmap() )msgsend() , msgrecv() )thread_create() )intr_attach() )gettimeofday() )yield() ) Kernel membutuhkan gambar pengguna [awal] dari bootloader. Gambar ini harus berisi Executable Peri pertama yang akan diluncurkan kernel (kemungkinan root task dan process manager ).
Gambar useer dapat dianggap sebagai initrd yang digunakan dalam sistem Linux.
Daftar lengkap segala sesuatu yang disediakan kernel & cara kerja hal -hal dalam akan dijelaskan nanti. Saya masih belum menerapkannya ..
Adapun referensi, saya memanfaatkan microkernels & ose berikut:
TODO: Beberapa hal yang menyenangkan. Apa yang menanti seseorang yang mereka luncurkan OS?
Layanan berikut akan diimplementasikan:
services.config ) Untuk membangun & menjalankan sistem operasi, Anda membutuhkan tiga hal utama: ARM GNU Toolchain , QEMU dan sedikit Patience ™.
Dimungkinkan untuk membangun semuanya di sistem operasi favorit Anda. ARM GNU Toolchain tersedia di kedua Windows , MacOS dan GNU/Linux . Namun, saya belum menguji Windows . Jadi, Anda sendirian di ruang itu. Maaf :(
Langkah -langkah di bawah ini untuk host GNU/Linux (AARCH64) .
0. Pastikan Anda memiliki git dan make
$ apt install git make # if using `apt`
$ pacman -S git make # if using `pacman`1. Kloning repositori ini
$ git clone https://github.com/TunaCici/WesterOS.git 2. Unduh ARM GNU Toolchain terbaru
Arahkan ke halaman web unduhan alat gnu gnu.
Pilih target Bare-Matel Aarch64 yang sesuai untuk diunduh. Versi seharusnya tidak masalah, jadi pilih yang terbaru. Namun, toolchain yang di -host yang Anda unduh tidak masalah. Pilih salah satu yang dibuat untuk sistem operasi Anda sendiri.
Misalnya, jika OS Anda adalah GNU/Linux (x86_64) maka Anda mengunduh:
https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-elf.tar.xz
$ cd WesterOS/Toolchain
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xzAdalah tanggung jawab Anda untuk memverifikasi "integritas" dan "tanda tangan" dari file yang diunduh. Gunakan tombol SHA256 yang disediakan di halaman unduhan.
3. Ekstrak ARM GNU Toolchain yang diunduh
Pastikan untuk mengekstraknya saat berada di Westeros/Toolchain .
$ tar -xvf arm-gnu-toolchain-12.2.rel1-aarch64-aarch64-none-elf.tar.xz 4. Ubah TOOLCHAIN_PATH di Makefile
TOOLCHAIN_PATH harus menunjuk ke ARM GNU Toolchain yang baru Anda unduh dan diekstraksi. Karena OS host dan versi toolchain Anda mungkin berbeda dari milik saya, Anda harus mengedit variabel jalur.
Jika tidak diatur dengan benar, proses make akan gagal dengan pesan kesalahan seperti:
make[1]: Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf/bin/aarch64-none-elf-as: No such file or directory
Jadi, pastikan untuk mengedit TOOLCHAIN_PATH .
# Open the main Makefile /w your favorite text editor
$ vim Makefile
# And change the `TOOLCHAIN_PATH` accordingly. For example..
> TOOLCHAIN_PATH=Toolchain/arm-gnu-toolchain-12.2.rel1-darwin-arm64-aarch64-none-elf
# Save & exit 5. Build Menggunakan make
$ make allBuild diakhiri dengan pesan build lengkap. Nikmati hidup <3 . Jika Anda tidak melihatnya, hubungi saya. Saya akan mencoba memperbaiki masalah>. <
Westeros hanya dapat dijalankan menggunakan QEMU. Saya tidak punya rencana untuk membuat gambar yang sepenuhnya dapat di-boot untuk perangkat keras dunia nyata. Awalnya ide saya adalah meniru Raspberrry Pi 4b , tetapi saya menyadari itu mungkin bukan itu "ramah pemula" saat menguji dan disingkirkan. Jadi, qemu itu!
Waktu plug yang tidak tahu malu! Jika Anda ingin lebih banyak tentang QEMU, kunjungi qemu_starter github saya.
0. Pastikan Anda menginstal qemu-system-aarch64
$ apt install qemu-system qemu-utils # if using `apt`
$ pacman -S qemu-full # if using `pacman`1. Luncurkan Westeros
$ make runPada 9 Juli 2023, Westeros lurus kosong! Jadi, Anda tidak dapat melakukan apa pun kecuali untuk melihat beberapa pesan kernel yang sangat mendasar di terminal:/
Kemudian lagi, Westeros adalah sistem operasi hobi dan proses pembelajaran . Anda harus benar -benar mencoba menjelajahi kode sumbernya. Saya yakin Anda akan bersenang -senang di sana.
TODO: Navigasi pengguna ke readme lain yang pada dasarnya adalah dokumentasi.