FreeBSD 3.x-RELEASE や 4.x-RELEASE では /dev/od* がなくなったため、 標準のカーネルではファイルシステムとしては扱えません。 そこで、カーネルに od-driver というパッチを当てて Optical Disk である MO を使用可能にします。
2001/12/17 現在、最新バージョンは 4.1.1R 用です。 そこで、OS が 4.2R や 4.4R のときは、 著者作のパッチでとりあえずインストールしています。 ただし、od-driver で提供されている「以外」のパッチなどは 素人の著者作ですので、無保証無保障です。
用意するもの
注意[2003/06/02]
4.x 系では /dev/da* が SCSI 接続の MO ドライブに対応しており、 標準で(od-driver をインストールしなくても)使えるようです。 ただし、640MB (以上)の MO をフォーマットするには /etc/disktab に 640MB 用の記述(od-driver 付属のものでよいみたい)を 追加しておくとよいようです。640MB と 1300MB の MO 用 /etc/disktab は 次の通りです。mo640|Generic 3.5in 640MB MO disk:\ :dt=SCSI:ty=removable:\ :se#2048:nt#64:ns#32:nc#152:su#310352:\ :pa#310352:oa#0:ba#8192:fa#2048:ta=4.2BSD:\ :pb#0:ob#0:tb=swap:\ :pc#310352:oc#0: mo1300|Generic 3.5in 1300MB MO disk:\ :dt=SCSI:ty=removable:\ :se#2048:nt#64:ns#32:nc#296:su#605846:\ :pa#605846:oa#0:ba#8192:fa#2048:ta=4.2BSD:\ :pc#605846:oc#0:参考:
3.4-RELEASE |
著者が od-driver で MO の UFS フォーマットに成功した時の インストール状況を示しておきます。 マシンは、IBM InteliStation ZPro です。おそらく、X-Kern-Developer でも大丈夫でしょう。 PAO3 を入れないと、/dev/MAKEDEV に対するパッチがうまく当たらず、 かつ /etc/disktab を手動で変更しないといけません。
- FreeBSD 3.4-RELEASE
- PAO3 は入れない ( SMP のトラブルシューティング 参照)
- インストール時に X-Developer (ゲーム以外のすべてのソースとバイナ リ・X を含む)を選ぶ
% cd /somewhere % ls od-driver-3.3R.tar.gz % tar zxf od-driver-3.3R.tar.gz |
# cd /dev # patch < /somewhere/od-driver-3.3R/MAKEDEV.diff # cd /usr/src # patch -p1 < /somewhere/od-driver-3.3R/kernel.diff # patch -p1 < /somewhere/od-driver-3.3R/msdosfs.diff |
# cd /usr/src # patch -p1 < /somewhere/od-driver-3.3R/release.diff # cd /usr/src/lib/libdisk # make obj # make depend # make all # make install # cd /usr/src/release/sysinstall # make obj # make depend # make all # make install |
device od0 |
# cd /usr/src/sys/i386/conf # config MYKERNEL # cd ../../compile/MYKERNEL # make depend # make # make install |
# cd /dev # sh MAKEDEV od0 od0s4a |
デバイスファイル /dev/od* を作成するには、/dev/MAKEDEV に パッチを当てなければならないのですが、これがうまく当たりませんでした。 /dev/MAKEDEV.rej というファイルができてしまうのです。 ここからは推測ですが、原因は PAO3 を入れなかったことでしょう。 PAO3 を入れると /dev/MAKEDEV に od の内容が記述されるが、 入れないと記述されていない。 だからパッチが「あれ?言われているのと違うやん」となって うまく当らなかったのではないでしょうか。と、いうわけで od-driver-3.3R/MAKEDEV.diff を参照して GENERIC 用のパッチ MAKEDEV.GENERIC.patch を作りました。以下のようにパッチを当てて下さい。
# cd /dev
# patch < /somewhere/MAKEDEV.GENERIC.patch
# sh MAKEDEV od0 od0s4a
4.2-RELEASE |
# sh extract.sh |
# cd /dev # patch < /somewhere/MAKEDEV.patch |
# cd /etc p # patch < /somewhere/od-driver-4.1.1R/disktab.diff |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/kernel.diff # patch < /somewhere/disk.c.patch |
# cd /usr/src/sys/sys # install -c -m 444 mount.h /usr/include/sys |
# cd /usr/src/sbin/mount # patch < /somewhere/od-driver-4.1.1R/mount.diff # make obj # make depend # make # make install |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/release.diff # cd /usr/src/lib/libdisk # make obj # make depend # make # make install # cd /usr/src/release/sysinstall # make obj # make depend # make # make install |
# cd /usr/src/sbin/newfs_msdos # patch < /somewhere/od-driver-4.1.1R/newfs_msdos.diff # make obj # make depend # make # make install |
device od device cd |
# cd /usr/src/sys/i386/conf # cp GENERIC HOGE # vi HOGE # config HOGE # cd ../../compile/HOGE # make depend # make # make install |
# cd /dev # sh MAKEDEV od0 od0s4a |
4.4-RELEASE |
# sh extract.sh |
# cd /dev # patch < /somewhere/MAKEDEV.patch |
# cd /etc # patch < /somewhere/od-driver-4.1.1R/disktab.diff |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/kernel.diff # cd /usr/src/sys/sys # patch < /somewhere/mount.h.patch # cp /somewhere/scsi_od.c /usr/src/sys/cam/scsi |
何らかの理由で mount.h を元に戻すには mount.h.rev-patch を当てる。
# cd /usr/src/sys/sys # patch < /somewhere/mount.h.rev-patch |
scsi_od.c は od-driver で新たに作られるファイルです。 4.1.1R では、/usr/src/sys/i386/i386/pmap.c で定義されている関数 pmap_kenter_temporary(vm_offset_t pa) が1つの引数を取るのに対し、 4.4R では同じ関数が pmap_kenter_temporary(vm_offset_t pa, ini i) と2つの引数を取ります。 このため、kernel.diff で作った scsi_od.c では、 新しいカーネルのコンパイルの際に、
../../cam/scsi/scsi_od.c: In function `oddump': ../../cam/scsi/scsi_od.c:696: too few arguments to function `pmap_kenter_temporary' ../../cam/scsi/scsi_od.c:698: too few arguments to function `pmap_kenter_temporary' *** Error code 1 |
# cd /usr/src/sys/sys # install -c -m 444 mount.h /usr/include/sys |
# cd /usr/src/sbin/mount # patch < /somewhere/od-driver-4.1.1R/mount.diff # make obj # make depend # make # make install |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/release.diff # cd /usr/src/lib/libdisk # patch < /somewhere/disk.c.patch # make obj # make depend # make # make install # cd /usr/src/release/sysinstall # make obj # make depend # make # make install |
# cd /usr/src/sbin/newfs_msdos # patch < /somewhere/od-driver-4.1.1R/newfs_msdos.diff # make obj # make depend # make # make install |
device od |
# cd /usr/src/sys/i386/conf # cp GENERIC HOGE # vi HOGE # config HOGE # cd ../../compile/HOGE # make depend # make # make install |
# cd /dev # sh MAKEDEV od0 od0s4a |
4.5-RELEASE |
% cd /somewhere % gunzip /somewhere/od-driver-4.1.1R.tar.gz | tar xf - |
# sh extract.sh |
# cd /dev # patch < /somewhere/MAKEDEV.patch |
# cd /etc # patch < /somewhere/od-driver-4.1.1R/disktab.diff |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/kernel.diff # cd /usr/src/sys/sys # mv mount.h.orig mount.h.orig.orig # patch < /somewhere/mount.h.patch # rm mount.h.rej # cp /somewhere/scsi_od.c /usr/src/sys/cam/scsi # cd /usr/src/sys/ufs/ffs # mv ffs_vfsops.c.orig ffs_vfsops.c.orig.orig # patch < /somewhere/ffs_vfsops.c.patch # rm ffs_vfsops.c.rej |
ちょっと説明
scsi_od.c は od-driver で新たに作られるファイルです。
4.1.1R では、/usr/src/sys/i386/i386/pmap.c で定義されている関数
pmap_kenter_temporary(vm_offset_t pa) が1つの引数を取るのに対し、
4.4R では同じ関数が pmap_kenter_temporary(vm_offset_t pa, ini i)
と2つの引数を取ります。
このため、kernel.diff で作った scsi_od.c では、
新しいカーネルのコンパイルの際に、
../../cam/scsi/scsi_od.c: In function `oddump': ../../cam/scsi/scsi_od.c:696: too few arguments to function `pmap_kenter_temporary' ../../cam/scsi/scsi_od.c:698: too few arguments to function `pmap_kenter_temporary' *** Error code 1 |
# cd /usr/src/sys/sys # install -c -m 444 mount.h /usr/include/sys |
# cd /usr/src/sbin/mount # patch < /somewhere/od-driver-4.1.1R/mount.diff # make obj # make depend # make # make install |
# cd /usr/src # patch -p1 < /somewhere/od-driver-4.1.1R/release.diff # cd /usr/src/lib/libdisk # patch < /somewhere/disk.c.patch # make obj # make depend # make # make install # rm disk.c.rej # cd /usr/src/release/sysinstall # make obj # make depend # make # make install |
# cd /usr/src/sbin/newfs_msdos # patch < /somewhere/od-driver-4.1.1R/newfs_msdos.diff # make obj # make depend # make # make install |
device od |
# cd /usr/src/sys/i386/conf # cp GENERIC HOGE # vi HOGE # config HOGE # cd ../../compile/HOGE # make depend # make # make install |
# cd /dev # sh MAKEDEV od0 od0s4a |