「これまでのあらすじ。」(ThinkPad X20編〜NetBSDとなかよくしよう)

by miwa@naucon.org(じょばんに/みわやすたか)
Last Update: $Date: 2001/11/25 13:52:21 $ GMT

[ThinkPad X20編に戻る]
[最新の日記へ]
ThinkPad X20 with NetBSD

DHU2ではずっとFreeBSDを使って いたのですが、お仕事の開発環境がNetBSD に移ってしまったことと、1.5がリリースされた ということもあって、生活環境もNetBSDに乗り換えてみることにしました。

ちなみにここに載っているのはあくまで記録なので、 動作を保証するものではありません。At your own riskでお願いします。 ただ誰もが通る道なので、情報の共有とこの元になる情報を公開してくれた すべてのひとに感謝の意味を込めて公開しています。 もしあなたがさらなる有用な情報を得た場合は、 世の中の幸せのために積極的に公開しましょう :-)


TOPICS


partitionについて

まずはマルチブートをするために、partitionの切り直しをします。 「Partition Magic」のようなパーティション切り直しツールがないので、 パーティションを切って新たにインストールしてみることにしました。 最初は素直に、

  1. Win98をDOSモードで再起動。
  2. fdiskを起動。
  3. 現在の基本DOS領域を削除して、例えば6GBで基本DOS領域を確保しなおす(残り4GBは未使用のまま)。
  4. リカバリCDを使ってWin98をインストール。
とやってみましたが、なぜか10GBまるまるWin98が占領してしまいます。 どうやらリカバリCDでインストールの際にpartitionを切り直しているようです。 これをやられるとマルチブートができません。

ひとまずリカバリCDの中身をあさってみました。するとインストールの スクリプトらしきものがありました。読み解いてみると、どうやらpartition 1を 削除して新たにpartitionを確保した上でインストールするような記述になっています。 ということはpartition2以降はいじらないはずなので、 以下の手順で試してみました。

  1. Win98をDOSモードで再起動。
  2. fdiskを起動。
  3. 現在の基本DOS領域を削除して、例えば6GBで基本DOS領域を確保しなおす。
  4. 残り4GBを拡張DOS領域として確保(これはダミー)。
  5. リカバリCDを使ってWin98をインストール。
これでパーティションが2つの状態(CとDドライブが存在)でWin98を復活させる ことができました。 あとは後ろの拡張DOS領域を削除して、そこにNetBSDをインストールします。


BIOSの設定について

特にこれといってデフォルトと変わった設定はしていません。 ただし、ハイバネーション関係はすべて切りました(サスペンドのみ)。


インストールについて

ウルトラベースX2のフロッピーディスクドライブでブート。 ビルトインのEtnernetはfxp0として認識されますので、 問題なくネットワークインストール可能です。


kernel configについて

sys/arch/i386/conf/GENERIC_LAPTOPをベースに

options   PCMCIAVERBOSE
options   XSERVER
options   RTC_OFFSET=-540
あたりを変更。RTC_OFFSET=-540というのは、Win98がPCの時計を localtime(JST)と信じて疑わないので、NetBSDではGMTとのオフセットを 設定してあげる必要があるためです。
PCカードサポートについてはこちら。 →PCカードサポートについて
サウンドについてはこちら。 →サウンドについて


PCカードサポートについて

X20ではRicohの5C476というPCI-CardBusブリッジのチップが載っていて、 NetBSD的にもcbb?で認識してくれるのですが、僕が試した範囲ではinterrupt が拾えなくてどうもうまく動いてくれません。なので、とりあえずCardBusは あきらめて(カードも持ってないし...)ISAバスからIntel 82365SL互換として 見せるようにしています。

# PCIBIOS関係はすべてコメントアウト
#options        PCIBIOS                 # PCI BIOS support
#options        PCIBIOSVERBOSE          # PCI BIOS verbose info
#options        PCIBIOS_ADDR_FIXUP      # fixup PCI I/O addresses
#options        PCIBIOS_BUS_FIXUP       # fixup PCI bus numbering
#options        PCIBIOS_INTR_FIXUP      # fixup PCI interrupt routing
#options        PCIBIOS_IRQS_HINT=0x0a00 # PCI interrupts hint. IRQ 9 or 11
#options        PCIBIOS_INTR_GUESS      # see pcibios(4)
#options        PCIINTR_DEBUG           # super-verbose PCI interrupt fixup
            .
            .
            .

# CardBus関係もすべてコメントアウト
# CardBus bridge support
#cbb*           at pci? dev ? function ?
#cardslot*      at cbb? 

# CardBus bus support
#cardbus*       at cardslot?
#pcmcia*        at cardslot?
            .
            .
            .

# 必要なのはこれだけ(flags=1にしてpolling modeにする)
# ISA PCMCIA controllers
pcic0   at isa? port 0x3e0 iomem 0xd0000 iosiz 0x10000 flags 1

ちなみにブートメッセージではこんな感じで表示されます。

pcic0 at isa0 port 0x3e0-0x3e1 iomem 0xd0000-0xdffff
pcic0: controller 0 (Intel 82365SL Revision 1) has sockets A and B
pcic0: controller 1 (Intel 82365SL Revision 1) has no sockets
pcmcia0 at pcic0 controller 0 socket 0
pcmcia1 at pcic0 controller 0 socket 1
            .
            .
            .

pcic0: controller 0 detecting irqs with mask 0xdeb8:..3..5..9..10..15
pcic0: polling for socket events

もっとまともなやり方があったら教えてください :-)


サウンドについて

X20ではCirrus LogicのCS4281というチップが載っています。 素の1.5ではドライバがありませんが、currentには先日マージされた模様です。

ドライバを書かれた上記おおがいとさんのページをたどれば、ソースおよび コンパイル方法が載っています。ソースはcurrent用なので、素の1.5では 一部変更が必要です(このときに素の1.5のdev/pci/cs4280.cが必要になるので 上書きしないで取っておくこと)。具体的方法は READMEに書かれています。これで問題なく動くようになりました。

clct0 at pci0 dev 11 function 0: Cirrus Logic CS4281 CrystalClear Audio Interface (rev. 0x01)
clct0: interrupting at irq 11
clct0: CRY20 codec; headphone, 20 bit DAC, 18 bit ADC, Spatializer 3D
audio0 at clct0: full duplex, independent

Xについて

X20のグラフィックチップはATI Rage Mobility(AGP)です。 参考文献を見てもらえればわかりますが、素の3.3.6のSVGAサーバよりも patchをあててMACH64サーバで動かした方が快適なようです。

1.5-RELEASEのxsrc.tgzを展開して、XFree86-3.3.6-ragemobility.patchをあててmake。入れ換えるのは/usr/X11R6/bin/XF86_Mach64のみでよいでしょう。そして/usr/X11R6/bin/Xのシンボリックリンクを張ればOK。XF86Configはふゆひこ氏のページにあったXF86ConfigをNetBSD用にしたものを使っています。


DOS領域のマウントについて

DOS領域をNetBSDからマウントするためには、disklabelの設定をする必要が あります。まずDOS領域情報をfdiskで見ます。たとえばこんな感じです。

# fdisk
NetBSD disklabel disk geometry:
cylinders: 16383 heads: 15 sectors/track: 63 (945 sectors/cylinder)

BIOS disk geometry:
cylinders: 1022 heads: 240 sectors/track: 63 (15120 sectors/cylinder)

Partition table:
0: sysid 11 (Primary DOS with 32 bit FAT)
    start 63, size 12292497 (6002 MB), flag 0x80
        beg: cylinder    0, head   1, sector  1
        end: cylinder  812, head 239, sector 63
1: sysid 169 (NetBSD)
    start 12292560, size 7348320 (3588 MB), flag 0x0
        beg: cylinder  813, head   0, sector  1
        end: cylinder 1021, head 239, sector 63
2: 
3: 
必要なのは赤い部分です。これでDOS領域の開始シリンダとサイズが 得られます。次にこの情報を元にdisklabelに書き込みます。
# disklabel -e wd0
# /dev/rwd0d:
type: unknown
disk: cocone
label: 
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 15
sectors/cylinder: 945
cylinders: 16383
total sectors: 19640880
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0 

8 partitions:
#        size   offset     fstype   [fsize bsize   cpg]
  a:   305235 12292560     4.2BSD     1024  8192    16   # (Cyl. 13008  - 13330)
  b:   526365 12597795       swap                        # (Cyl. 13331  - 13887)
  c:  7348320 12292560     unused        0     0         # (Cyl. 13008  - 20783)
  d: 19640880        0     unused        0     0         # (Cyl.    0  - 20783)
  e:  6516720 13124160     4.2BSD     1024  8192    16   # (Cyl. 13888  - 20783)
  f: 12292497       63      MSDOS
空きレター(この場合はf)を使ってエントリを書き込みます。 あとは/etc/fstabに
/dev/wd0a / ffs rw 1 1
/dev/wd0b none swap sw 0 0
/dev/wd0e /usr ffs rw 1 2
/dev/wd0f /dos msdos rw
/kern /kern kernfs rw
デバイス名(/dev/wd0fなど)とマウントポイント(/dosなど)を登録すればOKです。


Netscapeについて

NetBSD上でのNetscapeについては、以下の

がわかりやすいです。手順としては、
  1. pkgsrc/www/navigatorからmake;make install。
  2. pkgsrc/emulator/linux-localeからmake;make install。
  3. 「Netscape Communicator for UNIX 日本語化」から、 対応するNetscapeバージョンの日本語リソースキットを持ってくる。
  4. 中に含まれるNetscape.ad-ja_eucのフォントの定義を置き換える。 (参考:installスクリプトの中 のsedのコマンドだけを抜き出したもの)。
  5. 上記で生成したNescapeを/usr/X11R6/lib/X11/app-defaultsなどに置く。
  6. /usr/pkg/bin/navigatorのスクリプト中に
    LANG=ja ; export LANG
    の記述を追加する。
という感じで日本語表示ができるようになるはずです。

ただし、これだけだとフォントがいまいちうれしくないので、FreeBSDの packagesを引っぱってきてフォントのインストールします。持ってくる FreeBSDのpackagesは以下の通りです。

まずフォント群を展開して、/usr/X11R6/lib/X11/fonts/local以下にフォント ファイルをコピーします。
# cd /somewhere
# tar zxf *.tgz
# cd lib/X11/fonts/local/
# cp * /usr/X11R6/lib/X11/fonts/local
すべてコピーし終えたら/usr/X11R6/lib/X11/fonts/local でmkfontdirします。
# cd /usr/X11R6/lib/X11/fonts/local
# mkfontdir

次にja-netscape-fonts.tgzに含まれるinstallファイルにあるfonts.aliasの定義を /usr/X11R6/lib/X11/fonts/local/fonts.aliasとしてコピーします。 これでNetscapeの設定メニューからフォントが選べるようになります。 文字コードセットが日本語の項目について、それぞれ「Fixed(Netscape)」を 選べばOKです。