Linux 2.2

Moving to kernel 2.2 にたいへん簡潔に要点が書いてあります。 アップグレードの前にぜひお読み下さい。

もう 2.2.14 が出ています。

Slackware 3.6 ベースのマシンに Linux 2.2.0 をインストールしてみました。

まず近場から linux-2.2.0.tar.bz2patch-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/printcaplp=/dev/lp1lp=/dev/lp0 に変えました。番号の付け方が変わったようです。lpc restart all としてエラーになってしまったので,lpd を手で起動しました。

RealPlayer は rpopen を使って動くようにしました。

dma_intr エラー

このマシンは 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 にするという方法を教えていただきました。 ありがとうございます。

2.2.2 に上げる

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 します。完璧に動いています。

2.2.3〜2.2.9 に上げる

上とまったく同様です。

2.2.10 に上げる

Slackware 付属の古い patch ではパッチがあてられませんでした。 新しい patch 2.5 を使いましょう。

2.2.11 に上げる

古い .config を読み込んで使ったらコンパイルに失敗した。 CONFIG_1GB というのが増えたようで, それをセットしないといけないようだ。

2.2.12〜14 に上げる

特に問題なし。

gcc 2.95.2

昔は 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