忍者ブログ
PCメモ
PC関係のメモ、気付いたこと。 simhとChromium OSをいじって遊んでいます。 Chromium OSのカスタムビルドを配布しています。(http://chromiumosde.gozaru.jp) twitter: @zui22904336 PGP fingerprint: 45FC 0E47 A68A FA06 02FE 2BEF B72C C6E6 F9FF 1C19
Admin / Write
2014/02/22 (Sat) 17:13

前々回前回とsimhのPDP-11エミュレータを使ってUNIX V7をインストールしました。
今回はこのUNIX V7に別のマシンからtelnetでログインできるようにしてみます。

前々回インストールしたSoftware KitのUNIX7と前回のインストールテープから入れたものとでは構成が結構違っています。今回はSoftware Kitから入れたほうを使って作業します。


カーネルソースのダウンロード


  外部からtelnetできるようにするためには、通信用のデバイスが必要ですが、今のままでは使えません。使えるようにするためにはカーネルの再構築を行う必要があります。

ただ、カーネルの再構築には当然カーネルソースが必要ですが、Software KitのUNIX V7にはカーネルソースが入っていません(テープイメージから入れたほうには最初からソースが入っています)。そのため、まずソースをダウンロードしてくる必要があります。

 ソースファイルを含めたUNIX V7の全ファイルは以下のコマンドでダウンロードします。作成されるディレクトリ階層が深いので上に持ってきます。

linux$ wget -r -np -nH ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Trees/V7/
linux$ mv pub/mirror/UnixArchive/PDP-1/Trees/V7/ .
linux$ cd V7

UNIX V7のソースはいくつかの場所で公開されていますが、Software KitのUNIX V7は磁気ディスクにRL02を使っているため、/usr/sys/confの下にrltmconfというファイルがあるものを用意する必要があります。このrltmconfがないソースアーカイブが多いので注意が必要です。

ソースへのパッチ


今回はDZ11 Terminal Multiplexerというというデバイスを有効にします。ただ、そのためには一部のソースにパッチを当てます。具体的には、カーネル再構築の設定を行う/usr/sys/conf/mkconfでデバイスdzを扱えるようにします。以下にその内容を示します。

45a46
> 	"dz",
248a250,259
>         "dz",
>         0, 300, CHAR+INTR,
> 	"	dzin; br5+%d.\n	dzou; br5+%d.",
>         ".globl _dzrint\ndzin:  jsr     r0,call; jmp _dzrint\n",
> 	".globl	_dzxint\ndzou:	jsr	r0,call; jmp _dzxint\n",
> 	"",
>         "       dzopen, dzclose, dzread, dzwrite, dzioctl, nulldev, dz_tty,",
> 	"",
>         "int    dzopen(), dzclose(), dzread(), dzwrite(), dzioctl();\nstruct	tty	dz_tty[];",
> 


このパッチの元ネタは以下のサイトで公開されているものです。

http://www.ljosa.com/~ljosa/v7-dz11

ただ、このサイトのパッチは前回使ったテープイメージ(Keith_Bostic_v7)のソース用に作られており、今回使うソースとはちょっと行番号がずれているので手直ししています。
このパッチをmkconf.c.diffという名前で保存しておきます。

続いて、ダウンロードしたソースファイルにこのパッチを当てます。

linux$ cp ./usr/sys/conf/mkconf.c ./usr/sys/conf/mkconf.c.org
linux$ patch ./usr/sys/conf/mkconf.c < mkconf.c.diff 
patching file ./usr/sys/conf/mkconf.c
linux$

カーネルソースをテープイメージに格納する


パッチを当てたら、カーネルソースが置かれている./usr/sysの内容をtarで固めて、simhのテープイメージに変換します。テープイメージの作成には前回の記事で使ったtapewriteコマンドを使います。

linux$ (cd ./usr/sys; tar --format=v7 -cf - .) | tapewrite > src.tap


作成したテープイメージsrc.tapはUNIX V7の実行環境があるディレクトリにコピーしておきます。


UNIX V7の起動とソースイメージのコピー



テープイメージがができたので、このテープの内容をUNIX V7に持っていきます。
そのため、起動用の設定ファイルを少し書き換えます。新しい設定ファイルの内容は以下の通りです。

linux$ cat boot.ini
set cpu 11/45
set cpu 256k
set rl0 RL02
att rl0 unix_v7_rl.dsk
set rl1 RL02
att rl1 rl1.dsk
att tm0 src.tap
boot rl0


追加したのは磁気ディスクrl1と磁気テープtm0の定義です。rl1は読み込むソースの展開先として使います。tm0はさっき作ったカーネルソースのテープイメージを読み込むために使います。

では、この 設定でUNIX V7を起動していきます。

linux$ pdp11 boot.ini

PDP-11 simulator V3.9-0
Disabling XQ
RL: creating new file
Overwrite last track? [N]   ← ディスクを追加したので聞いてきます。そのままEnter
@boot
New Boot, known devices are hp ht rk rl rp tm vt 
: rl(0,0)unix
mem = 177856
# (Ctrl-D)

Restricted rights: Use, duplication, or disclosure
is subject to restrictions stated in your contract with
Western Electric Company, Inc.
Thu Sep 22 17:55:15 EDT 1988

login: root
Password:
You have mail.
# 


では追加したrl1にファイルシステムを作ってマウントし、テープイメージを読み込みます。

# mkdir /mnt
# /etc/mkfs /dev/rl1 5000   ←値は適当
size = 1600
m/n = 3 500
# /etc/mount /dev/rl1 /mnt
# cd /mnt
# mkdir usr
# cd usr/
# mkdir sys
# cd sys
# tar xvf /dev/mt0


これで/mnt/usr/sysの下にカーネルソースができました。


カーネル再構築


続けて、デバイスdzが使えるようにカーネル再構築の設定を行います。まず、カーネル再構築用のツールであるmkconfをさっきパッチを当てたソースで再コンパイルします。

# cd /mnt/usr/sys/conf
# mv mkconf mkconf.org
# cc mkconf.c -o mkconf

続いてデバイスdzを組み込むための設定ファイルを作ります。もともとある設定ファイルrltmunixにデバイスdzを追加します。

# cat > unixconf
dz
(Ctrl-d)
# cat rltmconf >> unixconf
# cat unixconf
dz
rl
tm
root rl 0
swap rl 0
swplo 18000
nswap 2480


設定ファイルにdzが入ったので、この設定ファイルを使ってカーネルを再構築します。

# mkconf < unixconf
# make

日付をきちんと設定していないので、すでにunixがあるというエラーが出るかもしれません。そのときはunixと.oファイルを消して再度makeします。 これで、/mnt/usr/sys/conf/unixにビルドした新しいカーネルができます。
このカーネルなら外部からの接続を受け付けられますが、まだ少し準備が必要です。

デバイスファイルの作成


まず/dev配下に外部端末用のttyファイルを作ります。その前に、c.cファイルの中にdzのメジャー番号が書かれているのでまずそれを調べます。

# cd /mnt/usr/sys/conf
# cat c.c
略
       dzopen, dzclose, dzread, dzwrite, dzioctl, nulldev, dz_tty,      /* dz = 19 */


この例ではdzのメジャー番号は19です。この行にはdzopen、dzcloseなどの名前が書かれていますが、再構築する前のc.cではこの行がすべてnodevになっています。
メジャー番号がわかったのでデバイスファイルを作ります。とりあえず今回は3つ作っておきます。

# cd /dev
# /etc/mknod tty00 c 19 0
# /etc/mknod tty01 c 19 1
# /etc/mknod tty02 c 19 2
#


続いて/etc/ttysファイルを編集して、今作ったデバイスを有効にします。/etc/ttysのtty0?の行はいずれも00で始まっていますが、これを12で始まるように書き換えます。

# cat /etc/ttys
14console
00tty00
00tty01
00tty02
00tty03
00tty04
00tty05
00tty06
略
# ed /etc/ttys
266
2,4s/00/12/
w
266
q
# cat /etc/ttys
14console
12tty00
12tty01
12tty02
00tty03
00tty04
00tty05
00tty06
略


最初は"10tty??"にしていましたが、これだと外部からつないだときのレスポンスがかなり悪くなります。いろいろ対策を探していたのですが、2ケタ目が0だと端末との通信速度が300~1200ボーとして扱われるということがわかりました。ここを2にすることで9600ボーの端末として扱われ、レスポンスが劇的に改善しました。

では、カーネルを置き換えていったん終わらせます。

# cd /
# mv unix unix.org
# cp /mnt/usr/sys/conf/unix .
# sync;sync;sync
# 
Simulation stopped, PC: 002306 (MOV (SP)+,177776)
sim> q
Goodbye
linux$ 


起動時にdzを有効にするために、simhの設定ファイルを書き換えます。

linux$ cat boot.ini
set cpu 11/45
set cpu 256k
set rl0 RL02
att rl0 unix_v7_rl.dsk
set rl1 RL02
att rl1 rl1.dsk
set dz 7b lines=32   ← 追加
att dz -am 4096  ← 追加:ポート4096で待ち受ける
boot rl0

待ち受け用ポート番号は環境に応じて適当に指定します。待ち受けポートはiptablesの設定で外部からの接続を受け付けるようにしておく必要があります。では、この設定を使ってbootします。

linux$ pdp11 boot.ini

PDP-11 simulator V3.9-0
Disabling XQ
Listening on port 4096 (socket 6)  ← この行が出ることを確認する
Modem control activated
Auto disconnect activated
@boot
New Boot, known devices are hp ht rk rl rp tm vt 
: rl(0,0)unix
mem = 175808
# Restricted rights: Use, duplication, or disclosure
is subject to restrictions stated in your contract with
Western Electric Company, Inc.
Thu Sep 22 19:54:23 EDT 1988

login: root
Password:
You have mail.
#

無事にブートしたので、別のマシンから接続してみます。今回はWindowsマシンのTeraTermからtelnetでlinuxマシンのポート4096につないでみます。
無事につながりました。

 
今回はここまで。

[関連記事]



ランキングに参加してみました。クリックしていただければ嬉しいです。

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

パソコン ブログランキングへ

拍手[0回]

PR


Comment
Name
Title
Mail
URL
Comment
Pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  HOME   13  12  11  10  9  8  7  6  5  4  3 
プロフィール
HN:
zui
性別:
非公開
PR
忍者カウンター
忍者ブログ [PR]