IBM ThinkPad 600(2645-45J)に対する FreeBSD 2.2.8-RELEASE + PAO(19981225)のインストール

1999年4月
たちゃな@巫研

abstract

IBM ThinkPad 600(2645-45J)でFreeBSDを動作させる場合、 そのままでは正常にインストールできない (若干トリッキーな手法が必要になる)場合があります。 ここでは、私が試行錯誤の結果、 メモリを288MBに増設済みのIBM ThinkPad 600に対してFreeBSD 2.2.8-RELEASE + PAO(19981225)をインストールし、実用レベルまで持っていった経験を元に、 その手順と問題点・対処を簡単に解説してみたいと思います。


使用機材

本体 IBM ThinkPad 600(2645-45J)
MEMORY IODATA SDIM2100(SODIMM 128MB) x 2
HDD IBM DADA26480(6GB)
OS FreeBSD 2.2.8-RELEASE
PAO PAO(19981225)
PCCARD#1 IODATA PCLA/TE(10BASE-T)
PCCARD#2 NTT MOBILE DATA CARD 96P

ハードウェア設定編

シリアルポート部分の割込み設定

FreeBSDでシリアルポート(及びIrDA)を利用できるように するため、IBMのウェブ上にある 「IBM ThinkPad DOS用ユーティリティ」にてシリアルポートの 割り込み番号を設定します。

これは、Windows上で動作する同様のユーティリティで設定した場合、 上手くいきませんので注意が必要です。 必ずDOS用のもので設定する必要があります。

シリアルのIRQを適当な状態に変更するための設定コマンドは大体以下のとおり。

C:\> ps2 imodem disable

(リブート)

C:\> ps2 ir enable
C:\> ps2 ir address 2

(リブート)

C:\> ps2 sera enable
C:\> ps2 sera address 1

(リブート)

尚、変更後の内容は以下のようになります。

背面シリアルポート 4
パラレルポート 7
内蔵モデム 1st IRQ X(10)
内蔵モデム 2nd IRQ X(3)
WSS/FM/サウンドブラスター 5
MIDIポート 9
IR 3
2nd IDE(UltraBay) 15
2nd IDE(ドッキングステーション) X(15)
3rd IDE X(11)
PCIデバイス用 IRQ 11

その他給電の設定等にも注意しましょう。

以上で、sio0が裏面シリアルポート、sio1がIrとして利用可能になります。

Ref.
http://www.ibm.co.jp/pccsvc/thinkpad.html


インストール編

【メモリを増設している場合に発生する問題点】

本体のメモリがある程度(>64MB?)増設されている場合、 標準のboot-paoフロッピーからインストーラを起動しようとしても、 apm0のプルーブ時にフリーズしてしまい、正常にインストールできなくなります。

私の環境ではメモリを64MBから288MBに増設した際、 このトラブルに遭遇しました。 (なお、私はメモリを80MBに増設したIBM ThinkPad560E(2640-40J)も所有していますが、 こちらではトラブルありません。)

この問題を回避してインストーラを続行するためには、 ブート時に表示されるKernel Configuration Menuより 「Start kernel configuration in CLI mode」を選択し、

config> disable apm0
config> quit

と入力し、一時的にapmを使用しないようにします。

【PC-cardの設定】

PCカードコントローラが使用するI/Oアドレスには Default(0xd0000-d3fff)を使用します。 また、IRQの予約もDefaultのままで特に問題はないようです。

【パーティションの分けかた】

参考として、私のマシンのものを掲げておきます。

wd0s1 /win98 4097MB DOS
wd0s2a / 1513MB UFS Y
wd0s2b swap 583MB SWAP

HDDには「IBM DADA26480(6GB)」を使用しています。

なお、ファイルシステムをルートのみとしている理由には、 このUNIXシステムは 個人的に常時使用される(=私が常時管理する)性格のものであり、 かつパーソナルな用途にしか使わない、つまり万一問題が発生しても管理者・利用者が 私個人に限定されるため、何とでもできるという点(=責任が自己完結)と、 全体のHDD容量が数GBしかないため、ファイルシステムを細切れに分割するよりも、 結果として全体的なポテンシャルを犠牲にすることがない (最終的にスケーラビリティの面で優る) という判断からです。

【その他インストールするセットについて】

・ブートセレクタとしてEasyBootをインストール ・Kernel Development のセットをインストール ・des をインストール(歴史的経緯からの必要性による。必要なければ入れなくても良い。) ・ports は(私はあまり使わないので)インストールしない ・cmos clockはJSTに合わせる

以上のような設定でインストールを行なえば結構だと思います。

作業完了後、ふつうはリブートされるところですが、この段階のカーネルでは ThinkPad 600がフリーズしてしまいます。ウンともスンとも言わなくなったら、 (電源スイッチも効かなくなるので)電源スイッチ横のリセットボタンを先の尖った もので押してリセットし、再起動してください。

【PAOカーネルの再構築】

インストール直後の再起動においてはカーネルとしてGENERICカーネルが 動作するので、PCMCIAサポート等が欠落しています。よって、PAOカーネルを ビルドして載せ換える必要があります。(以下、話を簡単に進めるためにsysinstallを使った場合の手法を載せます。自力でpatchを当てる場合は適当に直して読んでください。)

まず、/stand/sysinstallを起動して、Configure->PC-cardを選択し、 カーネルを再構築してください。

また、この時点でAPMとPC-cardのサポートを入れましょう。 (問い合わせ画面が出てくるので、チェックを付けてください)

画面の指示に従い、PAOのシステムとPAOカーネルの再構築が完了したら、 システムを再起動することなしにsysinstallを終了して以下のコマンドを実行します。 (ここで、メモリ増設済みのThinkPad上で安定して動作する本当のカーネルを 構築します。)

# cd /sys/i386/conf
# cp PAO RAVEN
# ee RAVEN
/sys/i386/conf/RAVEN
ident RAVEN
options "MAXMEM=(288*1024-1024)"

※identを変更し、MAXMEM行を追加します。

塔載メモリのサイズによって、上記MAXMEM値を適宜変更してください。 例えば、オンボード32MB+増設128MBの場合には、「MAXMEM=(160*1024-1024)」になります。

本体に実装されているメモリ量を下回るサイズを指定してやることで、 システムが安定して動作するようになります。ここでは単純に、最後の1MB を利用しないように設定してあります。

Ref.
http://metalab.unc.edu/LDP/HOWTO/BootPrompt-HOWTO.html
(3.3 Boot Arguments Related to Memory Handling)

コンフィグファイルの編集が終われば、カーネルをビルド・インストールしましょう。

# config RAVEN
# cd ../../compile/RAVEN
# make depend; make; make install
# reboot

以上でThinkPad 600上で正常に動作する一応のカーネルが出来上がります。 PC-card無しの状態で、サスペンド・レジュームは正常に動作し、 また、DOS領域にハイバネーションファイルがあればハイバネーションも 正常に動作することを確認してください。

私の環境下では、何らかのPC-cardが刺さっていると常にサスペンドに失敗してしまいます。 失敗といっても致命的問題ではなく、画面はブラックアウトするのですが、 エラー音が鳴り、サスペンド状態にならないといったものです。 (Windows98では問題なくサスペンド状態に持っていけるのですけれど...) 尚、サスペンドに失敗した状態からは問題なく復帰することが可能です。 「レジューム時にセキュリティキーを要求する」ように設定しているなら、 その時点でロック機能も正常に働いてくれるようです。

Ref.
http://www.netpassport.or.jp/~wkaoyama/bsd/tp600.html
http://cuvier.center.osakafu-u.ac.jp/tp600-linux/


FreeBSD 2.2.8 インストール後の基本設定

sendmailの停止

3rd party relay 可能な状態で sendmail が動いているので、sendmailの プロセスを殺します。

# ps auxw|grep sendmail
# kill (pid_of_sendmail)

portmapの停止

RPC周りの機能は使わないので、portmapのプロセスを殺します。

# ps auxw|grep portmap
# kill (pid_of_portmap)

syslogdのセキュア化

syslogdがオープンになっているので、secure modeで動作させ直します。

# ps auxw|grep syslogd
# kill (pid_of_syslogd)
# syslogd -s

r-commandsの停止

r-commandsが有効になっているので、これを無効化します。

# ee /etc/inetd.conf
(telnetの行以外はコメントにする)
# ps auxw|grep inetd
# kill -HUP (pid_of_inetd)

syslogd、portmap、sendmailの各々ついて、次回起動時の設定をおこないます。

/etc/rc.conf
syslogd_flags="-s"
portmap_enable="NO"
sendmail_enable="NO" #Don't use sendmail, the most buggy system in the world. ;-)

NTPの設定

Internetに常時接続の環境下で、NTP(Network Time Protocol)を利用して時刻合わせをおこなう場合には、以下のような設定をおこないます。ダイヤルアップ接続のユーザは、この設定によりもたらされる結果について充分理解していない場合、設定してはいけません。

/etc/rc.conf
ntpdate_flags="ntp.nmt.ne.jp"
xntpd_enable="YES"
/etc/ntp.conf
server ntp.nmt.ne.jp
server ntp2.nmt.ne.jp
server ntp3.nmt.ne.jp

tmpの統合

管理しやすいよう、テンポラリディレクトリを統合します。

# ln -s /tmp /usr/tmp
# rm -rf /var/tmp; ln -s /tmp /var/tmp

初期ユーザの登録

普段利用するためのユーザを登録します。

/etc/group
wheel:*:0:root,yama
users:*:1000:
# vipw
yama:*:1000:1000::0:0:Yamamoto:/home/yama:/bin/sh

パスワードを設定します。

# passwd yama

ホームディレクトリを作成します。

# mkdir /home
# mkdir ~yama; chown yama.users ~yama
# exit

以上で完了です。アカウントyamaでログインし、「su root」等が正常に動くことを確認しましょう。

次に、ユーザの環境設定をおこないます。

$ cp /root/.login ~
$ cp /root/.profile ~

環境変数HOMEの内容を適当なものに変更します。

~/.profile
HOME=/home/yama

ログインしなおして、環境変数などが正常に設定されていることを確認しましょう。

利用の形態によっては、リミッタを調整する必要があります。 このWSは個人で酷使する性格のものであるので、 最大まで拡張し、ハードウェアの限界まで利用できるようにします。

まず、ログインクラスrootのリミッタを引きあげます。

/etc/login.conf
root:
:coredumpsize=0:\(coreなんて邪魔な場合/旧:infinity)
:memoryuse=infinity:\(旧:32M)
:maxproc-cur=infinity:\(旧:64)
:openfiles-cur=infinity:\(旧:1024)

そして、リミッタの限定解除が必要なユーザのログインクラスをrootに設定しましょう。レコードの位置は5番目です。

# vipw
yama:*:1000:1000:root:0:0:Yamamoto:/home/yama:/bin/sh

カーネルのオプティマイズ

性能を充分発揮するためには、カーネルのオプティマイズが必要になります。 各値の最適値は一般に殆ど経験則的に求められることとなるでしょう。 私の場合は、以下のようなコンフィギュレーションにしています。

sys/i386/conf/RAVEN
machine "i386"
cpu "I686_CPU"
ident RAVEN
maxusers 256
options NMBCLUSTERS=4096
options CHILD_MAX=256
options OPEN_MAX=256
options "MAXDSIZ=(256*1024*1024)"
options "DFLDSIZ=(256*1024*1024)"
options "MAXMEM=(288*1024-1024)"
options SHMMAXPGS=4096
options INET #InterNETworking
options FFS #Berkeley Fast Filesystem
options NFS #Network Filesystem
options MFS #Memory Filesystem
options MSDOSFS #MSDOS Filesystem
options "CD9660" #ISO 9660 Filesystem
options PROCFS #Process filesystem
options "COMPAT_43" #Compatible with BSD 4.3 [KEEP THIS!]
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
options BOUNCE_BUFFERS #include support for DMA bounce buffers
options UCONSOLE #Allow users to grab the console
options FAILSAFE #Be conservative
options USERCONFIG #boot -c editor
options VISUAL_USERCONFIG #visual boot -c editor
options APM_PCCARD_RESUME
options PCIC_RESUME_RESET
options SCSI_DETACH
options ATAPI_DETACH
options "APM_NO_CLOCK_ADJUST"
options "APM_TP_WIN98BIOS"
config kernel root on wd0
controller isa0
controller pci0
pseudo-device card 1
device pcic0 at isa? port 0x3e0 irq 11 vector pcicintr
device pcic0 at isa? port 0x3e4 irq 11 vector pcicintr
device pcic1 at isa? port 0x3e2 # for HiNote Ultra II
device pcic1 at isa? port 0x3e4 # for Chandra II
controller fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
disk fd0 at fdc0 drive 0
controller fdc1 at isa? disable port "IO_YEFDC" bio irq 6 vector fdintr
disk fd1 at fdc1 drive 0
options FDC_YE
options "CMD640" # work around CMD640 chip deficiency
controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr
disk wd0 at wdc0 drive 0
controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr
disk wd1 at wdc1 drive 0
controller wdc2 at isa? disable port "IO_WD2" bio irq 15 vector wdintr
disk wd2 at wdc2 drive 0
controller wdc3 at isa? disable port "IO_WD2" bio irq 15 vector wdintr
disk wd3 at wdc3 drive 0
options ATAPI #Enable ATAPI support for IDE bus
options ATAPI_STATIC #Don't do it as an LKM
device wcd0 #IDE CD-ROM
device wfd0 #IDE floppy (LS-120)
controller aic0 at isa? port 0x340 bio irq 11 vector aicintr
controller nin0 at isa? port 0x280 bio irq 5 vector ninintr
controller spc0 at isa? port 0x320 bio irq 11 iomem 0xd0000 flags 0x01 vector spcintr
options SCSI_LOW # XXX: for ncv? and stg? driver
controller ncv0 at isa? port 0x320 bio irq 5 vector ncvintr
controller stg0 at isa? port 0x320 bio irq 5 vector stgintr
controller scbus0
device sd0
device od0 #See LINT for possible `od' options.
device st0
device cd0 #Only need one of these, the code dynamically grows
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
options PCVT_SCANSET=2 # IBM keyboards are non-std
device npx0 at isa? port "IO_NPX" flags 0x1 irq 13 vector npxintr
device apm0 at isa? # Advanced Power Management
options APM_BROKEN_STATCLOCK # Workaround some buggy APM BIOS
device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr
device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr
device sio2 at isa? disable port "IO_COM3" tty irq 5 vector siointr
device sio3 at isa? disable port "IO_COM4" tty irq 9 vector siointr
device sio4 at isa? disable port "IO_COM3" tty irq 5 vector siointr
device lpt0 at isa? port? tty irq 7 vector lptintr
device lpt1 at isa? port? tty
device psm0 at isa? port "IO_KBD" conflicts tty irq 12 vector psmintr
device ed0 at isa? port 0x280 net irq 10 iomem 0xd8000 vector edintr
device ed1 at isa? disable port 0x300 net irq 10 iomem 0xd8000 vector edintr
device ep0 at isa? port 0x300 net irq 10 vector epintr
device ep1 at isa? disable port 0x300 net irq 10 vector epintr
device fe0 at isa? port 0x300 net irq 10 vector feintr
device fe1 at isa? disable port 0x300 net irq 10 vector feintr
device sn0 at isa? port 0x300 net irq 10 vector snintr
device sn1 at isa? disable port 0x300 net irq 10 vector snintr
device pcm0 at isa? port 0x52c tty irq 5 drq 1 flags 0x10 vector pcmintr
device joy0 at isa? port "IO_GAME"
pseudo-device loop
pseudo-device ether
pseudo-device log
pseudo-device sl 1
pseudo-device bpfilter 4
pseudo-device vn 1
pseudo-device tun 1
pseudo-device pty 16
pseudo-device gzip # Exec gzipped a.out's
options DDB
options SYSVSHM
options SYSVSEM
options SYSVMSG

サウンドドライバの設定

pcmドライバにおいて、CS4237をWSSモードで利用するためには 以下のような設定でOKです。(前節の内容に含まれています)

sys/i386/conf/RAVEN
device pcm0 at isa? port 0x52c tty irq 5 drq 1 flags 0x10 vector pcmintr

新しいカーネルで再起動後、デバイスファイルの作成をおこないましょう。

# cd /dev
# ./MAKEDEV snd0

尚、サウンドデバイスの状態に関しては、以下のようにして確かめることができます。

$ cat /dev/sndstat

XFree86の設定

XFree86 3.3.3.1は以下のような設定で問題無く動作します。

/etc/XF86Config
# XF86Config for ThinkPad600

Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/misc/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/ttf/"
EndSection

Section "Keyboard"
Protocol "Standard"
XkbRules "xfree86"
XkbModel "jp106"
XkbLayout "jp"
EndSection

Section "Pointer"
Protocol "SysMouse"
Device "/dev/psm0"
Resolution 100
Buttons 3
EndSection

Section "Monitor"
Identifier "LCD"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 31.5-48.5
VertRefresh 50-100
Modeline "800x600" 40 800 856 1040 1056 600 600 626 628 +hsync +vsync
Modeline "800x600" 50 800 856 976 1040 600 637 643 666 +hsync +vsync
Modeline "1024x768" 65 1024 1032 1176 1344 768 771 777 806 -hsync -vsync
EndSection

Section "Device"
Identifier "NeoMagic"
SpeedUp "none"
VideoRam 2048
Clocks 25.2 28.3 40.0 65.0
EndSection

Section "Screen"
Driver "svga"
Device "NeoMagic"
Monitor "LCD"
DefaultColorDepth 16

Subsection "Display"
Depth 8
Modes "1024x768"
ViewPort 0 0
# Virtual 1024 768
EndSubsection

Subsection "Display"
Depth 16
Modes "1024x768"
ViewPort 0 0
# Virtual 1024 768
EndSubsection
EndSection

まとめ

機能 FreeBSD下での状況
CDROM 正常動作を確認。
FDD 正常動作を確認。(2-mode)
SERIAL 正常動作を確認。
IrDA 未確認。(たぶん正常動作する)
PARALLEL プリンタへ正常に出力できることを確認。
Ext.Keyboard 未確認。(たぶん正常動作する)
Ext.Mouse 未確認。(たぶん正常動作する)
Ext.Bus 未確認。(たぶん正常動作する)
USB 未対応の筈。
PCMCIA 手持ちのカードで正常動作を確認。
CardBus 未対応の筈。
ZV Port 未対応の筈。
PCM Luigi's Sound Driver(SB Pro/WSS)およびOpen Sound System(WSS)での動作を確認。
MIC/LINE IN OSSでの正常動作を確認。しかし何故かLuigi's Sound Driver(WSS)では動作しない??
Int.MODEM 動作しない。(MWave)
APM 正常動作を確認。(但し、何らかのPCCARDが刺さっているとサスペンド・ハイバネーションしないようだ)
VIDEO XGA,16bppの環境でXFree86 3.3.3.1が動く。
TrackPoint 正常動作を確認。ミドルボタンも動作する。


return