3. S3 Savage/MX & Realtek RTL8139 (カーネル再構築)

再会はいつも感動

さて,くだんの Linux の総本山のところからたどれる先に, X の設定ファイル( XF86Config )のコレクションがある.いろんな人がノートを含むいろんな PC で X を動かして,その設定ファイルを集めて公開しているありがた〜〜いサイトである.自分の PC がこの中に入っていれば,内容なんか全然わからなくても当該 XF86Config をそっくり置き換えてしまえば OK なんである.

そして,わたしが半年近く放り出していた間,全く同じ機種のエンデバーくんでちゃんと X を動かした人がいたのである.感激・・・

というわけで, Linux のインストールに再度チャレンジすることになった. X の設定までのやることは前と同じだ.あー消すんじゃなかった.

やっぱり同じように TCP/IP の設定のところでエラーが出ているけど,やっぱり無視.

今度は起動時の音がうるさい System Commander Lite は使わず,そのかわりに Linux についている LILO っていうのをマスターブートレコードに直接インストールした.こうすると, System Commander Lite を使わなくても,起動するときにコマンドを入れて, Linux を立ち上げるか Windows を立ち上げるかを選ぶことができる.

続いて X の設定に進む. S3 Savage/MX の場合, XF86Config の書き換えだけでは駄目で, S3 のサイトからファイルをダウンロードしてこないといけないようだ.ダウンロードしてくるのはいいんだけど・・・ネットワークカードが認識されてないからいちいち Linux 終わらせて Windows 起動して,

ftp://ftp.s3.com/pub/s3/desktop/395/395_xf86_1011.tar.gz

をダウンロードしてきて,再度 Linux を立ち上げて, Windows のパーティションから Linux パーティションにダウンロードファイルをコピーしてきて・・・あーめんどくさい.ともかくファイルを展開して,書いてあるとおりのことをやってみる.意味はよく分かんないけどね.

# ./install.sh
# mkfontdir /usr/X11R6/lib/X11/fonts/TrueType/
# startx

・・・駄目じゃん.設定やり直さないと駄目なのかな.

# XF86Setup

やっぱり駄目.う〜〜ん.じゃあ TurboLinux 用の X 設定ツールを使ってみよう.

# turboxcfg

TurboXCfg は, XF86Setup に比べると格段に設定項目が少ないから,ますます駄目なんじゃないかな.と思ったら・・・設定のテストをしたら,ちゃんと出るじゃないですか.サイズがちょっと変だけど・・・

何も出ない,とか,画面の一部が妙に拡大されている,とかに比べたら上出来.格段の進歩である.設定を保存して終了して.

# startx

起動した.

喜びより,これでいいんだろうか・・・という一抹の不安が胸をよぎる.まあ動いてるんだからいいとしよう.

・・・教訓.いろいろ思いつく限りの手を適当に試していたら,できる場合もある.

設定がうまくいったことにすっかり気をよくし, X を終わらせて・・・

うわっ!

何これ?

X を終わらせたのだから,コンソール画面が出るはずなのに.妙な色の縦縞のパターンが画面いっぱいに出ているのだ.太さも色もまちまちだが,あまり美しくない.これはもしかしてフリーズ? Linux でもフリーズってあるの?

キーボードを押してみても何も表示されないけど・・・本当に何も表示されていないのか,それとも表示はされているのに妙な色パターンのせいで見えないだけなのか,わからない.わからないから,何かを入力してみよう.

# reboot

あ,ハードディスクのアクセスが始まって・・・再起動した.よかった〜〜〜(と言っていいのだろうか? でも対処方法がわからないのでとりあえずはこのまま).

よーするにカーネル再構築ね.

残る問題は,ネットワークカードの認識である.半年前, JF の説明「バージョン 2.2 のカーネルでこのドライバを使うには,実験的なドライバを使うかどうかを聞かれたときに 'Y' と答える・・・」の意味がわからなくてほーりだしたやつだ.

いま JF を読み返してみると,ありがたいことに,半年前ほど意味不明ではない.一応経験値は少しずつでもたまってはいるのかしら.レベルアップまではいくつの経験値をためればいいのだろう・・・.

ともかく,ここでやらなければいけないことはカーネル再構築だ.このネットワークカードに対応するドライバはデフォルトのカーネルでは入っていないので,再構築するときに,「実験的なドライバを使用する」という設定にして, RTL8139 というドライバをカーネルかモジュールに組み込めということなのである.

で,カーネル再構築って,具体的にはなにをどうやればいいんだろう? なんかめちゃくちゃ難しそー.

http://www.a-yu.com/

に再構築のやり方を手取り足取り説明してくれているので,一から十まで,ありがたく利用させていただくことにする.

再構築するくらいならアップデートもやってしまおう.今のカーネルは 2.2.13 なのだが, 2.2.? の最新バージョンである 2.2.17 にすることにする. 2.4.? というのもあったが,これはテスト中らしい.

それにしても, 2.2 →いきなり 2.4 って,途中の 2.3 は? と思ったら, 2.3 ってテスト用のバージョンだそうだ.奇数がテスト用で,偶数が実際に使う用ってことらしい.でもそれなら,いま 2.4 がテストってどういうことなんだろう.

ともあれ,カーネルの圧縮ファイルを, /usr/src に持ってくる. .tar.gz と, .tar.bz2 と,圧縮形式が二つあるが, bz2 のほうがサイズが小さい.

# tar xvfz ファイル名 ・・・ .tar.gz の場合

# tar xvfy ファイル名 ・・・ .tar.bz2 の場合

で展開するらしいけど,意味は全然分からない.なんか魔法のオマジナイ,って感じだ.

現在のカーネル: 2.2.13

/usr/src にはもともと, linux-2.2.13-33 っていうディレクトリがあり,このディレクトリに対して linux っていうシンボリックリンクが張られている. 2.2.13 っていうのがいま入っている Linux カーネルのバージョンだ.

2.2.17 を解凍する前に,今の 2.2.13 の設定がどうなっているのか見ておこう.インストールメニューのまま適当に入れたので,何がどうなっているのかさっぱりわかっていない.

# make xconfig

うわ.メニューがいっぱい.しかも全部英語で,さっぱりわかんないんですけど.ヘルプボタンは懇切丁寧に全部の項目に付いているけど,この中身も当然英語.

困ったときには,やっぱりネットにある情報をもらってこよう. JF でこのヘルプの翻訳もやってくれているのである.翻訳されたファイルを早速ダウンロード.カーネルごとにファイルが違うので,今のカーネルである 2.2.13 用と,これから解凍する 2.2.17 用のファイルの両方をもらうことにする.

ダウンロードした翻訳ファイルを, /usr/src/linux/Documentation/Confugure.help と置き換えればばっちり日本語化したヘルプが出てくるのだ.さっそく 2.2.13 のヘルプを置き換え,再び・・・

# make xconfig

ヘルプが日本語である.元の英文の下に,和訳をつけてくれている.なんか行数が多くて下の方が切れてるのもあるけど.

でも・・・日本語にしても,やっぱりわけ分かんないかも・・・いっぱいありすぎて読むのもいやんなるし.

分かんないものは分かんないままほっといて先に進めば,そのうちわかる日が来る!(希望的観測)

新しいカーネル: 2.2.17

2.2.17 を解凍する前に, 2.2.13 の方に張られている linux というシンボリックリンクはあらかじめ消しておく. 2.2.17 のカーネルを解凍すると,全く同じ名前の linux というディレクトリができるからだ.

解凍してできた新しいディレクトリを linux-2.2.17 とリネームして, linux-2.2.17 に対するシンボリックリンク linux を作ってみた.これで, /usr/src/linux は /usr/src/linux-2.2.17/ を指すことになる.

./linux/Documentation/Configure.help を,さっきダウンロードしてきたカーネル 2.2.17 用の翻訳済のものに置き換え,準備完了.

# make xconfig

2.2.13 と比べると,メニュー構成が若干変わっているようだ.また,ヘルプに縦のスクロールバーがついている.2.2.13 のときはヘルプが長くなると下の方が切れてしまっていたのだが, 2.2.17 ではスクロールバーのおかげでそういうことがなくなっている.

実験的なドライバ使用に y と答えて,ネットワークデバイスの中から,ネットワークカード RealTek のドライバである RTL8139 ってのに m を選択する.これはカーネルに組み込むんじゃなくてモジュールにするっていう意味だ.どっちでもいいらしい.

# make dep
# make clean

をしたあと,いよいよカーネルのコンパイル.

# make bzImage

# make bzlilo でもいいみたいなんだけど, bzlilo にすると元のカーネルを消しちゃうらしい.これは初心者としてはかなり不安で,ちゃんと立ち上がらなかったときのために,元のカーネルは残しておきたい.

カーネルのコンパイルが終わったら,次はモジュールだ.ネットワークカードのドライバはモジュールにしたから,これをやらないと全く再構築の意味がない.

# make modules
# make modules_install
# depend -a

カーネルは, /usr/src/linux/arch/i386/boot/ という,ディレクトリのめちゃくちゃ深いところにできていた. bzImage というのが 2.2.17 のできたてほやほやのカーネルだ.

できあがったカーネルを vmlinuz-2.2.17 っていう名前にリネームして, /boot/ に持ってくる.

忘れちゃいけない lilo.conf

/etc/lilo.conf は LILO の設定ファイルで,起動したときに立ち上げるカーネルを書いてある.例えば,ブート時に dos って入力すると Windows98 が起動するよとか,デフォルトでは Linux だよとか, Linux 起動には vmlinuz っていうファイル名のカーネルを使うんだよとか,そういうことが書いてある.

image=/boot/vmlinuz
    label=linux
    root=/dev/hda5
    read-only

いま, lilo.conf はこんな風に書かれている. linux って入力したら, image=/boot/vmlinuz っていうカーネルを使いなさい,ってことだ.

ちなみに, vmlinuz っていうのは,今まで使っていた 2.2.13 のカーネルだ.というより,正確に言うと, 2.2.13 のカーネルは vmlinuz-2.2.13-33 というファイルなのだが,これに対して vmlinuz というシンボリックリンクが張られている.

今構築した 2.2.17 のカーネルは, vmlinuz-2.2.17 という名前なので, vmlinuz-2.2.17 を使って立ち上がるように編集し直す.具体的には,下のようなのを付け加える.

image=/boot/vmlinuz-2.2.17
    label=new
    root=/dev/hda5
    read-only

これで, LILO boot : というのが表示されているときに new って入れると,新しいカーネルで起動するようになった.ここで忘れちゃいけないのが, LILO の実行.

# /sbin/lilo

lilo.conf で指定してあるファイルの内容に変更があった場合,必ず実行しなければならない.

さて,ちゃんとできてるかな・・・?

LILO boot : new

リブートして,新しいカーネルを指定したら,問題なく起動した.起動メッセージがだーっと流れていったけど読んでない.つーか速すぎて読めない.もしかしたらここでなんかエラーとか出てるかもしれないけど,無視!

ネットワークも,これでばっちりのはず!

ネットワークの設定

本来なら,

/etc/sysconfig/network とか,
/etc/sysconfig/network-scripts/ifcfg- とか,
/etc/resolv.conf とか,
/etc/HOSTNAMEとか/etc/hosts とか

をエディタで書き直さなきゃいけないらしいんだけど, TurboNetCfg という便利なツールがある.

# turbonetcfg

ループバックとやらを示す lo と,イーサネットを示す eth0 がちゃんと出ている.ホスト名とか,ドメインとか, IP アドレスなんかを設定.これでいいのかな?

# ping ・・・

ところが,帰ってきたものは.

Network is unreachable

・・・ありっ?

# ifconfig

表示されたものは,ループバックを示す lo のみ. eth0 はどこいった?

# ifconfig -a

ようやく eth0 が出てきた.カードはちゃんと認識してるらしい.でも何なんだろう,この HWaddr  FF:FF:FF:FF:FF:FF というみょーに怪しげな数は・・・

TurboNetCfg をもういちど立ち上げてみる.確かに,ネットワークインターフェースのところで,一応 eth0 も出ているんだけど・・・起動を示す[*]マークがついてないし,強制的に起動しようとしても,できない.

ネットワーク診断・・・駄目だこりゃー.

再び,困ったときの味方である JF へ GO !

またインターネットにつなぐためだけに Linux 終わらせて Windows 立ち上げて・・・めんどくさいったら!

だいぶ前に見つけておいた, RealTek のカードを使用するときの注意点のところに,詳しい情報はここへっていう URL がついていた.その先に

http://www.scyld.com/network/rtl8139.html

っていうサイトがあって,なんか詳しいことが書いている・・・らしい.英文でさっぱりわからないけど.なんか,ドライバを最新のものに更新する方法とかが書いてある・・・のかな? ドライバを最新にすれば,ちゃんとできるようになるのかな? とりあえず,やってみよっかな?

http://www.scyld.com/network/updates.html

に書いてあるとおり,

rtl8139.c
pci-scan.c
pci-scan.h
kern_compat.h

をダウンロードしてきて,ファイルの最後にある通りのコマンドで, Linux でコンパイルすればいいんだな.というわけで,再び Linux 起動.あーめんどくさー.

しかも,ダウンロードしたファイルは Windows 領域にあるから,マウントしてコピーしてこないといけないのである.

ん? アレ? できない・・・?

vfat が使えないって・・・?

あ〜〜〜〜!!! そーいえば,カーネル再構築するとき,そんな設定しなかった! 最初に Linux 入れたときにはインストーラーでさくさく(ともいえないけど)入ってしまったんで全然意識しなかったんだけど,再構築ではちゃんと選んでやらなければいけないんだ!

そして再び,カーネル再構築である.

やっと日本語訳したヘルプが真価を見せるときがきた!

ちなみに,前のバージョンの設定をそのまま次のバージョンに引き継ぐ方法とやらもあるらしいんだけど,せっかくバージョンアップするんだから自分でやってみたい,という気分もある(と,ドツボにはまっていく,・・・と).

インターネットの細切れのデータをなんとか解釈するのに限界を感じ始めていたので,今回はちゃんと本屋に出向いて「 Linux 設定×活用徹底ガイド」( Vine Linux 2.0 の FTP 版の CD-ROM つき)という書籍を買ってきて,設定することにした.インターネットは便利だけど,本には本のよさがある.

vfat のファイルシステム以外にも,プロセッサのタイプとか, CD-ROM のこととか,読んでいると結構設定することがあるみたいだ.よくわからないやつは,ヘルプを見ると「よくわからない場合は選ばないでください」とか書いてあるので,その通りにした.なんて親切なヘルプ!(つーか最初からちゃんとヘルプ読め,って感じだな)

カーネルとモジュールのコンパイルは前にやったとおりのはずだったのだけれど.

# depend -a

のところで問題が出た.エラーがずら〜〜〜っと並んだのである.

うーん,何がまずかったのかな〜〜〜.カーネルに組み込むんじゃなくて,手当たり次第にモジュールにしたこと? まあモジュールの設定の時点でエラーが出てるんだから,まずいのは当然モジュールだよね.

そこでわたしが選んだ手は,モジュールにしてたものを全部カーネルに組み込んでしまう,というきわめて安易な解決法だった.こんなんで解決するかどーかはわからんけど.

ただしネットワークカードだけは前にモジュールでやってちゃんと認識はされていたのでそのままモジュールにすることにした.モジュールとカーネルと何が違うのかいまいち理解してないのだけど・・・何となく気分だ.

まえのコンパイルでできたモジュールを削除してからカーネルとモジュールのコンパイル.カーネルをコンパイルするところで今度はわんさかエラーが出てくるかなと内心心配していたのだけれど,そんなこともなく,今度はうまくいった.

# reboot

あれ? ・・・再起動が,止まった?・・・

halt ?

何が起こったの? 何が悪かったの? やっぱりモジュールをカーネルにしちゃったこと?

やり忘れていたこと.

# /sbin/lilo をやっていなかったのである・・・

古い方のカーネルで立ち上げる(残しておいて良かった・・・).

# /sbin/lilo
# reboot

ふーなんとか成功.

さて,これから何をやるんだっけ・・・(すでに当初の目的を忘れている)

なんでカーネル再構築したかっていうと, Windows の領域にマウントできなかったからだ.なんで Windows の領域にマウントしたかったかというと,そこにインターネットでダウンロードした,ネットワークカードの最新ドライバファイルがあったからだ.

そーだそーだ,ドライバの更新するんだった! ダウンロードしたファイルのコンパイルだ. Windows 領域にマウントして,コピーしてきたファイルを書いてあったとおりにコンパイル・・・

をい.またエラーだよ・・・

エラーやワーニングが山ほど出てきておしまい.どうやったらいいのかわからない.駄目だわこりゃ.まあ新しいドライバを入れたからってちゃんと動くって保証があるわけじゃなし.別の手を考えよう.

またしてもあっさりあきらめる.あきらめがよいというより飽きっぽくてめんどくさがりなだけなんだけどね.反省・・・

起動メッセージには情報がいっぱい

とりあえず,起動メッセージを見てみることを思いつく.今までも考えないではなかったんだけど,どうやって見たらいいのかわからなかったのだ.でも Shift + ページアップのキーでコンソール画面がスクロールできることが判明したので,やってみる.(ちなみに dmesg を実行して起動メッセージを見ることもできる.というかこっちの方が正統なやり方だろう)

さてネットワークのところは,と.あ,これかな?

eth0:RealTek RTL8139 Fast Ethernet at 0xf800,IRQ 0,FF:FF:FF:FF:FF:FF
SIOCSIFFLAGS:Resource temporarily unavailable
SIOCADDRT:Network is unreachable

なんてのが出ている.

SIOCSIFFLAGS とか SIOCADDRT とかって,なんだろう?・・・という疑問はおいといて.やっぱ出てる. ifconfig で出したときと同じ, FF の行列.しかも IRQ が 0 って・・・何これ? Windows の方では,同じカードの IRQ は 9 になってるのに.

この FF: 〜〜もかなりヘンで, Windows98 から再起動して(電源を切らずに)立ち上げたときには FF 〜〜〜になるけどいったん電源をちゃんと切ると, 00:e0:18:18:0c:70 っていうなんとなく意味ありげな表示になる. IRQ はあいかわらず 0 のままだけどね.

# lsmod

うーん,ちゃんとモジュール入ってるよな〜〜〜とゆーか,起動メッセージでも一応ちゃんと RealTek RTL8139 ってなってるわけだし,認識はされているわけなんである.まさかカーネルに入れないと駄目とか? でもまた再構築するの面倒くさいし.時間もかかるし.再構築したからできるようになるって保証もないし.←さっきからこればっか!

さて, IRQ がおかしいときはどうすればいいのかな? また強い味方の JF に助けを求める.

えーと, LILO boot : のときに書き込む・・・? あ,これはカーネルに組み込んだ場合か.今回はモジュールだから,これとは違う.

モジュールのときは, /etc/conf.modules か /etc/modules.conf のどちらか(ディストリビューションによってファイル名が違うらしい・・・をいをい)を書き換えればいいみたいだ.・・・いやちょっと待てよ. ISA の場合のみ? PCI の場合はどーすんの?

なになに, PCI の場合は自動で認識してくれるから設定する必要がない・・・? 自動で認識してくれないからこそ,こんなに苦労してるんじゃないかっっっっっ!!!

PCI が自動で認識しない場合は, IRQ に対応するように差し替えてみろって? ノートの内蔵カードをどーやってさしかえろってのよ.しかも IRQ が 0 ってすでになんかに使われてるでしょーが.

IRQ の利用状況は,

# cat /proc/interrupts

で見られる. 0 は・・・ timer だよ.

ど〜〜すればいいのよ〜〜〜

最後に,ようやく使えそうな解決方法を発見した. BIOS Setup メニューで Plug & Play を実行しないように設定すればいいらしい.

またまた再起動.うちのエンデバーくんはセットアップメニューにはいるためには F2 を押す.前のメビウスくんもそうだった.だいたいそうなのかな?

・・・ないじゃん. Plug & Play に関する設定なんて.今度は,エンデバーくんのマニュアルを引っぱり出し, BIOS Setup に関するところを探す.どれだ?

これか? Installed O/S というやつだ.システムにインストールされている OS を選択します,と書いてあって,選択肢が三つ.

Plug & Play ってのをひとことでも書いてあるのはここだけだ.なので, Installed O/S を その他のOS に選択し直す.

やたっ!! IRQ が 9 になった!

・・・でもやっぱり HWaddr の FF 行列はそのままである.

しかも,起動メッセージには・・・

Starting sshd:eth0:RTL8139 Interrupt line blocked,status ffff
eth0:PCI Bus error 2900007
eth0:PCI Bus error 2900007

・・・同じメッセージが数十行・・・

eth0:Too much work at interrupt,IntrStatus=0xffdf

ってのが出て,ログインしたあとでも周期的に

eth0:RTL8139 ・・・

から

・・・IntrStatus=0xffdf

が延々表示され続けるのである.なんかコマンドラインで入力するどころじゃない.

いろいろ再起動して試してみた結果,例の HWaddr=FF: 〜〜が出たときにこれが出るらしいと言うことに気づいた.

HWaddr=FF: 〜〜は, Windows から電源を切らずに立ち上げなおしたときになぜか起こる事象だ.電源をいったん切ってから立ち上げたときの HWaddr=00:e0:18:18:0c:70 ならこんな変なメッセージは出ないのである.

しかたないなあ.電源切らないときの HWaddr は,よくわかんないけどそういう仕様だと思って(!)あきらめよう.いったん電源を切ってから起動する.

ping が通った!

あとはネットワークの設定をちゃんとしなおす.

ネットワークプリンタも設定.

# turboprintcfg

ディレクトリとか,プリンタサーバとか,設定して,テスト.

# lpr ...

ありっ? 動いてくれない・・・ lpq で見たら,ちゃんとエントリはされてるみたいなのに・・・あ.デーモン起動してないわ.

# lpd start

プリンタが動き出す〜〜〜 A4 一枚を吐き出した.わーい.・・・と思ったのもつかの間.日本語がきっちりと文字化けしてくれてました.

というわけで,まだまだ戦いはつづくのであります・・・

そーいやXを終わらせたときの妙な縦縞色パターンもまだ解決してないんだよね〜〜.サウンドもまだだし〜〜〜.

  3   

To HOME