GNU Hurd について
GNU Hurd は FSF が作った新しいフリーな OS のカーネルで、Mach マイクロカーネル上のサーバの集合体という形をとっています.
現在 Hurd はインテル i386 系の CPU を持つ AT 互換機でのみ動作しますが、Hurd 自身は機械依存性がほとんどなく、機種や CPU に依存する部分はほとんどすべて Mach マイクロカーネルに隠蔽されます.
Hurd について、さらに詳しいことは
Hurd のホームページ
をご覧ください.
Hurd を移植するには
- ターゲット用の GNU c (gcc) の作成.
- ターゲット用の GNU binutils の作成.
- gnumach or mach4 のターゲットへの移植.
- GNU libc のターゲットへの移植.
- Hurd のサーバ群をターゲット上で動かす.
- すべてのバイナリをターゲット上で動かす.
といった作業が必要です. 上記のような作業ができるなら、どんな作業環境でもいいのですが、おそらくいちばん簡単なのは Hurd をその作業環境とすることでしょう.
Mips 系 CPU の場合
私は Hurd をいくつかの Mips 系 CPU のターゲットに移植しています. ターゲットのひとつは R3000 ベースのもので、もうひとつは R4000PC (Primary Cache only version) ベースのものです.
もっとも最近の Mach, glibc, Hurd の Mips ポートの結果は以下のようなものです.
その他の雑多なファイルなども
ftp://ftp.sra.co.jp/pub/gnu/hurd-mips/
にあります. これは SRA の引地さんのご好意により、とっても遅いオリジナルの
ftp://ftp.kk.info.kanagawa-u.ac.jp/pub/kojima/hurd/
をミラーしていただいているものです.
問題点や、やらなければならないことはまだ山のようにあります.
- 現在の mips3 (R4000) 用ポートはネットワーク透過性を持っていません.
これは 64-bit アドレッシングモードでの一般的な問題で、Mach が例えば vm_address_t 型の値の範囲を 32-bit の無符号値に制限しているからです. この問題に関してはいい解はなさそうです.
もっとも簡単で、たぶんネットワーク透過性を完全に保つ方法は、このような CPU でもユーザのアドレス空間を 4GB に制限してしまうことです.
別の(完全ではない)方法として MIG (Mach Interface Generator) にしかけをして RPC のインターフェイス部分に vm_address_t 値の拡張とトランケーションを行うコードを生成することが考えられますが、これは既存のシステムに多くのあまりうれしくない変更を要します.
- 現在の mips3 用ポートはダイナミックリンクが使えません. この制約は GNU ld がまだ Mips Elf64 オブジェクトについてダイナミックオブジェクトを扱えないことからきています.
R3000 (Mips Elf32) についてはこの制限はなくシェアードライブラリが使えます.
ベアメタルたち
EVAL4000 は
LSI ロジック社の M4 チップセットの評価用ボードでハフトテクノロジーの今村さんのご好意でお借りしているものです.
これが現在の Hurd 移植のターゲットです.
EVAL4000 での Hurd のブートのようすをご覧になりますか?
P40 は
Mips R3000 を使った自家製ワークステーションです. これはとある日本の BBS に棲息していたグループが開発したものです.
私はこのマシンに t2 と呼んでいた Unix-like OS を書き、それを使って 386BSD(その後 FreeBSD)を移植しました.
このグループのリーダでもある鎌田さんはデバイスドライバのほとんどを書き、さらに CMU 版の Mach3 をこのマシンに移植しました.
鎌田さんと私で X11 も移植しています.
Index に戻る