★ Moving to kernel 2.2 にたいへん簡潔に要点が書いてあります。 アップグレードの前にぜひお読み下さい。
★ もう 2.2.14 が出ています。
Slackware 3.6 ベースのマシンに Linux 2.2.0 をインストールしてみました。
まず近場から linux-2.2.0.tar.bz2 と patch-2.2.1.bz2 というファイルをもらってきます。私は ftp://ring.asahi-net.or.jp/pub/linux/kernel.org/kernel/v2.2 からいただいてきました。これを
cd /usr/src bzip2 -dc linux-2.2.0.tar.bz2 | tar xvf - bzip2 -dc patch-2.2.1.bz2 | patch -p0のようにして展開して,/usr/src/linux/Documentation/Changes を熟読し,他に必要なソフトを取ってきてインストールします。 私はとりあえず次のものをインストールしました。 Slackware 3.6 にとって必須なのは net-tools-1.49 以上のものをインストールすることだけだと思います。
新しい net-tools は,カーネルをコンパイルしてからコンパイルするとうまくいきます (make config,make,make install,多少のエラーは無視)。
いよいよカーネルのコンパイルです。
cd /usr/src/linux make mrproper make xconfig make dep ; make clean
make xconfig ではメニュー項目が多くなって,けっこうたいへんです。 しかもデフォールトがあまりうまくできていないので, よく見て設定しないと後で悩むことになります。
まず,あらかじめ /etc/lilo.conf で古いカーネルでも起動できるようにしておきます。次は一例です。
# LILO configuration file # generated by 'liloconfig' # # Start LILO global section boot = /dev/hda #compact # faster, but won't work on all systems. delay = 50 vga = normal # force sane state # ramdisk = 0 # paranoia setting # End LILO global section # Linux bootable partition config begins image = /vmlinuz root = /dev/hda3 ←適当に変える label = linux read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends # Linux bootable partition config begins image = /vmlinuz.old root = /dev/hda3 ←適当に変える label = old read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends # DOS bootable partition config begins other = /dev/hda1 ←適当に変える label = win table = /dev/hda # DOS bootable partition config ends
ここで make zlilo としたら ``System is too big. Try using bzImage or modules.'' と言われてしまったので,make bzlilo にしました。
make bzlilo make modules make modules_install
これでいちおう X Window まで完璧に動きました。
しかし,dhcp クライアントが動かなくなったので, ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl2.tar.gz を取ってきてインストールしました。 以前は dhcpcd-0.70 を使っていたのですが,おかげで以前より便利になりました。
プリンタが動かなかったので,/etc/printcap の lp=/dev/lp1 を lp=/dev/lp0 に変えました。番号の付け方が変わったようです。lpc restart all としてエラーになってしまったので,lpd を手で起動しました。
RealPlayer は rpopen を使って動くようにしました。
このマシンは ST34321A ATA (IDE) HDD を使っています:
hda: ST34321A, ATA DISK drive hda: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63, UDMA
この UDMA というのは Ultra DMA のことのようで,2.0.x のころは単に
hda: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63と出るだけでした。2.2.0 にしてから,ときどき dmesg に次のようなメッセージが出るようになりました。
hda: dma_intr: status=0x51 { DriveReady SeekComplete Error } hda: dma_intr: error=0x84 { DriveStatusError BadCRC }
これについていろいろ情報を探したところ,おそらく HDD のケーブルが Ultra DMA にしては長すぎるのではないかということらしいです。 CRC エラーですので,リトライしてちゃんと正しく読めているはずのようです。 こういうことが頻繁に起こるようならカーネルは自動的に DMA を切るようにできているようです。
それでも気になるので,BIOS の設定で UDMA を disabled にしてしまいました。 現在は起動時の表示が
hda: ST34321A, 4103MB w/128kB Cache, CHS=523/255/63, (U)DMAになり,上のエラーも出なくなったようです。
[1999-03-15] これについて, kernel make時に Use DMA by default when available (CONFIG_IDEDMA_AUTO) を N にするという方法を教えていただきました。 ありがとうございます。
Socket filtering (CONFIG_FILTER) を y とする場合は パッチ が必要なようです。
cd /usr/src zcat patch-2.2.2.gz | patch -p0 (↑.bz2 の場合は bzip2 -dc patch-2.2.2.bz2 | patch -p0) cd /usr/src/linux cp -p .config config.bak make mrproper make xconfig (メニューから config.bak を読み込んで,ざっと確認し,保存終了) make dep make bzlilo make modules make modules_install
これで shutdown -r now します。完璧に動いています。
上とまったく同様です。
Slackware 付属の古い patch ではパッチがあてられませんでした。 新しい patch 2.5 を使いましょう。
古い .config を読み込んで使ったらコンパイルに失敗した。 CONFIG_1GB というのが増えたようで, それをセットしないといけないようだ。
特に問題なし。
昔は Linux カーネルは gcc 2.7.2.3 でコンパイルするものでしたが, 2.2.14 以降は gcc 2.95.2 でコンパイルしても大丈夫のようです。
リンクはご自由にどうぞ。
松阪大学 奥村晴彦 okumura@matsusaka-u.ac.jp
Last modified: Wed Jan 5 11:53:03 2000