Neptune OS는 SEL4 마이크로 커널의 Windows NT 성격입니다. SEL4 마이크로 커널의 사용자 프로세스로서 Windows 커널 NTOSKRNL.EXE 의 상단 계층 인 Microsoft가 "NT Executive"라고 부르는 것을 구현합니다. NT Executive는 더 친숙한 Win32 API가 구축 된 Windows의 기본 시스템 호출 인터페이스 인 소위 NT 네이티브 API를 구현합니다. NTDLL.DLL 의 스터브 함수를 통해 NtCreateProcess 와 같은 이름을 사용하여 사용자 모드에 노출됩니다. NT Executive는 또한 프로그래밍 인터페이스를 장치 드라이버에 노출시킬 책임이 있습니다. 상기 인터페이스에는 IoConnectInterrupt 및 IoCallDriver 와 같은 기능이 포함됩니다. 우리의 아키텍처를 통해 장치 드라이버는 별도의 사용자 공간 프로세스에서 실행하고 표준 SEL4 IPC 프리미티브를 통해 NT Executive 프로세스와 통신 할 수 있습니다.
Neptune OS 프로젝트의 최종 목표는 NT Semantics를 구현하여 Reactos 사용자 토지가 Neptune OS 및 대부분의 Reactos 커널 드라이버에 따라 포팅 될 수 있도록하는 것입니다. 이론적으로 우리는 NT 네이티브 API의 구현이 충분히 충실한 경우 기본 Windows 실행 파일과의 이진 호환성을 달성 할 수 있어야합니다. 또한 Windows 장치 드라이버 및 파일 시스템 드라이버를 사용하여 높은 수준의 소스 코드 휴대 성을 달성 할 수 있어야하지만,이 목표를 비현실적으로 만드는 Windows/Reactos의 아키텍처 차이로 인해 완전한 라인-라인 소스 코드 호환성을 목표로하지는 않습니다. 자세한 내용은 문서 섹션을 참조하십시오.
이 프로젝트의 현재 상태는 FAT12/16/32 파일 시스템 드라이버 fatfs.sys 및 플로피 컨트롤러 드라이버 FDC.SYS를 포함하여 합리적으로 완전한 파일 시스템 스택을 지원하기에 충분한 NT Executive 구성 요소를 구현했다는 것 fdc.sys . 또한 키보드 클래스 드라이버 kbdclass.sys 및 PS/2 포트 드라이버 i8042prt.sys 가 포함 된 기본 키보드 드라이버 스택도 있습니다. 이를 통해 pwd , cd , COPY, copy , move , del , mount 및 umount 와 같은 대부분의 공통 쉘 명령을 지원하는 Reactos 프로젝트에서 가져온 기본 명령 프롬프트 ntcmd.exe 실행할 수 있습니다. 또한 PC 스피커에서 성가신 사운드를 만드는 beep.sys 드라이버도 포함되어 있습니다.
전체 시스템은 플로피에 적합하며 릴리스 V0.2.0002에서 다운로드 할 수 있습니다. YouTube에서 짧은 데모를 볼 수 있습니다. 직접 구축 할 수도 있습니다. 건물 섹션을 참조하십시오.
다음 릴리스를 위해 우리는 ATA/AHCI 드라이버 스택을 Reactos에서 포트하여 대부분의 PATA/SATA 하드 디스크를 지원할 계획입니다. 우리는 또한 디스크 벤치 마크 스위트를 작성/포트 할 계획이므로 마이크로 넬 디자인이 용납 할 수없는 성능 페널티로 이어지지 않음을 증명할 수 있습니다.
i386 시스템의 경우 (아마도 i686이라고해야 함) :
sel4/src/arch/x86/32/head.S 의 어셈블리 루틴 enable_paging 참조).AMD64 시스템의 경우 :
fsgsbase 명령어를 활성화하여 구축됩니다. 이것은 아이비 브리지에서만 지원됩니다. 이전 CPU에서 AMD64 빌드를 실행하려면 private/ntos/cmake/sel4.cmake 에서 FSGSBase 명령을 비활성화 할 수 있습니다. 또한 Nehalem 이후에 사용할 수있는 CMPXCHG16B가 필요하며, 아마도 초기 (이전 Core 2 프로세서에는 마이크로 코드 업데이트가 필요할 수 있음)가 필요합니다. amd64 머신의 경우 ThinkPad X230이 작동하도록 테스트되었습니다.
Linux 아래에서 빌드해야합니다 (SEL4는 다른 운영 체제에서 구축되지 않습니다). 다음과 같은 파이썬 종속성이 필요합니다.
jinja2
future
ply
setuptools
six
lxml
또한 기본 도구 체인으로 cmake , clang , llvm 및 lld 필요합니다. clang 은 ELF와 PE 대상을 모두 생성 할 수있는 기본 크로스 컴파일러입니다. GCC는 지원되지 않지만 이론적으로는 작동하도록 할 수 있습니다. GCC를 작동 시키려면 ELF 툴체인과 PE 툴체인 (및 아마도 많은 인내심)이 필요합니다. 또한 mingw 의 PE 메시지 리소스 컴파일러 인 windmc 도 필요합니다. 빌드 스크립트의 경우 build.sh 살펴보십시오. 선호하는 Clang 버전은 15이지만 최근 버전은 모두 작동해야합니다. 또한 initcpio를 구축하려면 cpio 유틸리티가 필요합니다. 마지막으로 Boot Floppy 및 Boot ISO의 경우 syslinux (Boot Floppy의 경우), grub 및 xorriso (부팅 ISO) 및 mtools (둘 다) 도구가 필요합니다.
소스 코드를 탐색하기 위해 언어 서버 지원 IDE를 사용하는 것이 좋습니다. 테스트 된 설정은 emacs 의 lsp-mode 패키지로 clangd 언어 서버로 사용합니다. build.sh 스크립트는 clangd 의 compile_commands.json 파일을 생성합니다. 이 목적으로 JQ를 설치해야합니다.
먼저 프로젝트를 복제하십시오 (SEL4 커널을 하위 모듈로 포함하므로 git clone --recurse-submodules 사용해야합니다).
./build.sh [amd64] [release]
amd64 지정하지 않으면 i686 빌드입니다. release 지정하지 않으면 디버그 빌드입니다. 부츠 플로피를 만들려면 타이핑하십시오
./mkfloopy.sh [amd64] [release]
부팅 ISO를 만들려면 입력하십시오
./mkiso.sh [amd64] [release]
QEMU 사용을 시뮬레이션하려면 실행하십시오
./run.sh [direct|iso|uefi] [amd64] [release] [extra-qemu-args]
direct 를 지정하면 QEMU는 SEL4 커널과 NTOS 이미지를 직접로드합니다 ( -kernel 및 -initrd 사용). iso 또는 uefi 지정하면 mkiso.sh 에 의해 구축 된 부팅 ISO가로드됩니다. uefi 옵션은 또한 QEMU가 UEFI 펌웨어를로드하도록 구성하여 멋진 고화질 프레임 버퍼 콘솔을 제공합니다. 그렇지 않으면 mkfloppy.sh 에서 만든 부팅 플로피가 사용됩니다. 추가 논쟁은 QEMU에 전달됩니다. 예를 들어, QEMU에서 PC 스피커를 사용하여 i386 릴리스 빌드를 실행하려면 다음을 전달할 수 있습니다 (최근 QEMU 버전을 사용하고 Pulseaudio가 있다고 가정 함).
./run.sh release -machine pcspk-audiodev=snd0 -audiodev pa,id=snd0
직렬 포트 로깅을 켜면 디버그 빌드가 천천히 실행될 수 있습니다. NT Executive Project의 마스터 헤더를 수정하여 로깅을 해제 할 수 있습니다 ( private/ntos/inc/ntos.h 참조).
우리는 LLVM 도구 체인을 사용하므로 이론적으로 교차 컴파일은 단순히 특별한 취급없이 작동해야합니다. 실제로, i386 / amd64 에서 최종 SEL4 커널 실행 가능 링커 스크립트는 GNU LD 링커 만 지원하는 기능에 의존하므로 LLVM 링커 (LLD)를 사용하여 SEL4 커널을 연결할 수 없습니다. 즉, 대상 트리플 i686-pc-linux-gnu 및 x86_64-pc-linux-gnu 에 대한 GNU LD 가교기가 필요합니다. 일반적인 장소 ( /usr/bin )에 설치되어 clang 찾아서 SEL4 커널을 연결할 때 올바르게 호출 할 수 있습니다. 도구 체인의 PE 부분은 완전히 자 급식이며 크로스 컴파일 할 때 특별한 취급이 필요하지 않습니다 (Linux 호스트에서 Windows를 타겟팅하기 때문에 이미 크로스 툴 체인입니다).
llvm-14 사용하여 Loongarch64 (Loongson 3A5000 프로세서)에서 실행되는 Archlinux에서 크로스 컴파일이 테스트되며 올바른 코드를 생성하는 것으로 보입니다. 문제가 발생하면 문제를여십시오.
Grub가 i686/amd64가 아닌 기본 플랫폼 용으로 구축되면 mkiso.sh 에서 생성 된 Boot ISO는 grub-mkrescue 기본 플랫폼의 부팅 파일을 ISO에 복사하려고 시도하기 때문에 작동하지 않습니다. 이 문제를 해결하려면 i686/AMD64 용 Grub 패키지를 교차 구축하십시오 (또는 i686/AMD64 시스템에서 최종 ISO 생성을 실행하십시오).
문서는 docs 디렉토리 아래에 있습니다. Neptune OS의 내부 작업을 이해하는 데 관심이있는 개발자와 운영 체제의 아키텍처 개요로 시작하는 Developer-Guide.md 를 읽고 개별 OS 구성 요소의 다양한 설계 결정을 설명합니다. 또한 Reactos의 포팅 드라이버에 관심이있는 사람들을위한 드라이버 포팅 안내서가 포함되어 있습니다.