Murax64 とは?
オープンソースで、POSIX準拠を目指した x86_64、CLIインターフェースのマイクロカーネルOSです。
開発言語は C とアセンブラです。
名前は何でも良かったんですが、一応自分の名前から4文字取って、POSIXのXと64ビットカーネルの64を付けました。
ちなみに、MINIX のアライグマのマスコットを見習って、たぬきのマスコットを付けてみました。(照笑)
特徴
実行単位をタスクとして管理し、タスクはカーネルモードやユーザーモードで実行。
ドライバー、ファイルシステム、ネットワークスタック(icmp 送受信のみ)、プロセス管理などのサーバーは、ユーザータスクとして、または
ユーザータスクから関数として呼び出せるスレッドとして実行。
サーバーは同期・非同期呼び出し対応。
ドライバーは、ahci, intel ethernet, tty, usb(キーボード機能のみ)、acpi(acpica を使用)など。
ファイルシステムは ext2。
カーネルは、タスク管理、仮想メモリー管理、x86_64 依存処理、サーバー送受信などを行う。
libc には musl を使用。
shell には Bash を入れて、その他 Coreutils などの多数のコマンドを入れていますが、それらのテストはまだできていません。
起動時のユーザー環境の初期化で、Sysvinit と Vine linux から持ってきて修正した初期化スクリプトなどを実行し、最後は Bash が起動します。
コンパイル
コンパイルには clang, lld, bison(Bash などのコンパイルに必要) を使います。(clang の方が gcc よりも速いので)
Murax64 ディレクトリに移動して、make でコンパイルが始まります。
コンパイルには1〜2分かかります。
clang のバージョンが 18 よりも古いと、コンパイルエラーが起きるかもしれません。その場合は、Make.in.clang14 と kern/types.h.clang14 をそれぞれ Make.in と kern/types.h に置き換えて再コンパイルしてみてください。
QEMU で実行
Linux Mint 22.3, Linux Mint 21.3, WSL2 で実行確認済。
make disk で QEMU 用ディスクイメージを作成。
WSL2 の場合、make disk でエラーメッセージが出ますが、これは WSL2 が parted コマンドでパーティションを認識
できないのが原因みたいです。別方法でパーティションを認識しているので、問題ありません。
make qemu で QEMU が起動。
システムセットアップが終了したら、Sysvinit の init プログラムが実行されて、ユーザー環境の初期化を行います。
ログインプロンプトが出たら、ユーザー名 root か test でパスワード無しでログインできます。
その後できることは、適当にコマンドをいじることぐらいですが、前述の通り Bash や各コマンドはテストできていないので、多分変な表示が出たり、
バグったりするんじゃないかと思います。(照笑)
例えば、シャットダウンしようとして root でログインして halt -p と入力実行すると、init プログラムが走って、”/proc/...” が無いよ!
って怒られて止まってしまいます。contrib/sysvinit-2.90/src/halt.c の、init を exec() するところをコメントアウトしてやればシャットダウン
できるのですが、これでは根本的な解決にならないので、そのままにしてあります。
(ちなみに今のところ、テストの確認で、ディスクイメージ上のファイルシステムを保存するために、./test と入力実行することで、
ファイルシステムをアンマウントしてシャットダウンできるようにしてあります。)