Let's Note CF-C33 に Plan9 を載せる

故あってノートパソコンに Plan9 を載せる事にした。
手元には2つのノートパソコンがあるが、そのうちの古い方が CF-C33 (Panasonic CF-C33 = Let's Note CF-C33)である。
CF-C33 はサブノートパソコンであり、携帯性はとても良いので筆者が愛用しているパソコンの1つである。

Plan9 を載せる上でまず調べる必要があるのは VGA と NIC である。
CF-C33 の VGA コントローラは NeoMagic MagicGraph であり、これは Plan9 でサポートされている。実際に Plan9 のインストール用の FD から起動したところ /lib/vgadb には手を加える必要がない事が判明した。
CF-C33 で筆者が使用しているのは Melco の LPC2-T である。日本のメーカのものは屡々素性が良く分からない。使用されているコントローラは公表して欲しいのだが日本のメーカは公表しない事が多い。インターネットで検索した結果素晴らしいホームページに出会った。

	http://www.rccm.co.jp/~juk/linux/server_setup/
このホームページはI/O機器のコントローラに関する膨大な調査結果を載せている。それによると LPC2-T は NE2000 クローンらしい。
plan9.ini で
	ether0=type=ec2t id=LPC2
と書いて NIC が認識された。

CF-C33 の購入時のハードディスク( HD )容量は 4GB である。
ついでに 20BG の HD と交換する事にした。
HD のサイズは 2.5 インチ、厚さ 9mm である。
この作業の詳細

さて、予定では新しい HD に、最初に Windows98 を組み込むつもりであったが、これは一筋縄では行かない事に気付いた。
筆者は CF-C33 のために IO データの PCSC-F を用意していた。いざと言う時のために SCSI の CD-ROM へのアクセスルートを確保しておいたのである。(実際には一度も使用されなかったが。)
ところが CF-C33 用に作成した 「First Ade FD for Windows」が CD-ROM を認識しないのである。多分筆者が軽く考え過ぎていたのであろう。再インストール可能の確認を怠ったために関連するドライバが全く組み込まれていなかった。IO データから提供されているドライバを CONFIG.SYS に組み込んでも認識しない。原因は CardBus 用のドライバが CONFIG.SYS に組み込まれていないかららしい。ところがこのドライバがどこにあるのか分からない。結局 Windows98 の組み込みは後回しにした。

ネットワークを通じて組み込むしかない。幸い Plan9 には素晴らしいネットワーク環境がある。

pc と note はここに登場する2つのパソコンの(筆者が勝手に付けた)名称である。
note は今問題にしている CF-C33 、 pc は組み立てパソコンで、Windows98、Windows2000、Plan9、Linux が動く様になっている。

Plan9 のインストール

最初の目標は note を FD からブートして Plan9 端末にすることである。
note のルートファイルシステムは pc の HD である。
pc 側では

	disk/kfscmd listen
	disk/kfscmd noneattach
を実行しておく。

note の FD の内容
9pc.gz
plan9.ini

plan9.ini には

	monitor=xga
	vgasize=800x600x8
	mouseport=ps2
	pcmcia0=type=XXX irq=10		← これは多分不要
	ether0=type=ec2t id=LPC2	← LPC2 で Melco の LPC2-T が認識された
	bootfile=fd0!dos!9pc.gz
	fs=192.168.1.2		← これは pc の IP アドレス

マウスは ps2 にする。これでスマートポインタが使用できるが、PS2 マウスも使える。
(PS2マウスを外付けする場合には BIOS の設定でスマートポインタを止める。)

ブート時の選択

	user [none]:	← ユーザ none でログインする

note の HD に Plan9 パーティションを作成する。
ついでに dos パーティションも作成しておく。dos パーティションは外したディスクのコピーをとる予定なので、サイズを一致させる。
注意: win98 に付属する fdisk は 8GB までしか扱えない。またパーティションサイズを正確に設定するのが困難である。従って fdisk は Plan9 に付属するものを使用するのがよい。

	disk/mbr -m /386/mbr /dev/sdC0/data
	disk/fdisk /dev/sdC0/data
	disk/prep -baw /dev/sdC0/plan9
	disk/format -b /386/bpslba -d -r 2 /dev/sdC0/9fat 9load 9pcdisk plan9.ini

fdisk

disk/kfs -rb4096 -f/dev/sdC0/fs
参考のために筆者の割り付けを載せる。
	term% disk/fdisk -r /dev/sdC0/data
	cylinder = 8225280 bytes
		p1                     0 512         (512 cylinders, 3.92 GB) FAT32
		empty                512 1027        (515 cylinders, 3.94 GB) 
		* p2                  1027 1700        (673 cylinders, 5.15 GB) PLAN9
		empty               1700 2432        (732 cylinders, 5.60 GB) 
	>>> 
fdisk のマニュアルには t (タイプ)コマンドの説明が無い。パーティションを設定してもタイプコマンドでパーティションタイプを指定しないと書き込まれない。
筆者は fdisk で dos パーティションをアクティブにするのを忘れていたらしい。
これは dos 側で後からでも可能である。(FD で DOS をブート)
dos パーティションは後に述べる理由で古い HD と同じにしておく。

prep

	disk/prep -baw /dev/sdC0/plan9
によって
	9fat
	fs
	swap
が適当に割り付けられる。
参考のために筆者の割り付けを載せる。
	term% disk/prep -r /dev/sdC0/plan9
	  9fat                  0 20482      (20482 sectors, 10.00 MB)
	  fs                20482 10695777   (10675295 sectors, 5.09 GB)
	  swap           10695777 10811745   (115968 sectors, 56.62 MB)
	>>> 
Ref: prep(8)

format

	disk/format -b /386/bpslba -d -r 2 /dev/sdC0/9fat 9load 9pcdisk plan9.ini
9fat がフォーマットされる。
/386/bps は 8GB までしか扱えないので /386/bpslba を使用する。
9load は FAT32 を認識する。従って 9pcdisk は win98 のファイルシステムに置く事もできる。

Plan9 のインストール

pc のファイルシステムをマウントする
	9fs pc
但し /n/pc を作成しておく。(読者は多分 pc ではなく他の名前を使用しているであろう。)

note の kfs を /n/kfs にマウントする

	mount -c /srv/kfs /n/kfs
	disk/kfscmd allow

pc 側でもパーミッションチェックを外しておく。
	disk/kfscmd allow

/n/pc から /n/kfs へファイルを全て忠実にコピーする。そのためには
	disk/mkext 
	disk/mkfs
を使用するが、筆者は自作のもっと手軽なツールを使っている。

これで完了。

Windows98 のインストール

note の古い HD を pc に取り付ける。何かの役に立つと思って買っておいた 2.5/3.5
の変換ベイがこんな所で活躍するとは思っていなかった。
Plan9 は Windows98 のファイルシステムを認識してくれるが、Plan9 を利用してファイルを1つひとつコピーするのは賢明ではないようだ。

dos パーティションを丸ごとコピーするのが最も確実である。但しこの方法が使用できるためにはコピー元とコピー先では同一容量のパーティションが必要になる。

Plan9 の disk/fdisk はパーティションをシリンダ単位で作成するので(多分多くのOSはそのように行うであろう)、Plan9 で note 側に新たに DOS パーティションを作成する時には同一容量にする必要がある。この事はシリンダの容量が2つの HD で同じであれば実現できるが、異なる場合にはパーティションをもっと柔軟に切れるツールが必要になろう。(幸いにして、筆者の場合にはシリンダ容量は両者で同じであった。)

パーティションのコピー

pc 側から
/bin/service/il1008 を次の様に編集する
	#/bin/rc
	mount /srv/dos /n/d: /dev/sdC1
	bind -a '#S' /dev
	exportfs -r /
/dev/sdC1/data と /dev/sdC1/dos をユーザ none が読み取れるようにする
	chmod 644 /dev/sdC1/data
	chmod 644 /dev/sdC1/dos

note 側から
	9fs pc
	c:
	cp /n/pc/dev/sdC1/dos /dev/sdC0/dos
数時間かかる

日本語キーボードの設定

Fco.J.Ballesteros (nemo@plan9.escet.urjc.es) のお弟子さんの作成した多国語対応ドライバと筆者の日本語キーボードのデータが
http://plan9.escet.urjc.es/export/kbd.tgz
あるいは
http://plan9.aichi-u.ac.jp/netlib/kbmap/
に置かれている。

OS 選択メニュー

	boot manager
	MBM R0.37b
	by Takeshi Akamatsu
	http://elm-chan.org/
このブートマネジャーは強力で筆者は気に入っている。
もっとも強力すぎるので、一旦セットアップが完了したらロックできるようにして欲しい。(でないと他人に使用させられない。)

PS2 マウスの調子が悪い

ハードウェアトラブルかも
PS2 マウスとスマートポインタが同時に接続している事が問題を引き起こしているらしい。
BIOS の設定でスマートポインタを無効にして解決

残された問題

以下は単に筆者のメモである。あしからず。

usb マウスが使えない

Booting message
usbuhci: failed to map registers
	Intel 82371 AB/EB PCI to USB Universal host Controller
	irq=10 I/O=FF60-FF7F
	Ref: Windows98
	注意: FF60-FF7F はI/Oで使用するメモリのアドレスのはず
	CF-C33 のルート HUB は1個

参考: 正常に USB マウスが使用できる pc

	term% cat /dev/pci/*ctl
	06.00.00 1106/0691   0
	06.04.00 1106/8598   0
	02.00.00 8086/1229  11 0:f9000000 4096 1:0000a401 64 2:f8800000 1048576
	01.00.00 10cd/1300  10 0:0000a001 256 1:f8000000 256
	06.01.00 1106/0686   0
	01.01.8a 1106/0571   0 4:0000b801 16
	0c.03.00 1106/3038  11 4:0000b401 32
	0c.03.00 1106/3038  11 4:0000b001 32
	06.00.00 1106/3057   0
	04.01.00 13f6/0111  11 0:0000a801 256
	03.00.00 1002/4742   5 0:fa000000 16777216 1:0000d801 256 2:f9800000 4096
このうち、
	0c.03.00 1106/3038  11 4:0000b401 32
	0c.03.00 1106/3038  11 4:0000b001 32
が USB interface controller の情報を表している。
	0c.03.00	# USB interface controller
	1106/3038	# vender ID 及び 製品の型番
	11			# irq
	4			# base address register ID
	0000b401	# その値
	32			# I/O で使用されるメモリのサイズ(10進数)
	注: 8086 のメモリ管理は 16B 単位(メモリセグメント) なので
	0000b401セグメントを基にした 32B であれば
	0000b401セグメントと0000b400セグメントを意味している。
	(スタックと同様に小さなアドレスの方向にメモリを確保するらしい。)
	即ち、0000b4000 から 0000b401f の範囲である。
この Win98 で調べると
	Properties of VIA Tech 3038 PCI to USB Universal Host Controller
	Resource
	0:
		irq: 11
		I/O range: B000 - B01F
	1:
		irq: 11
		I/O range: B400 - B41F
となっている。

反省

	note の HD を pc で作成したほうが良かった。
	pc で plan9 が動いていれば、この作業は非常に楽である。また速い。
	(その場合には2.5/3.5 の変換ベイが2個必要)
	もっともネットワークを利用したインストールを心得ていれば安心できる。
	(なにしろノートパソコンの分解が不要だから。)

メモ

'#m' mouse
	Ref: mouse(3)
'#U' usb device
	Ref: usb(3)
'#$' pnp and pci device
	Ref: pnp(3)
'#y' pcmcia device
	Ref: i82365(3)
	Ref: pcmcia(8)

実験

条件

note: kernel=9pcdisk, sys=note, user=arisawa, ip=dynamic
pc: kernel=9pcdisk, sys=pc, user=arisawa, ip=static
pc では
	aux/listen -d /rc/bin/services tcp
	aux/listen -d /rc/bin/services il
を実行。
pc の /lib/ndb/local には note が登録されていない。

問1

note から
	import pc / /n/pc
を実行できるか?

答: YES
pc で

	auth/factotum -g 'dom=aichi-u.ac.jp proto=p9sk1 user=arisawa !password=XXX'
note で
	auth/factotum -g 'dom=aichi-u.ac.jp proto=p9sk1 user=arisawa !password=XXX'
即ち共通のキーを登録して置けばよい。
note で事前に登録されていない場合には import の実行時に登録される。

protocol

	server: exportfs (il17007, tcp=17007)

問2

note から
	cpu -h pc
を実行できるか?

	cpu -oh pc
	authproto=p9sk2
	used protocol
	server: cpu (il17013, tcp17013)

	cpu -h pc
	authproto=p9any
	used proto
	server: ncpu (il17010, tcp17010)

問3

note から user=arisawa で
	9fs pc
を実行できるか?

答: NO

	protocol
	server: 9fs (il17008, tcp564)

	term% 9fs pc
	post...
	srv net!pc!9fs: mount failed: authentication failed
	term%
kfscmd listen
で認証されるには NVRAM が必要
see: kfscmd(8)