警告
インストール手順に複数の誤りが見つかったため、新しい文書を準備中です。この文書の手順は実行しないでください。(3月11日追記)
改定版の文書を作成しました。こちらを参照してください。(3月15日追記)
前回はルートファイルシステムだけインストールしましたが、「デバイスを足せばフルインストールできるのでは」と思い立ち、磁気テープドライブ TM11 (TU10)と大容量ハードディスクドライブRP11 (RP03)を追加してみました。
2.11BSDのRP03ドライバ
配布されたソースツリーでは組み込めるようになっていませんが、RP03のドライバ(rp.c)は/usr/src/sys/OTHERS/rp03/の下にあります。ここにあるrp.cとrpreg.hを/usr/src/sys/pdpuba/に移動して後述のパッチを適用することで動作するようになります。
パッチを適用する前にファイルを移動するのを忘れないようにしてください。
TM11のドライバの組み込み
こちらはドライバ自身は無改造で組み込めますが、カーネル起動時に初期化されないため、autoconfigを動かすか、静的に初期化関数を呼び出すかする必要があります。
メモリが足りない状態ではautoconfigを動かせる気がしなかったので、上記のRP03のドライバと合わせて静的に初期化関数を呼び出すことにしました。
デバイスを追加するためのパッチ
パッチはこちらです。 デバイスを追加するパッチ
変更量を少なくするために、デバイス番号などは既存のデバイスドライバ(br.c)が使用しているものを乗っ取っています(邪悪)。
なお、ドライバの初期化関数を静的に呼び出している部分を見ると魂が汚れるので、見ないふりをすることをお勧めします。
用意するもの
前回と同様ですが、追加でfile6.tarのみを書き込んだmicroSDカードが必要です。これはテープデバイスのエミュレーションの1ファイル32MBの制限を回避するためのものです。
インストール手順
まずは前回の手順に従ってシングルユーザモードで起動できるようにします。ただし、ソースコードのパッチは今回のものも追加で適用します。新しいカーネルで起動してください。
以後の作業はシングルユーザモードで行います。デバイスファイルを作成するだけでも分のオーダーの時間がかかるので、気長に待ちましょう。
なお、引数"br[012]"でデバイスを作成していますが、生成されるデバイスファイル名は"rp*"となります。MAKEDEVはこういう実装になっていますので混乱しないようにしてください。
@773010g
73Boot from rk(0,0,0) at 0177404
: rk(0,0)unix
Boot: bootdev=03000 bootcsr=0177404
2.11 BSD UNIX #46: Sat Feb 28 15:50:06 PST 2026
root@curly.2bsd.com:/usr/src/sys/SMALL
phys mem = 253952
avail mem = 64832
user mem = 307200
February 28 03:27:10 init: configure system
autoconfig: couldn't find symbols in /unix.
February 28 03:27:11 init: configuration setup error
erase, kill ^U, intr ^C
# stty erase ^H crt
# cd /dev
# rm -f *rk* *mt* *rp*
# ./MAKEDEV rk0 tm0 br0 br1 br2
# ls -l rk0* *mt0 rp*
brw-rw-rw- 1 root 1, 0 Feb 28 03:28 mt0
brw-rw-rw- 1 root 1, 4 Feb 28 03:28 nmt0
crw-rw-rw- 1 root 7, 4 Feb 28 03:28 nrmt0
brw-r----- 1 root 6, 0 Feb 28 03:28 rk0h
crw-rw-rw- 1 root 7, 0 Feb 28 03:28 rmt0
brw-r----- 1 root 11, 0 Feb 28 03:29 rp0a
brw-r----- 1 root 11, 1 Feb 28 03:29 rp0b
brw-r----- 1 root 11, 2 Feb 28 03:29 rp0c
brw-r----- 1 root 11, 3 Feb 28 03:29 rp0d
brw-r----- 1 root 11, 4 Feb 28 03:29 rp0e
brw-r----- 1 root 11, 5 Feb 28 03:29 rp0f
brw-r----- 1 root 11, 6 Feb 28 03:29 rp0g
brw-r----- 1 root 11, 7 Feb 28 03:29 rp0h
brw-r----- 1 root 11, 8 Feb 28 03:29 rp1a
brw-r----- 1 root 11, 9 Feb 28 03:29 rp1b
brw-r----- 1 root 11, 10 Feb 28 03:29 rp1c
brw-r----- 1 root 11, 11 Feb 28 03:29 rp1d
brw-r----- 1 root 11, 12 Feb 28 03:29 rp1e
brw-r----- 1 root 11, 13 Feb 28 03:29 rp1f
brw-r----- 1 root 11, 14 Feb 28 03:29 rp1g
brw-r----- 1 root 11, 15 Feb 28 03:29 rp1h
brw-r----- 1 root 11, 16 Feb 28 03:30 rp2a
brw-r----- 1 root 11, 17 Feb 28 03:30 rp2b
brw-r----- 1 root 11, 18 Feb 28 03:30 rp2c
brw-r----- 1 root 11, 19 Feb 28 03:30 rp2d
brw-r----- 1 root 11, 20 Feb 28 03:30 rp2e
brw-r----- 1 root 11, 21 Feb 28 03:30 rp2f
brw-r----- 1 root 11, 22 Feb 28 03:30 rp2g
brw-r----- 1 root 11, 23 Feb 28 03:30 rp2h
# cd /
# mkfs -s 80000 /dev/rp0h
isize = 20000
m/n = 2 100
# mkfs -s 80000 /dev/rp1h
isize = 20000
m/n = 2 100
# mkfs -s 10400 /dev/rp2a
isize = 2592
m/n = 2 100
# mkfs -s 64400 /dev/rp2c
isize = 16096
m/n = 2 100
# mount /dev/rp0h /usr
# mkdir /usr/src
# mount /dev/rp1h /usr/src
# mkdir /usr/src/ucb
# mkdir /usr/src/sys
# mount /dev/rp2a /usr/src/ucb
# mount /dev/rp2c /usr/src/sys
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
root 3022 2855 167 94% /
/dev/rp0h 78748 5 78743 0% /usr
/dev/rp1h 78748 4 78744 0% /usr/src
/dev/rp2a 10236 2 10234 0% /usr/src/ucb
/dev/rp2c 63392 2 63390 0% /usr/src/sys
# TAPE=/dev/nrmt0; export TAPE
# mt rew
# mt fsf 7
# cd /usr/src
# tar xv
x sys/pdpuba/tmscp.c, 55882 bytes, 110 tape blocks
x sys/pdpuba/rl.c, 18839 bytes, 37 tape blocks
x sys/pdpuba/tags symbolic link to ../sys/tags
(snip)
x include/varargs.h, 219 bytes, 1 tape blocks
x include/vfont.h, 546 bytes, 2 tape blocks
x include/Makefile, 2959 bytes, 6 tape blocks
# mt rew
# mt fsf 8
# tar xv
x Makefile, 3536 bytes, 7 tape blocks
x asm.sed, 53 bytes, 1 tape blocks
x asm.sed.pdp, 53 bytes, 1 tape blocks
(snip)
x usr.sbin/ntp/patchl, 5658 bytes, 12 tape blocks
x usr.sbin/ntp/read_local.c, 655 bytes, 2 tape blocks
x usr.sbin/Makefile, 777 bytes, 2 tape blocks
ここでmicroSDカードをfile6.tarのみ書き込んだものに交換する
# mt rew
# cd /usr
# tar xv
x adm/README, 107 bytes, 1 tape blocks
x adm/daily, 1609 bytes, 4 tape blocks
x adm/lpd-errs, 0 bytes, 0 tape blocks
(snip)
ucb/page linked to ucb/more
ucb/uptime linked to ucb/w
ucb/u linked to ucb/users
ucb/reset linked to ucb/tset
#
# df
Filesystem 1K-blocks Used Avail Capacity Mounted on
root 3022 2705 317 90% /
/dev/rp0h 78748 33417 45331 42% /usr
/dev/rp1h 78748 37281 41467 47% /usr/src
/dev/rp2a 10236 4126 6110 40% /usr/src/ucb
/dev/rp2c 63392 5180 58212 8% /usr/src/sys
#
以上でフルインストールの完了です。おそらくメモリ不足でログインプロンプトまでたどり着けないので、これ以上は先に進まないことをお勧めします。haltコマンドで終了しましょう。
次回予告(?)
メモリ拡張について検討してみました。検討事項として思いついたのは以下の三つです。
- 追加のアドレス腺の接続方法
- DMA可能なアドレス範囲の制限
- FPGAの空き領域(?)
BS信号(BS0, BS1)をPmodコネクタに接続する実験は行っていたので、1.については問題なさそうです(ジャンパ腺で対応可能)。
DMA可能なアドレス範囲ですが、ディスクもテープもDMAアドレスは18bitしかないので、サイズとしては256KBまでしかアクセスできません。このため、PDP-11ではUNIBUSのDMAアドレスを変換するUNIBUS mapという仕組みがあります。
このUNIBUS mapを新規実装するのは私のスキル的に難易度が高いのでためらっていたのですが、2.11BSDのドライバのソースを眺めていたら"SOFUB_MAP"というオプションに気が付きました。コンフィグファイルのコメントによると、
# Software UNIBUS/QBUS map. Permits
# use of 18 bit controllers in a 22 bit
# Qbus system. Normally NO except for
# the GENERIC kernel or if you actually
# have an 18 bit RX02 on a Qbus system.
とのことなので、これを有効にすればよさそうです。
FPGAの空き領域については余裕がありそうなので、これも大丈夫そうです。
ということで、メモリ拡張に挑戦してみようと思います。
0 件のコメント:
コメントを投稿