Neptune OS adalah kepribadian Windows NT untuk Microkernel Sel4. Ini mengimplementasikan apa yang disebut Microsoft sebagai "eksekutif NT", lapisan atas kernel windows NTOSKRNL.EXE , sebagai proses pengguna di bawah microkernel sel4. Eksekutif NT mengimplementasikan apa yang disebut NT Native API, antarmuka panggilan sistem asli dari Windows di mana Win32 API yang lebih akrab dibangun. Ini terpapar ke mode pengguna melalui fungsi rintisan di NTDLL.DLL dengan nama -nama seperti NtCreateProcess . Eksekutif NT juga bertanggung jawab untuk mengekspos antarmuka pemrograman ke driver perangkat. Antarmuka tersebut mencakup fungsi seperti IoConnectInterrupt dan IoCallDriver . Arsitektur kami memungkinkan driver perangkat untuk berjalan dalam proses ruang pengguna yang terpisah dan berkomunikasi dengan proses eksekutif NT melalui primitif SEL4 IPC standar.
Tujuan akhirnya dari proyek OS Neptunus adalah untuk menerapkan semantik NT yang cukup sehingga tanah pengguna Reactos dapat diangkut di bawah OS Neptunus, serta sebagian besar pengemudi kernel Reactos. Secara teori kita harus dapat mencapai kompatibilitas biner dengan Executable Windows asli dengan ketentuan bahwa implementasi API asli NT cukup setia. Kita juga harus dapat mencapai tingkat portabilitas kode sumber tingkat tinggi dengan driver perangkat Windows dan driver sistem file, meskipun kami tidak bertujuan untuk kompatibilitas kode sumber yang lengkap dan garis-garis karena perbedaan arsitektur dengan Windows/Reactos yang membuat tujuan ini tidak realistis. Silakan lihat bagian dokumentasi untuk informasi lebih lanjut.
Status proyek saat ini adalah bahwa kami telah mengimplementasikan komponen eksekutif NT yang cukup untuk mendukung tumpukan sistem file yang cukup lengkap dengan dukungan caching baca-diab dan tulis-back, yang mencakup driver sistem file FAT12/16/32 fatfs.sys dan driver pengontrol floppy fdc.sys . Kami juga memiliki tumpukan driver keyboard dasar, yang termasuk driver kelas keyboard kbdclass.sys dan driver port ps/2 i8042prt.sys . Ini memungkinkan kami untuk menjalankan prompt perintah dasar ntcmd.exe , diambil dari proyek reactos, yang mendukung sebagian besar perintah shell umum, seperti pwd , cd , copy , move , del , mount , dan umount . Kami juga menyertakan driver beep.sys yang membuat suara yang menjengkelkan di speaker PC.
Seluruh sistem cocok dengan floppy dan dapat diunduh dari rilis v0.2.0002. Anda dapat menonton demo pendek di YouTube. Anda juga dapat membangunnya sendiri. Lihat bagian bangunan.
Untuk rilis berikutnya kami berencana untuk port tumpukan driver ATA/AHCI dari reactos sehingga kami dapat mendukung sebagian besar hard disk Pata/Sata. Kami juga berencana untuk menulis/port suite patokan disk sehingga kami dapat menunjukkan bahwa desain microkernel tidak mengarah pada hukuman kinerja yang tidak dapat diterima.
Untuk sistem i386 (mungkin harus disebut i686):
enable_paging di sel4/src/arch/x86/32/head.S ).Untuk sistem AMD64:
fsgsbase diaktifkan. Ini hanya didukung di Ivy Bridge dan kemudian. Untuk menjalankan AMD64 build di CPU sebelumnya, Anda dapat menonaktifkan instruksi FSGSBASE di private/ntos/cmake/sel4.cmake . Kami juga memerlukan cmpxchg16b, yang tersedia sejak Nehalem, dan sangat mungkin lebih awal (prosesor Core 2 sebelumnya mungkin memerlukan pembaruan mikrokode). Untuk mesin amd64 , ThinkPad X230 telah diuji untuk bekerja.
Anda perlu membangun di bawah Linux (Sel4 tidak dibangun di bawah sistem operasi lainnya). Anda akan membutuhkan dependensi Python berikut, dan mungkin lebih.
jinja2
future
ply
setuptools
six
lxml
Anda juga membutuhkan cmake , clang , llvm dan lld sebagai toolchain dasar. clang adalah kompiler silang asli yang dapat menghasilkan target ELF dan PE. GCC tidak didukung tetapi secara teori dapat dibuat untuk bekerja. Anda akan memerlukan alat ELF dan poolchain PE (dan mungkin satu ton kesabaran) jika Anda ingin membuat GCC berfungsi. Anda juga memerlukan windmc yang merupakan kompiler sumber daya PE dari mingw . Lihatlah build.sh untuk skrip build. Versi dentang yang disukai adalah 15 tetapi versi terbaru harus semuanya berfungsi. Anda juga memerlukan utilitas cpio untuk membangun initcpio. Akhirnya, untuk boot floppy dan boot ISO Anda akan memerlukan alat berikut: syslinux (untuk boot floppy), grub dan xorriso (untuk boot iso), dan mtools (untuk keduanya).
Disarankan untuk menggunakan IDE yang diaktifkan server bahasa untuk menelusuri kode sumber. Pengaturan yang diuji adalah paket lsp-mode pada emacs dengan clangd sebagai server bahasa. Script build.sh akan menghasilkan file compile_commands.json untuk clangd . Anda perlu menginstal JQ untuk tujuan ini.
Klon proyek terlebih dahulu (pastikan Anda menggunakan git clone --recurse-submodules karena kami menyertakan kernel sel4 sebagai submodule) dan kemudian jalankan
./build.sh [amd64] [release]
Jika Anda tidak menentukan amd64 , maka itu adalah bangunan i686 . Jika Anda tidak menentukan release , maka itu adalah debug build. Untuk membuat boot floppies, ketik
./mkfloopy.sh [amd64] [release]
Untuk membuat boot isos, ketik
./mkiso.sh [amd64] [release]
Untuk mensimulasikan menggunakan qemu, jalankan
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
Jika Anda menentukan direct , maka QEMU akan memuat kernel Sel4 dan gambar NTOS secara langsung (menggunakan -kernel dan -initrd ). Jika Anda menentukan iso atau uefi , itu akan memuat boot ISO yang dibangun oleh mkiso.sh . Opsi uefi juga akan mengkonfigurasi QEMU untuk memuat firmware UEFI, yang menyediakan konsol Framebuffer definisi tinggi yang bagus. Jika tidak, boot floppy yang dibuat oleh mkfloppy.sh digunakan. Argumen tambahan diteruskan ke QEMU. Misalnya, untuk menjalankan rilis i386 Build dengan speaker PC diaktifkan di QEMU Anda dapat melewati yang berikut (ini mengasumsikan Anda menggunakan versi QEMU terbaru dan memiliki Pulseaudio)
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
Debug build mungkin berjalan perlahan terutama jika Anda menyalakan logging port serial. Anda dapat mematikan logging dengan memodifikasi header master dari proyek eksekutif NT (lihat private/ntos/inc/ntos.h ).
Kami menggunakan llvm toolchain sehingga kompilasi silang secara teori harus bekerja tanpa penanganan khusus. Dalam praktiknya, pada i386 / amd64 skrip linker untuk Executable kernel sel4 final bergantung pada fitur yang hanya didukung Linker LD GNU, jadi kami tidak dapat menggunakan LLVM Linker (LLD) untuk menautkan kernel Sel4. Ini berarti bahwa Anda akan membutuhkan cross-linker GNU LD untuk target tiga kali lipat i686-pc-linux-gnu dan x86_64-pc-linux-gnu yang dipasang di tempat yang biasa ( /usr/bin ) sehingga clang dapat menemukannya dan memohon dengan benar saat menghubungkan kernel SEL4. Bagian PE dari toolchain benar-benar mandiri dan tidak memerlukan penanganan khusus saat mengkompilasi silang (sudah menjadi perintis silang karena kami menargetkan jendela pada host Linux).
Kompilasi silang diuji pada Archlinux yang berjalan di Loongarch64 (prosesor Loongson 3A5000) dengan llvm-14 dan tampaknya menghasilkan kode yang benar. Harap buka masalah jika Anda mengalami masalah apa pun.
Perhatikan bahwa jika grub Anda dibangun untuk platform asli daripada i686/amd64, boot ISO yang dihasilkan oleh mkiso.sh tidak akan berfungsi karena grub-mkrescue akan mencoba menyalin file boot platform asli ke ISO. Untuk memperbaikinya, Bangun Paket GRUB untuk i686/AMD64 (atau cukup jalankan generasi ISO akhir pada sistem I686/AMD64).
Dokumentasi terletak di bawah direktori docs . Untuk pengembang dan mereka yang tertarik untuk memahami cara kerja dalam Neptune OS, baca Developer-Guide.md yang dimulai dengan tinjauan arsitektur dari sistem operasi dan mulai menjelaskan berbagai keputusan desain komponen OS individu. Ini juga berisi panduan porting driver untuk mereka yang tertarik untuk porting driver dari reactos.