ノートPCのカーネルアップデート

さて、今回我が家のサーバーのカーネルをアップデートした。2.4.9から2.4.18へだ。
問題があった為とかではなく、ただ何となくだ。
また、2.4.18を選択した理由は、TurboLinuxのFTPサイトのTurboLinux 7 ServerのUPDATEに置いてあった為。 TurboLinuxで確認した最新バージョンなのだろうから最も安全?と判断した。

ちなみに、http://www.kernel.org/よりダウンロードした2.4.18のカーネルソースコードではエラーが出てしまい、うまくコンパイル出来なかった。
また、今回TurboLinuxよりダウンロードしたカーネルソースコードも付加する機能によってはエラーが出る事あった。

作業の流れはこの通り
  1. ソースコードのダウンロード
  2. 使用ドライバの確認
  3. カーネル設定(メニュー形式)
  4. makeとカーネルインストール
  5. モジュールのインストール
  6. Liloの設定
  7. エラー
  1. ソースコードのダウンロード
    いつもの如く、ソースコードの入手からだ。
    ftpでソースコードを取得します。 ADSLルータの設定によりPASVモードで接続しています。
    [root /root]# ftp -p ftp.turbolinux.co.jp
    ftp> cd /pub/TurboLinux/TurboLinux/ia32/Server/7/updates/RPMS/
    ftp> bin
    ftp> get kernel-source-2.4.18-12.i586.rpm
    ftp> get kernel-headers-2.4.18-12.i586.rpm
    ftp> by
    次はrpmのインストール。rpmをインストールすると/usr/src/linux-2.4.18が作成されます。
    [root /root]# rpm -ivh kernel-source-2.4.18-12.i586.rpm kernel-headers-2.4.18-12.i586.rpm    
    [
    root /root]# cd /usr/src
    [root src]# ln -s linux-2.4.18 linux
    [
    root linux]# cd linux

  2. 使用ドライバの確認
    ソースコードが準備できたら、次は現在の設定を確認。
    ネットワークカードのドライバなど、何が使われているか確認しておくべき。
    [root linux]# dmesg   このコマンドは起動時に表示されるメッセージです。  
    [root linux]# lspci   これはPCIデバイスを表示します。
    [root linux]# lsmod   組み込まれているモジュールを表示します。
     
  3. カーネルの設定
    我が家のサーバーはB5サイズのノートPCを使用している。
    その為、フロッピーはUSB接続であり、マウスもUSBマウスを使用している。
    また、今回カーネルを構築する際に、出来るだけ余計な機能は省こうと考えている。
    一応僕の設定をここにおきます。良ければ参考にして下さい。
    [root linux]# make menuconfig              <--カーネル設定画面へ      

    USBマウスを使用する為には、次の項目をカーネルに組み込むかモジュールで追加する。
    [Input core support]
        <M> Mouse support
    [USB support]
        <*> Support for USB
        [*] Preliminary USB device filesystem
        <M> UHCI (Intel PIIX4, VIA, ...) support
        <M> USB Human Interface Device (full HID) support
        [*] HID input layer support
    USBフロッピーを使用する為には、次の項目をカーネルに組み込むかモジュールで追加する。USBのフロッピーはSCSIとして扱われます。
    [SCSI support]
        <M> SCSI support
        <M> SCSI disk support
    [USB support]
        <*> Support for USB
        [*] Preliminary USB device filesystem
        <M> UHCI (Intel PIIX4, VIA, ...) support
        <M> USB Mass Storage support

  4. makeとカーネルインストール
    カーネルの設定を終えたら次はコンパイルしてインストール!
    [root linux]# make dep  <--依存関係の構築
    [
    root linux]# make clean  <--不要ファイル消去
    [
    root linux]# make bzImage  <--カーネル構築
    makeが終了したら、作成したカーネルを現在のものと置き換えます。
    新しいカーネルの正常動作が確認出来るまでは、古いカーネルを削除したり、上書きしないようにします。
    ここでは、2つのファイルを新しくします。
    [root linux]# cd /boot
    [root boot]# cp -p /usr/src/linux/arch/i386/boot/bzImage vmlinuz-2.4.18
    [
    root boot]# cp -p /usr/src/linux/System.map System.map-2.4.18
    [root boot]# rm -f System.map
    [root boot]# ln -s System.map-2.4.18 System.map

  5. モジュールのインストール
    続いてモジュールをインストールします。
    作成された、モジュールは/lib/modules/2.4.18-12ディレクトリにインストールされます。(古いカーネルのモジュールは/lib/modules/2.4.9-3です。)
    [root boot]# cd /usr/src/linux
    [root linux]# make modules         <--モジュールの作成
    [
    root linux]# make modules_install     <--モジュールのインストール

  6. Liloの設定
    liloの設定です。
    起動時に新旧両方のカーネルを選択できるようにしておきます。以下の例では古いカーネルは”linux”と新しいカーネルは”2.4.18”と表示されます。

    vi エディタなどで/etc/lilo.confを編集します。
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    message=/boot/message
    lba32
    default=2.4.18                     <--新しく追加したカーネルのラベル名を記述

    image=/boot/vmlinuz

            label=linux
            initrd=/boot/initrd
            read-only
            root=/dev/hda3
    ↓ここから追加分 
    image=/boot/vmlinuz-2.4.18    
    <--作成したカーネルファイルを指定します。
            label=2.4.18                  
    <--ラベル名は任意ですが分かりやすいもの
            initrd=/boot/initrd
            read-only
            root=/dev/hda3
    ↑ここまで追加分 
    ファイルを変更したらliloを実行します。
    後は再起動してカーネルの正常動作を確認します。
    [root linux]# /sbin/lilo
    [
    root linux]# shutdown -r now

  7. エラー
    今回、カーネル構築のmakeの際にエラーが出る事があった。
    そのエラー内容と、対応方法を挙げておく。
    僕の環境では、これくらいだったが組み合わせによっては他にもありそうだ。
    make[3]: Entering directory `/usr/src/linux-2.4.18/drivers/char/vtune'
    gcc -D__KERNEL__ -I/usr/src/linux-2.4.18/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-str
    ict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686
    〜(省略)〜
    make[3]: *** [vtune.o] Error 1
    make[3]: Leaving directory `/usr/src/linux-2.4.18/drivers/char/vtune'
    make[2]: *** [_modsubdir_vtune] Error 2
    make[2]: Leaving directory `/usr/src/linux-2.4.18/drivers/char'
    make[1]: *** [_modsubdir_char] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.4.18/drivers'
    make: *** [_mod_drivers] Error 2
    このエラーは[General setup] - [< > Intel VTune Support]を外す事で回避できた。
    もっとも、我が家のPCでは不要な設定であった。

    cc -E -C -P -I/usr/src/linux-2.4.18/include -imacros /usr/src/linux-2.4.18/include/asm-i386/page_offs
    et.h -Ui386 arch/i386/vmlinux.lds.S >arch/i386/vmlinux.lds
    ld -m elf_i386 -T /usr/src/linux-2.4.18/arch/i386/vmlinux.lds -e stext arch/i386/kernel/head.o arch/i3
    86/kernel/init_task.o init/main.o init/version.o init/do_mounts.o \
    --start-group \
    arch/i386/kernel/kernel.o arch/i386/mm/mm.o kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o \
    drivers/acpi/acpi.o drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/net
    /net.o drivers/media/media.o drivers/ide/idedriver.o drivers/cdrom/driver.o drivers/pci/driver.o drive
    rs/pcmcia/pcmcia.o drivers/net/pcmcia/pcmcia_net.o drivers/video/video.o \
    net/network.o \
    /usr/src/linux-2.4.18/arch/i386/lib/lib.a /usr/src/linux-2.4.18/lib/lib.a /usr/src/linux-2.4.1
    8/arch/i386/lib/lib.a \
    --end-group \
    -o vmlinux
    arch/i386/kernel/kernel.o: In function `call_thermal_interrupt':
    arch/i386/kernel/kernel.o(.text+0x590e): undefined reference to `smp_thermal_interrupt'
    make: *** [vmlinux] Error 1
    [Processor type and features] - [Machine Check Exception]を追加する事で回避できた。
    よく分からないので外しておきたかったのだけれど...。