Neptune OSは、SEL4マイクロカーネルのWindows NTパーソナリティです。 MicrosoftがSEL4 Microkernelの下のユーザープロセスとして、Windows Kernel NTOSKRNL.EXEの上層である「NTエグゼクティブ」と呼んでいるものを実装します。 NTエグゼクティブは、いわゆるNTネイティブAPIを実装します。これは、より馴染みのあるWin32 APIが構築されるWindowsのネイティブシステムコールインターフェイスです。これらは、 NtCreateProcessなどの名前を持つNTDLL.DLLのスタブ関数を介してユーザーモードに公開されます。 NTエグゼクティブは、プログラミングインターフェイスをデバイスドライバーに公開する責任もあります。前述のインターフェイスには、 IoConnectInterruptやIoCallDriverなどの関数が含まれています。当社のアーキテクチャにより、デバイスドライバーは個別のユーザースペースプロセスで実行し、標準のSEL4 IPCプリミティブを介してNTエグゼクティブプロセスと通信できます。
Neptune OSプロジェクトの最終的な目標は、Reactosユーザーの土地をNeptune OSおよびほとんどのReactosカーネルドライバーの下に移植できるように、十分なNTセマンティクスを実装することです。理論的には、NTネイティブAPIの実装が十分に忠実であるため、ネイティブWindows実行可能ファイルとのバイナリ互換性を実現できるはずです。また、Windowsデバイスドライバーとファイルシステムドライバーを使用して高度なソースコードポータビリティを実現できるはずですが、この目標を非現実的にするWindows/Reactosとのアーキテクチャの違いにより、完全なライン用ソースコードの互換性を目指していません。詳細については、ドキュメントセクションをご覧ください。
プロジェクトの現在のステータスは、FAT12/16/32ファイルシステムドライバーfatfs.sysを含む、読み取りと書き込みバックのキャッシュサポートを備えた合理的に完全なファイルシステムスタックをサポートするのに十分なNTエグゼクティブコンポーネントを実装しfdc.sysことです。また、キーボードクラスのドライバーkbdclass.sysとps/2ポートドライバーi8042prt.sysを含む、基本的なキーボードドライバースタックもあります。これらを使用すると、 pwd 、 cd 、 copy 、 move 、 del 、 mount 、 umountなど、ほとんどの一般的なシェルコマンドをサポートするReactosプロジェクトから取られた基本コマンドプロンプトntcmd.exeを実行できます。また、PCスピーカーに迷惑なサウンドを作成するbeep.sysドライバーも含めます。
システム全体がフロッピーに適合し、リリースv0.2.0002からダウンロードできます。 YouTubeで短いデモを見ることができます。自分で構築することもできます。建物のセクションを参照してください。
次のリリースでは、ほとんどのPATA/SATAハードディスクをサポートできるように、ATA/AHCIドライバースタックをReactosから移植することを計画しています。また、マイクロカーネルの設計が容認できないパフォーマンスのペナルティにつながらないことを示すことができるように、ディスクベンチマークスイートを作成/ポートすることも計画しています。
i386システムの場合(おそらくi686と呼ばれるべきです):
sel4/src/arch/x86/32/head.Sのアセンブリルーチンenable_paging参照)。AMD64システムの場合:
fsgsbase命令を有効にして構築されます。これは、Ivy Bridge以降でのみサポートされています。以前のCPUでAMD64ビルドを実行するにはprivate/ntos/cmake/sel4.cmakeでFSGSBase命令を無効にできます。また、CMPXCHG16Bが必要です。これは、Nehalem以降利用可能であり、おそらくより早い場合があります(以前のCore 2プロセッサがマイクロコードの更新が必要になる場合があります)。 amd64マシンの場合、ThinkPad X230が機能するようにテストされています。
Linuxの下で構築する必要があります(SEL4は他のオペレーティングシステムの下で構築しません)。次のPython依存関係などが必要です。
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ユーティリティも必要です。最後に、ブートフロッピーおよびブートISOの場合、 syslinux (ブートフロッピー用)、 grubおよびxorriso (ブートISO用)、およびmtools (両方)のツールが必要です。
言語サーバー対応のIDEを使用してソースコードを閲覧することをお勧めします。テストされたセットアップは、言語サーバーとしてclangdを搭載したemacs上のlsp-modeパッケージです。 build.shスクリプトは、 clangd用のcompile_commands.jsonファイルを生成します。この目的のためにJQをインストールする必要があります。
プロジェクトを最初にクローンします(SEL4カーネルをサブモジュールとして含めるため、 git clone --recurse-submodulesを使用してください)。
./build.sh [amd64] [release]
amd64を指定しない場合、 i686ビルドです。 releaseを指定しない場合は、デバッグビルドです。ブートフロップを作成するには、タイプ
./mkfloopy.sh [amd64] [release]
ブートISOSを作成するには、タイプ
./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エグゼクティブプロジェクトのマスターヘッダーを変更して、ロギングをオフにできます( private/ntos/inc/ntos.hを参照)。
LLVMツールチェーンを使用するため、理論のクロスコンパイルは特別な取り扱いなしで単純に機能するはずです。実際には、 i386 / amd64では、最終的なSEL4カーネル実行可能ファイルのリンカースクリプトは、GNU LDリンカーのみがサポートする機能に依存しているため、LLVMリンカー(LLD)を使用してSEL4カーネルをリンクすることはできません。これは、ターゲットトリプルi686-pc-linux-gnuおよびx86_64-pc-linux-gnuに通常の場所( /usr/bin )にインストールされているGnu LDクロスclangが必要になることを意味します。ツールチェーンのPE部分は完全に自己完結型であり、クロスコンパイルの場合は特別な取り扱いを必要としません(LinuxホストのWindowsをターゲットにしているため、すでにクロスツールチェーンです)。
クロスコンパイルは、 llvm-14を使用してLoongarch64(Loongson 3A5000 Processor)で実行されているArchlinuxでテストされており、正しいコードを生成しているようです。問題が発生した場合は、問題を開いてください。
GrubがI686/AMD64ではなくネイティブプラットフォーム用に構築されている場合、 mkiso.shによって生成されたブートISOはgrub-mkrescueネイティブプラットフォームのブートファイルをISOにコピーしようとするため、動作しないことに注意してください。これを修正するには、i686/AMD64用のGrubパッケージをクロスビルドします(または、i686/AMD64システムで最終的なISO生成を実行するだけです)。
ドキュメントはdocsディレクトリの下にあります。 Neptune OSの内部仕組みを理解することに興味のある開発者の場合、オペレーティングシステムのアーキテクチャの概要から始まり、個々のOSコンポーネントのさまざまな設計上の決定を説明するために進むDeveloper-Guide.md Guide.mdをお読みください。また、Reactosの運転者を移植することに興味のある人向けのドライバーポーティングガイドも含まれています。