Debian on IBM ThinkPad365X
第4章:カーネルの再構築

第4版 1998.02.24 更新


 前回、dselectによるパッケージのインストールを行ったので一通りのパッケージがインストールされた事になる。しかし、それはパッケージがインストールされただけで使えるようになったとは言い難い。それに、このTP365Xはノートマシンなので、省電力機能もあるのだが、まだapmも正しく動かないのだ。apmと叩くと "No APM support in kernel"というメッセージが出てきてしまう。どうやら、現在のカーネルはAPMをサポートしていないようなのだ。

 という事で、まずはカーネルを再構築する必要があるみたいだ。ちょうど、前回のdselectでカーネルソースも一緒にインストールしたので、ソースは /usr/src/ の下に入っている筈です。

l iloのセット

 とりあえず、今回作成するカーネルが万が一起動しなかった場合の事を考えて、古いカーネルでも起動できるようにliloの設定を行います。

 まず、古いカーネル(/vmlinuz)をコピーしておきます。

# cd /
# cp vmlinuz vmlinuz.2.0.29

 そして、/etc/lilo.confを編集します。今回はこの様にしました。ついでにDOSも立ち上がるようにしました。

boot=/dev/hda2
root=/dev/hda2
compact
install=/boot/boot.b
map=/boot/map
vga=normal
delay=20
image=/vmlinuz
  label=Linux
  read-only
image=/vmlinuz.2.0.29
  label=Linux2029
  read-only
other=/dev/hda1
  label=Dos

そして、編集が終わったらliloと叩いて登録しておきます。すると、

Added Linux *
Added Linux2029
Added Dos

というメッセージが出て3つのブートが出来るようになります。

カーネルの変更

 さて、下準備も済んだ事なので、カーネルの変更を行う事にしましょう。

 cdコマンドで /usr/src/linux に移り"make menuconfig"と叩くとメニューコンフィグプログラムをコンパイルしたあと、Configurationプログラムが走り始めます。

> cd /usr/src/linux
> make menuconfig

 今回のお目当てのAPMはCharacter devicesに有るので、カーソルを動かしてCharacter deviceに合わせEnterを押すと画面が変わりますので、カーソル移動キーで下方向にいくつか動かして行くと"Advanced Power Management BIOS support"という項目がありますので、ここで"y"キーを押します。そして、その下の"Enable PM at boot time"と"Power off on shutdown"も同じように"y"キーで選択します。すると左側の[ ]に*が表示されます。これがセットされた証拠です。

 セットが終わると左右キーでExitを選択して抜けます。

 次に、カーネルの再構築という事で、"make dep;make clean"と叩きます。そして、make zliloと叩きます。

> make dep ; make clean
   :
> make zlilo

 make zliloの構築には約50分かかりました。

 ところが、何故かエラーが出てしまったのです。

tools/build bootsect setup compressed/vmunix.out CURRENT > zImage
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 4460 bytes.
System is 617 kB
System is too big
make[1]: *** [zImage] Error 1
make[1]: Leaving directory `/usr/src/kernel-source-2.0.30/arch/i386/boot'
make: *** [zlilo] Error 2

 うーん、なんでぇ???...

 ドキュメントを読んでもこのエラーの対処が判らなかったので、最後の手段であるメーリングリストに質問してみました。するとやはりメッセージ通り大きすぎるんだという答えが返ってきました。
 実は、カーネルのサイズには8086からのしがらみがあり、起動時にはすべてが640KB以内に居ている必要があるそうなのです。そのため、多くのドライバーを入れるとカーネルサイズが大きくなりすぎ、この範囲に入らなくなるのです。大体カーネルのサイズとしては、512KB程度が限界だという事です。このへんの詳しい事は下記雑誌を参考にして下さい。

 この辺りのドキュメントというのはあまり無く、簡単な説明(とは言っても結構ハイレベルですけど)がLinuxJapan-Vol.6のp.114から掲載されている「カーネルのブート」というページに載っています。しかし、残念な事にインターネット上では見つけることが出来ませんでした。(もし、どこかに公開されていましたら教えて下さい)こういう雑誌というのは大都市圏の一部しか発売されておらず、下手をすればその存在すら知られていない可能性も有ります。是非とも、インターネット上に公開して欲しいと願うばかりです。

 という事で、再度menuコンフィグを走らせて設定されている内訳を詳しく見ることにしました。

 General setupを見てみると、MCA bus supportや(386) Processor typeなど確かに幾つか変えた方が良いようなので、次の変更を加えてみました。

General setup

MCA bus support

[*] -> [ ]

Processor type

386 -> Pentium

Kernel math emulation

[*] -> [ ]

Floppy, IDE, and other block devices

Include IDE/ATAPI CDROM support

[*] -> [ ]

Include IDE/ATAPI TAPE support

[*] -> [ ]

CMD640 chipset bugfix/support

[*] -> [ ]

RZ1000 chipset bugfix/support

[*] -> [ ]

SCSI support

Probe all LUNs on each SCSI device

[*] -> [ ]

SCSI low-level/以下すべて

全て、<*> -> < >

ISDN subsystem

ISDN support

<M> -> < >

Character devices

Advanced Power Management BIOS support

[ ] -> [*]

Enable PM at boot time

[ ] -> [*]

Make CPU Idle calls when idle

[ ] -> [*]

Enable console blanking using APM

[ ] -> [*]

Power off on shutdown

[ ] -> [*]

QIC-02 tape support

[*] -> [ ]

C&T 82C710 mouse port support

[*] -> [ ]

以上の様に変更してmenuconfigを終了させました。しかし、tecra関係は無かったけど、大丈夫なのだろうか?

カーネルの再構築

 menuconfigが終了したらmake depとmake cleanを行った後、make zliloを実行します。今度はサイズが大きいとかいうエラーは発生せず正常のコンパイルが終了しました。
 エラーが発生しなかったので、make modules を行ったところ今度はconfig.cのコンパイルの部分で、

config.c:143: #error "HiSax+ No cards configured"
config.c:157: `DEFAULT_CARD' undeclared here (not in a function)
config.c:157: initializer element for `cards[0].typ' is not constant
config.c:157: `DEFAULT_CFG' undeclared here (not in a function)
config.c:157: initializer element for `cards[0].para' is not constant
make[3]: *** [config.o] Error 1
make[3]: Leaving directory `/usr/src/kernel-source-2.0.30/drivers/isdn/hisax'
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/usr/src/kernel-source-2.0.30/drivers/isdn'
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/usr/src/kernel-source-2.0.30/drivers'
make: *** [modules] Error 2

 というエラーが出てしまった。ヲイヲイ、HiSaxは外したのにぃ...と思ったらなんと最初の`HiSax SiemensChipSet driver support'に<M>マークが付いていた。

 そこで、このマークを`n'キーで外して再度 make depからやり直した。meke zliloには約40分、そして、make modulesには約50分かかった。最後にmake modules_install(これはすぐに終わる)で一応インストールは終了です。

新しく作ったカーネルで起動

 さて、新しく作ったカーネルを使用するために、まずは再起動を行いました。先程、LiloでLinuxとLinux2029を作ったので新しいカーネルはもちろん、Linuxの方です。多分、そのままEnterを押せば新しいカーネルで立ち上がるはずです。

 すると、カードの認識時に以前は3回ピッと音が鳴ったのに、今回はピッと3回鳴った後1回ブーっと鳴ってしまいました。またscsiカードかな?と思ったのですが、mount /cdrom とするとcdromがマウントされたので、どうやらEthernetCardの様でした。もしかしたら、必要なデバイスまで外してしまったのかも知れませんね。

 さて、ここで大切なのはどのデバイスが足らなかったのか?という事です。まず、状況をきちんと把握するために、起動時のメッセージをチェックする事にします。起動時のメッセージの大半はdmesgコマンドによって再現出来ますので、まずはdmesgでチェックします。

# dmesg | more

すると、Linux PCMCIA Card Services 2.9.6と出た後PCIC Probeで Intel i82365sl を認識し、1542xコントローラを検出しました。そして、scsiデバイスとして、CD-ROMを見つけました。ところが、Ethernetカードに関してはエラー等の表示も行われませんでした。

 それでは、別の情報にあたってみましょう。まずは、/var/admディレクトリの下にあるsyslogというファイルを見てみましょう。このファイルはテキストファイルになっているので、more等で簡単に見ることが出来ます。それでは見てみましょう...

# cd /var/adm
# more syslog
:
....... cardmgr[83]: + /lib/modules/2.0.30/pcmcia/8390.o: unresolved symbol netif_rx_R9117fffb8
:

 という事で、再度menuconfigを走らせてチェックすることにしました。

 すると、Network device supportのARCnetの部分で、<M>にもなっているにも関わらず、その下のEnable....という行は???
 とにかく、このARCnetは不要だと思われるので"<M>"を"< >"に変え、未選択になっている SEEQ8005 supportを追加してから再度カーネルの再構築を行ってみた。

 ところが、今度は Should I run /sbin/lilo? (y/n) というメッセージが出て止まってしまった。このメッセージの前には

sh ./install.sh 2.0.30 zImage /usr/src/kernel-source-2.0.30/System.map""
In order to use the new kernel image you have just installed, you
wil need to reboot the machine. First, however, you will need to
either make a bootable floppy diskette or re-run LILO.

Checking for LILO...Yes, on /dev/hda2

と出ていた。とにかく、'y'を答えたら問題なく終了したので、そのままmake modules_includeまで終了させ、リブートをかけてみた。

 が、やはり再起動時に'ブー'と鳴り、EthernetCardが認識されなかった。

 「もしかしたらpcmciaのコードがカーネルと合っていない為では?」と思い、/usr/src/modules/pcmcia-csディレクトリで、make config;make dep;make all;make installと続けて行い、再起動をしてみました。

 ところが、今度は、ブーという音が2回も出て、cs: overrun is ger_next_tuple for socket 1 というメッセージまで出てしまったのです。そして、cdromにすらアクセス出来なくなってしまったのです。うーん、もうお手上げ...どうしよう....

 ところが、ふと「あれ?PCMCIAってもしかしてPCIインターフェースからブリッジで接続されているのでは?」と思い再度 menuconfig を走らせて、General setupのページから外していた[PCI bridge optimizasion]という項目をセットしてみることにした。しかし、ちょっとは期待したのだが、やはりダメだった。

 そこで、もう一度初心に戻ってドキュメントを調べることにした。

 まずは、pcmcia-csの方からソースパッケージを展開した/usr/src/modules/pcmcia-csディレクトリ内のREADMEファイルを読んでみるが今回に関した記述は無かった。
 そこで、次に /usr/doc/pcmcia-sourceディレクトリに目を移すと、そのなかのREADMEファイルに

1./usr/src/linuxでconfigを行え
2.pcmcia-csのルートディレクトリに移れ
3.debian/rules binary-modulesを実行しろ

という記述が有った。そういえば、やっていなかったなぁ....という事で、rulesの実行を行ってみた。ところが、gpkg-gencontrolが無い!というエラーで落ちてしまった。ガーン!
もしかして、gpkg-gencontrolって標準ではインストールされていないのでは?
お〜い、dselectちゃん。ちゃんと依存チェックしてよね。

 仕方が無いので、再起動を行い今度はLILOの所でLinux2029を選択して古いカーネルで起動してみた。しかし、今度はカードマネージャーのバージョンが合っていないとかいうメッセージでピッともブーとも言わなくなってしまった。そりゃぁそうかも知れない。だって、問題はpcmciaなんだもん...

 あ〜、お手上だ!...(i.i) またまた1からやり直しだ...


第3章に戻る

Indexに戻る

第5章に続く


Copyright(c) 1997,1998 loose All rights reserved.

第4版 1998.02.24 更新(カーネルサイズの記述を追加)
第3版 1998.02.22 更新
第2版 1998.02.12 更新
第1版 1997.11.30 初公開