Tiki:cont から Omicron:ContOS へ そして Omicron:Grub へ。
妄想モード
bochs を試す ...
NetBSD-1.5.2/i386 のインストーラ ... 起動。
メッセージを抜粋すると
cpu0: Intel Pentium (P5) (586-class), 0.51 MHz wd0: drive supports 1-sector pio transfers, chs addressing
あれ、ne2000 が probe されていない。
ne2000 を使えるようにするには、
1. configure のときに --enable-ne2000 とする。 2. bochsrc.txt に ne2k: ioaddr=0x280, irq=9, mac=b0:c4:20:00:00:00, ethmod=linux, ethdev=eth0 なんて書く。 3. bochs を root で起動する
そうすると....
ne0 at isa0 port 0x280-0x29f irq 9 ne0: NE2000 Ethernet ne0: Ethernet address b0:c4:20:00:00:00
とか出てみつけてくれた。ただし、なんか使えない。
00435074488i[NE2K ] RCR write, monitor bit set! 00435074497i[NE2K ] TCR write, loop mode 1 not supported
なんて出ているから、エミュレーションの問題か。... と思ったけど違う。 単に初期化でサポートしていない機能をつかってみているだけ。 一応 Network は使えた。ただ、ホストOS には アクセスできない。
ちなみに、2.88MB の ブートイメージは、サポートしてる。
floppya: 2_88=boot-big.fs, status=inserted
FreeBSD 4.5 のインストーラを立ち上げてみる....
ed0 at port 0x280-0x29f iomem 0xd8000 irq 10 isa0 ed0: address b0:c4:20:00:00:00, type NE2000 (16 bit)
とか出た後で
Event type: PANIC Device: [NE2K ] Message: [NE2K ] asic write invalid address 0002 となる。cont で先にいっても Event type: PANIC Device: [NE2K ] Message: [NE2K ] ne2K: dma write, byte count 0 さらに cont Event type: PANIC Device: [NE2K ] Message: [NE2K ] ne2K: dma read underrun なんか FreeBSD は Network が 動かないっぽい。
なんどか cont していると 見慣れた メニュー画面が...
ne2k のエミュレーションに問題がある以外は、良いかんじ。
Linux-2.4系カーネルを make して 動かしてみる
がーん。動かん。 カーネルを 586 にして make すれば カーネルが立ち上がる 直前まで来る ... ところが、/sbin/init が i686 で make されているらしく ...
00156848290p[CPU ] >>PANIC<< cmov_gded called
なんて言われてしまう。EIP=40003e2b となっているからカーネルではない のは明らか。カーネルは、EIP=c0xxxxxx
40000000-40016000 r-xp 00000000 08:01 433023 /lib/ld-2.2.2.so
どうもこいつらしい。
しょうがないので、次ぎのやつを試してみたら ...
#define BX_CPU_LEVEL 5 #define BX_CPU_LEVEL_HACKED 6
なんとか立ち上がった。よしよし。
Grub をインストールしてみる。
フロッピーイメージファイルに対して
dd if=/usr/local/share/grub/i386-pc/stage1 of=floppya.img dd if=/usr/local/share/grub/i386-pc/stage2 of=floppya.img skip=1
とかする。
で、bochs を起動すると floppy から grub が立ち上がる。
ディスクイメージ は、あらかじめファイルシステムを作っておいて
/grub/stage1 /grub/stage2 /grub/*_stage1_5
を 仕込んでおく。
root (hd0,1)/grub setup (hd0)
でとりあえず、インストールされる。
Kondara_grub_HOWTO をみると、いろいろわざがあるらしい。
これは単なる MBR 用 ブートストラップ
自分が読み込まれたら、次に 自分に続く DISK 領域を読んできて 制御を渡す。 (... たぶん)
これは、ファイル システムを認識できるブートローダ。MBR のすぐ後ろにおかれる。 (サイズの問題があり)ファイルシステムごとに 別々になっている。
と沢山ある。
どこから 次を 読み込んでくるか。およびどのパラメータを渡すかは、 stage1_5 内に たぶん書き込まれている。
これが grub 本体。カーネルロード専用の OS 。
read-only でしか mount できないが、上記のファイルシステムを全部含んでいて さらに、network ? とか コンソールオペレーションができる。 gzip された イメージを展開して vga に張り付けたりも。
なるほど、これで遊ぶというのが... Omicron:Grub さらに Omicron:ContOS というわけか。
NetBSD のブートローダーも紹介。
grub に似ている面がある、正確にはライブラリで、libsa --- sys/lib/libsa