Koraos adalah sistem operasi yang ditulis dan dirancang dari awal. Ini dikembangkan sebagai hobi oleh pengembang penggemar.
Repositori ini berisi kode untuk kernel sistem Kora. Jika Anda ingin membangun seluruh sistem, lihat repositori Koraos.
Saya sudah mencoba membangun kernel saya sendiri dari beberapa waktu. Setelah banyak pengerjaan ulang, istirahat dan memikirkan kembali saya memulai kembali satu sepenuhnya dengan perawatan yang cermat untuk desain. Tujuan saya adalah selalu untuk membangun program yang melakukan apa yang seharusnya mereka lakukan dan tidak lebih, ringan dan cepat dengan arsitektur yang sangat dipisahkan.
Perangkat lunak ini masih merupakan anak anjing muda tetapi saya memiliki harapan untuk membangun sistem yang dapat diandalkan segera. Ini akan menyediakan semua fitur dasar -dasar dari sistem modern dan akan portabel pada beberapa arsitektur (tujuan: x86, x86_64, lengan).
Interoperabilitas : Ketika saya mencoba memahami bagaimana hal -hal dibuat, dan mengapa, kadang -kadang saya keluar dari spesifikasi POSIX atau UNIX yang ketat. Saya mencoba untuk sesat mungkin - dengan NT dan UNIX World - tetapi saya memberi wewenang untuk mengambil pilihan yang berbeda.
Bangun kernel tidak seperti membangun aplikasi reguler, beberapa pekerjaan tambahan mungkin diperlukan.
Repositori (seperti lainnya dari Kora) berisi mendekati Makefile standar. Skrip configure tersedia tetapi hanya untuk membangun dari direktori lain dan tidak wajib. Skrip ini hanya digunakan untuk mencari dan bertahan opsi build.
Di sini daftar perintah utama:
make # Build the kernel for the host architecture
make check # Build and run unit-tests
make coverage # Run tests and coppute coverage
make install # Build and update the kernel (not yet)
make install-headers # Copy and erase kernelheaders to $(prefix)/include
# For cross-compile using 'i386-kora-gcc' compiler
make target=i386-pc-kora CROSS=i386-kora- CC=gcc
# Simpler using configure
/path/to/sources/configure --target=i386
make # No need to set target or cross. Ingatlah bahwa untuk kernel itu hampir selalu merupakan kompilasi silang . Jebakan yang paling umum adalah mencoba membangun kernel i386 di host x86_64 .
Secara default ia menggunakan lingkungan yang berdiri sendiri tetapi header tuan rumah dapat menyebabkan beberapa masalah.
Pada kasus atau kesalahan, lebih disukai menggunakan 'kompilor silang'.
Catatan : Pastikan semua paket diinstal seperti binutils, GCC, Make dan Git tetapi juga assembler untuk beberapa arsitektur (seperti NASM untuk
i386danamd64. Untuk cek, tambahkan juga Valgrind dan LCOV .
Di sini juga beberapa variabel yang diterima oleh Makefile untuk memperpanjang konfigurasi:
VERBOSE=y : Perintah kompilasi cetakQUIET=y : jangan mencetak langkah kompilasi verboseCFLAGS : Tambahkan bendera tambahan ke C CompilerNODEPS=y : Jangan sertakan file ketergantungan *.d (default untuk direktori bersih atau jika 'obj' belum ada)NOCOV=y : Lepaskan opsi cakupan untuk unit-testkname=? : Ubah nama file pengiriman kernel Setelah membangun, jika Anda di sini untuk menjadi kotor, pikirkan tentang qemu dan gdb untuk debugging dan investigasi.
scripts/toolchain.sh (butuh waktu, tidak ada log)koraos/make/build_toolchain.sh (dibutuhkan lebih banyak waktu). Tidak mudah untuk menggambarkan fitur kernel, karena sebagian besar komponen diperlukan dan semua kernel memberikan kira -kira sama, tetapi berbeda dalam kualitas dan perilaku untuk semua fitur tersebut.
Koraos'Kernel menggunakan memori virtual, dengan alokasi halaman dasar. Ini menggunakan daur ulang halaman yang tepat, tetapi tidak ada swap yang tersedia. Pada arsitektur Intel, identifikasi fitur CPU yang tepat dibuat tetapi belum digunakan dengan buruk. Kernel sudah siap multi-core (aman utas) tetapi masih memerlukan beberapa pekerjaan untuk digunakan.
Kernel ini multi-proses, multi-thread tetapi belum multi-pengguna. Tugas dapat dibuat untuk menjadi kernel atau di ruang pengguna. Tugas baru dapat dibuat dari Clean Slate (Window Way) atau Forked (Unix Way).
Kernel menyediakan berbagai jenis file dan perangkat: blok perangkat, perangkat char, pipa, direktori (atau volume), file biasa, aliran video (permukaan, kamera atau layar), perangkat dan soket jaringan. (Perhatikan bahwa tipe file berbeda dari UNIX).
Semua file dan perangkat tersebut dapat diakses melalui VFS yang berkembang (sistem file virtual) dengan fasilitas caching yang baik.
Tumpukan jaringan mendukung protokol: Ethernet, ARP, IPv4, ICMP, DHCP, UDP, TCP, DNS dan NTP . Kernel menyediakan klien DHCP dasar yang memungkinkan untuk konfigurasi IP otomatis.
Bagian yang tidak lengkap
Karena sistem tidak berfungsi penuh, sebagian besar tes saya dilakukan dengan menggunakan utas kernel, tetapi di sini beberapa panggilan sistem kerja - belum ada yang diselesaikan:
/* --------
Tasks, Process & Sessions
--------- */
long sys_stop ( unsigned tid , int status );
long sys_sleep ( long timeout );
/* --------
Input & Output
--------- */
long sys_read ( int fd , char * buf , int len );
long sys_write ( int fd , const char * buf , int len );
long sys_open ( int fd , const char * path , int flags );
long sys_close ( int fd );
/* --------
File system
--------- */
int sys_pipe ( int * fds );
int sys_window ( int width , int height , unsigned features , unsigned evmask );
/* --------
Network
--------- */
int sys_socket ( int protocol , const char * address , int port );
/* --------
Memory
--------- */
void * sys_mmap ( void * address , size_t length , int fd , off_t off , unsigned flags );
long sys_munmap ( void * address , size_t length );
long sys_mprotect ( void * address , size_t length , unsigned flags );
/* --------
Signals
--------- */
/* --------
System
--------- */
long sys_ginfo ( unsigned info , void * buf , int len );
long sys_sinfo ( unsigned info , const void * buf , int len );
long sys_log ( const char * msg );Target bit bukan file saat ini
kernel/types.h : referensi tipe dasar dan menyatakan struktur buram.kernel/utils.h : Berikan runtime dasar seperti alokasi, string, dan waktu.kernel/core.h : Menyediakan akses ke struktur inti kSYS & kCPU .kernel/syscalls.h : Daftar rutinitas syscall sebagai sys_* .kernel/io.h : Antarmuka untuk IOPORT, MMIO dan DMA.kernel/{...}.h : Berikan API modul inti kernel (tugas, memori, VFS ...).kernel/net/{...}.h : API untuk protokol jaringan (LO, ETH, IP4).kernel/bus/{...}.h : API untuk penyedia bus (PCI atau USB). Saya merencanakan versi pengiriman 0.1 setelah saya dapat menjalankan Logon Program Dasar, Desktop, Krish, Folder dan Lua dan memiliki setidaknya satu sistem file yang dapat ditulis dengan berfitur lengkap (seperti VFAT atau EXT2).