NEPTUNE OS เป็นบุคลิกของ Windows NT สำหรับ SEL4 microkernel มันใช้สิ่งที่ Microsoft เรียกว่า "NT Executive" ชั้นบนของ Windows Kernel NTOSKRNL.EXE เป็นกระบวนการของผู้ใช้ภายใต้ SEL4 microkernel ผู้บริหารของ NT ใช้ API NT Native API ซึ่งเป็นอินเทอร์เฟซระบบดั้งเดิมของ Windows ซึ่งสร้าง Win32 API ที่คุ้นเคยมากขึ้น สิ่งเหล่านี้สัมผัสกับโหมดผู้ใช้ผ่านฟังก์ชั่น Stub ใน NTDLL.DLL พร้อมชื่อเช่น NtCreateProcess ผู้บริหารของ NT ยังรับผิดชอบในการเปิดเผยอินเทอร์เฟซการเขียนโปรแกรมไปยังไดรเวอร์อุปกรณ์ อินเทอร์เฟซดังกล่าวรวมถึงฟังก์ชั่นเช่น IoConnectInterrupt และ IoCallDriver สถาปัตยกรรมของเราช่วยให้ไดรเวอร์อุปกรณ์ทำงานในกระบวนการ Userspace แยกต่างหากและสื่อสารกับกระบวนการบริหาร NT ผ่านมาตรฐาน SEL4 IPC มาตรฐาน
เป้าหมายในที่สุดของโครงการ NEPTUNE OS คือการใช้ความหมาย NT เพียงพอเช่นว่าผู้ใช้ REACTOS สามารถพอร์ตได้ภายใต้ NEPTUNE OS รวมถึงไดรเวอร์เคอร์เนล ReactOS ส่วนใหญ่ ในทางทฤษฎีเราควรจะสามารถบรรลุความเข้ากันได้แบบไบนารีกับการดำเนินการของ Windows ดั้งเดิมโดยมีเงื่อนไขว่าการใช้งาน NT Native API ของเรานั้นมีความซื่อสัตย์เพียงพอ เราควรจะสามารถบรรลุความสามารถในการพกพาซอร์สโค้ดในระดับสูงด้วยไดรเวอร์อุปกรณ์ Windows และไดรเวอร์ระบบไฟล์แม้ว่าเราจะไม่ได้ตั้งเป้าหมายที่จะเข้ากันได้กับซอร์สโค้ดที่สมบูรณ์แบบสายพันธุ์เนื่องจากความแตกต่างทางสถาปัตยกรรมกับ Windows/ReactOS ที่ทำให้เป้าหมายนี้ไม่สมจริง โปรดดูส่วนเอกสารสำหรับข้อมูลเพิ่มเติม
สถานะปัจจุบันของโครงการคือเราได้ใช้งานส่วนประกอบผู้บริหารของ NT เพียงพอที่จะสนับสนุนสแต็กระบบไฟล์ที่สมบูรณ์แบบอย่างสมเหตุสมผลพร้อมการสนับสนุนการแคชและการเขียนกลับซึ่งรวมถึง FAT12/16/32 ไดรเวอร์ระบบไฟล์ fatfs.sys และ fdc.sys นอกจากนี้เรายังมีสแต็คไดรเวอร์คีย์บอร์ดพื้นฐานซึ่งรวมถึงไดรเวอร์คีย์บอร์ดคลาส kbdclass.sys และไดรเวอร์พอร์ต PS/2 i8042prt.sys สิ่งเหล่านี้ช่วยให้เราสามารถเรียกใช้คำสั่งพื้นฐาน ntcmd.exe ที่นำมาจากโครงการ ReactOS ซึ่งรองรับคำสั่งเชลล์ทั่วไปส่วนใหญ่เช่น pwd , cd , copy , move , del , mount และ umount นอกจากนี้เรายังรวมไดรเวอร์ beep.sys ซึ่งทำให้เกิดเสียงที่น่ารำคาญบนลำโพงพีซี
ทั้งระบบพอดีกับฟลอปปี้และสามารถดาวน์โหลดได้จากรีลีส v0.2.0002 คุณสามารถดูตัวอย่างสั้น ๆ บน YouTube คุณยังสามารถสร้างมันเองได้ ดูหัวข้อเกี่ยวกับอาคาร
สำหรับการเปิดตัวครั้งต่อไปเรากำลังวางแผนที่จะพอร์ตสแต็คไดรเวอร์ ATA/AHCI จาก ReactOS เพื่อให้เราสามารถรองรับฮาร์ดดิสก์ PATA/SATA ส่วนใหญ่ นอกจากนี้เรายังวางแผนที่จะเขียน/พอร์ตชุดมาตรฐานดิสก์เพื่อให้เราสามารถแสดงให้เห็นว่าการออกแบบ microkernel ไม่ได้นำไปสู่บทลงโทษประสิทธิภาพที่ยอมรับไม่ได้
สำหรับระบบ I386 (ควรเรียกว่า i686):
enable_paging ใน sel4/src/arch/x86/32/head.S )สำหรับระบบ AMD64:
fsgsbase สิ่งนี้ได้รับการสนับสนุนบน Ivy Bridge เท่านั้นและในภายหลัง ในการเรียกใช้ AMD64 Builds บน CPU ก่อนหน้านี้คุณสามารถปิดการใช้งานคำสั่ง FSGSBase ใน private/ntos/cmake/sel4.cmake นอกจากนี้เรายังต้องการ CMPXCHG16B ซึ่งมีให้ตั้งแต่ Nehalem และอาจเป็นไปได้ก่อนหน้านี้ (โปรเซสเซอร์ Core 2 ก่อนหน้านี้อาจต้องมีการอัปเดตไมโครรหัส) สำหรับเครื่อง amd64 ThinkPad X230 ได้รับการทดสอบการทำงานแล้ว
คุณจะต้องสร้างภายใต้ Linux (SEL4 ไม่ได้สร้างภายใต้ระบบปฏิบัติการอื่น ๆ ) คุณจะต้องมีการพึ่งพา Python ต่อไปนี้และอาจมากกว่านั้น
jinja2
future
ply
setuptools
six
lxml
คุณจะต้องใช้ cmake , clang , llvm และ lld เป็นเครื่องมือพื้นฐาน clang เป็นคอมไพเลอร์ข้ามพื้นเมืองที่สามารถสร้างเป้าหมายทั้ง ELF และ PE GCC ไม่ได้รับการสนับสนุน แต่ในทางทฤษฎีสามารถทำงานได้ คุณจะต้องใช้ทั้ง ELF Toolchain และ PE Toolchain (และอาจเป็นความอดทนมากมาย) หากคุณต้องการให้ GCC ทำงานได้ คุณต้องใช้ windmc ซึ่งเป็นคอมไพเลอร์ทรัพยากรข้อความ PE จาก mingw ดูที่ build.sh สำหรับบิลด์สคริปต์ รุ่น Clang ที่ต้องการคือ 15 แต่เวอร์ชันล่าสุดควรใช้งานได้ คุณต้องใช้ยูทิลิตี้ cpio สำหรับการสร้าง initcpio ในที่สุดสำหรับการบูตฟลอปปี้และ iso boot คุณจะต้องใช้เครื่องมือต่อไปนี้: syslinux (สำหรับการบูตฟลอปปี้), grub และ xorriso (สำหรับ iso boot) และ mtools (สำหรับทั้งสอง)
ขอแนะนำให้ใช้ IDE ที่เปิดใช้งานเซิร์ฟเวอร์ภาษาเพื่อเรียกดูซอร์สโค้ด การตั้งค่าที่ผ่านการทดสอบคือแพ็คเกจ lsp-mode บน emacs พร้อม clangd เป็นเซิร์ฟเวอร์ภาษา สคริปต์ build.sh จะสร้างไฟล์ compile_commands.json สำหรับ clangd คุณจะต้องติดตั้ง JQ เพื่อจุดประสงค์นี้
โคลนโครงการก่อน (ตรวจสอบให้แน่ใจว่าคุณใช้ git clone --recurse-submodules เนื่องจากเรารวมเคอร์เนล SEL4 เป็น submodule) จากนั้นเรียกใช้
./build.sh [amd64] [release]
หากคุณไม่ได้ระบุ amd64 แสดงว่าเป็นงานสร้าง i686 หากคุณไม่ได้ระบุ release ก็เป็นบิลด์ดีบั๊ก หากต้องการสร้าง floppies บูตให้พิมพ์
./mkfloopy.sh [amd64] [release]
ในการสร้าง isos boot ให้พิมพ์
./mkiso.sh [amd64] [release]
เพื่อจำลองโดยใช้ QEMU วิ่ง
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
หากคุณระบุ direct QEMU จะโหลดเคอร์เนล SEL4 และอิมเมจ NTOS โดยตรง (โดยใช้ -kernel และ -initrd ) หากคุณระบุ iso หรือ uefi มันจะโหลด Boot ISO ที่สร้างโดย mkiso.sh ตัวเลือก uefi จะกำหนดค่า QEMU ให้โหลดเฟิร์มแวร์ UEFI ซึ่งให้คอนโซล Framebuffer High Definition ที่ดี มิฉะนั้นจะใช้ฟลอปปี้บูตที่สร้างโดย mkfloppy.sh อาร์กิวเมนต์พิเศษจะถูกส่งผ่านไปยัง QEMU ตัวอย่างเช่นในการเรียกใช้การสร้างรีลีส i386 ด้วยลำโพงพีซีที่เปิดใช้งานใน QEMU คุณสามารถผ่านสิ่งต่อไปนี้ (นี่จะถือว่าคุณกำลังใช้เวอร์ชัน QEMU ล่าสุดและมี Pulseaudio)
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
การดีบักบิลด์อาจทำงานช้าโดยเฉพาะถ้าคุณเปิดการบันทึกพอร์ตอนุกรม คุณสามารถปิดการบันทึกโดยการแก้ไขส่วนหัวหลักของโครงการ Executive NT (ดู private/ntos/inc/ntos.h )
เราใช้ LLVM Toolchain ดังนั้นการคอมไพล์ข้ามในทางทฤษฎีควรทำงานโดยไม่ต้องจัดการพิเศษ ในทางปฏิบัติใน i386 / amd64 สคริปต์ Linker สำหรับการดำเนินการ SEL4 Kernel สุดท้ายนั้นขึ้นอยู่กับคุณสมบัติที่รองรับ GNU LD Linker เท่านั้นดังนั้นเราจึงไม่สามารถใช้ LLVM Linker (LLD) เพื่อเชื่อมโยงเคอร์เนล SEL4 ซึ่งหมายความว่าคุณจะต้องใช้ GNU LD cross-linkers สำหรับ Target Triples i686-pc-linux-gnu และ x86_64-pc-linux-gnu ที่ติดตั้งในสถานที่ปกติ ( /usr/bin ) ดังนั้น clang ส่วน PE ของ Toolchain นั้นมีอยู่ในตัวเองอย่างสมบูรณ์และไม่จำเป็นต้องมีการจัดการพิเศษเมื่อทำการคอมไพล์ข้าม
Cross-Compiling ได้รับการทดสอบบน Archlinux ที่ทำงานบน LOONGARCH64 (โปรเซสเซอร์ Loongson 3A5000) ด้วย llvm-14 และดูเหมือนว่าจะสร้างรหัสที่ถูกต้อง กรุณาเปิดปัญหาหากคุณพบปัญหาใด ๆ
โปรดทราบว่าหากด้วงของคุณถูกสร้างขึ้นสำหรับแพลตฟอร์มดั้งเดิมมากกว่า I686/AMD64 การบูต ISO ที่สร้างโดย mkiso.sh จะไม่ทำงานเนื่องจาก grub-mkrescue จะพยายามคัดลอกไฟล์บูตของแพลตฟอร์มดั้งเดิมไปยัง ISO ในการแก้ไขปัญหานี้ให้ข้ามแพ็คเกจ GRUB สำหรับ I686/AMD64 (หรือเพียงเรียกใช้การสร้าง ISO สุดท้ายบนระบบ I686/AMD64)
เอกสารอยู่ภายใต้ไดเรกทอรี docs สำหรับนักพัฒนาและผู้ที่สนใจในการทำความเข้าใจการทำงานภายในของ NEPTUNE OS อ่าน Developer-Guide.md ซึ่งเริ่มต้นด้วยภาพรวมสถาปัตยกรรมของระบบปฏิบัติการและดำเนินการเพื่ออธิบายการตัดสินใจออกแบบที่หลากหลายของส่วนประกอบระบบปฏิบัติการแต่ละรายการ นอกจากนี้ยังมีคู่มือการพอร์ตไดรเวอร์สำหรับผู้ที่สนใจในการพอร์ตไดรเวอร์จาก ReactOS