カーネル make 編 mips 関係 の カーネルが make できるかどうかやってみます。 pmax の make にトライします。 前準備) src.tar.gz の usr.sbin/config を展開し、 config を作成します。 make cp config /usr/local/mipsel-unknown-openbsd/bin ln -s /usr/local/mipsel-unknown-openbsd/bin/config /usr/local/bin/oconfig ----- srcsys.tar.gz を展開します。 0) arch の削除 必要ない アーキティクチャ依存のファイルを消しておきましょう。 rm -rf alpha amiga arm32 atari hp300 kbus m68k mac68k mvme68k mvme88k \ pc532 powerpc sparc sun3 vax wgrisc これで、53584 ブロック (25MB) ほど節約できます。 I) lib/libkern/Makefile の修正 lorder を ${LORDER} に変更します。 II) コンフィグ cd arch/pmax/conf oconfig PLUTO III) arch/compile/PLUTO/Makefile の修正 .include <<<< 挿入 AS?= as 次を変更 CMACHFLAGS= # -mno-abicalls -mcpu=r3000 CMACHFLAGS= -D__GP_SUPPORT__ -fpic つぎも修正 bsd: ${SYSTEM_DEP} swapbsd.o newvers ${SYSTEM_LD_HEAD} ${SYSTEM_LD} swapbsd.o # ${SYSTEM_LD_TAIL} << 削除 IV) make これで omake で make できるようになったはずです。 エラーがいっぱい出ますが、make のテストだけということで 無視します。 ------- 移植のステップ どのようにカーネルを移植していくかの計画案を書いておきます。 a) どれをベースにするか。 いちおう pmax をベースにするのがいいと思います。 ただし、デバイスドライバはすべて書きなおし。 どちらかというと、i386 系のドライバが近いので、i386 のドライバを 移植していった方がいいでしょう。 b) 移植手順 最初にブートを作らないとテストをする方法もないのですが、 それはおいておいて、カーネルについてだけ書きます。 ステップ1) コンソールメッセージの出力 pmax から、デバイスドライバを取り除き、 ディスクとコンソールドライバだけのカーネル をつくります。 ディスクドライバを動かすには、pao レベルまで入れないといけないので、 FreeBSD の ramdisk を移植し、diskimage をカーネル内に含むように したほうがいいと思います。 そうすると、最初のステップで必要となるデバイスは、console だけになります。 まずは、console の出力だけが必要です。 syscons のような大規模なドライバを使う前に、 簡単な console ドライバを作成した方が早いかも知れません。 ステップII) ddb(kdb) の動作確認 メモリの初期化ができ、コンソールメッセージが出力できるようになれば、 デバッグが少しできる状態になります。 コンソールのキーボードを使えるようにするためには、 割り込み系がちゃんと動かなくては なりません。割り込みドライバが最初の障害になると思います。 ここで、ddb(kdb) の動作を確認しましょう。 ステップIII) カーネル立ち上げ デバッグを進めていって、/sbin/init が動くところまで来たら、 ようやく、移植の準備が整ったことになります。 ここでは、/sbin/init の フォーマットが問題になると思います。 うまくいかないときは、pmax のバイナリを使ってみましょう。 ( でもそれでうまくいったら、gcc の移植が失敗していることになります。) ステップIV) コマンドの実行 /bin/sh が実行できるまでには、いろいろ難関があります。 FP レジスタがないことが、最大の障害になるでしょう。 setjmp などの アセンブラのソースを確認する必要があります。 ステップV) ドライバ移植 必要なドライバを移植していきます。 ここでも、ドライバのベースの選択が大事です。 PAO がある、FreeBSD のドライバを移植した方が良いでしょう。