カーネル再構築

僕のPCでは問題が一つある。shutdown しても電源が切れないのだ!
smp構成のLinuxではインストール時にAPMがサーポートされないらしい。その為、shutdown後の電源も切れない。
仕方ないので、カーネルの再構築を行う。

ノートPCなどでカーネルを再構築する場合はノートPCのカーネルアップデートの方が参考になると思います。


作業の流れはこの通り
  1. ソースコードのダウンロード
  2. 使用ドライバの確認
  3. カーネル設定の準備
  4. カーネル設定(メニュー形式)
  5. makeとカーネルインストール
  6. モジュールのインストール
  7. Liloの設定
  8. 最後に

  1. ソースコードのダウンロード
    いつもの如く、ソースコードの入手からだ。
    [root /root]# ftp ftp.turbolinux.co.jp
    ftp> cd /pub/TurboLinux/TurboLinux/ia32/Server/7/source/SRPMS
    ftp> bin
    ftp> get kernel-2.4.9-3.src.rpm
    ftp> by
    次はrpmのインストール
    [root /root]# rpm -ivh kernel-2.4.9-3.src.rpm
    [
    root /root]# cd /var/src/rpm/SOURCES/
    [
    root SOURCES]# cp linux-2.4.9.tar.bz2 /usr/src/.
    [
    root SOURCES]# cd /usr/src/
    [
    root src]# bunzip2 -c linux-2.4.9.tar.bz2 | tar -xvf -
    [
    root src]# ln -s linux-2.4.9 linux
    [
    root linux]# cd linux

  2. 使用ドライバの確認
    ソースコードが準備できたら、次は現在の設定を確認。
    ネットワークカードのドライバなどなにが使われているか確認しておくべき。
    [root linux]# dmesg   このコマンドは起動時に表示されるメッセージです。
    [root linux]# lspci   これはPCIデバイスを表示します。

  3. カーネル設定の準備
    さて、ここからがカーネルの設定!
    まずは、Makefileの設定を行います。
    viエディタなどでMakefileを開き次行のコメントをはずしてください
    #export INSTALL_PATH=/boot   コメント(#)を外す
    次に過去の設定を消去!
    前回の設定を残したい場合は、ファイルを待避する必要あり。
    初回時は実行しなくてもよい。
    [root linux]# make mrproper

  4. カーネル設定(メニュー形式)
    次にメニュー形式のカーネル設定を行います。
    [root linux]# make menuconfig
    rm -f include/asm
    ( cd include ; ln -sf asm-i386 asm)
    make -C scripts/lxdialog all
    make[1]: Entering directory `/usr/src/linux-2.4.9/scripts/lxdialog'
    /usr/bin/ld: cannot find -lncurses
    collect2: ld returned 1 exit status
    >> Unable to find the Ncurses libraries.
    >> >> You must have Ncurses installed in order
    >> to use 'make menuconfig'
    make[1]: *** [ncurses] Error 1
    make[1]: Leaving directory `/usr/src/linux-2.4.9/scripts/lxdialog'
    make: *** [menuconfig] Error 2
    ありゃ、エラーがでた。
    仕方ないので指示に従いncursesをインストール。
    そしたら既にインストール済み!
    訳が分からないのでもう一度強制インストール
    [root /linux]# rpm -Uv ncurses-5.2-6.i586.rpm
    で、強制インストールしても結果は変わらず???
    よくわからないので、ソースコードをダウンロードし、 コンパイル、インストールしてみた。
    何とかうまくいったけど理由は不明?
    [root linux]# ftp ftp.turbolinux.co.jp
    ftp> cd /pub/TurboLinux/TurboLinux/ia32/Server/7/source/SRPMS
    ftp> get ncurses-5.2-6.src.rpm
    ftp> by
    [
    root linux]# rpm -ivh ncurses-5.2-6.src.rpm
    [
    root linux]# cd /var/src/rpm/SOURCES/
    [
    root SOURCES]# mv ncurses-5.2.tar.gz /usr/src/.
    [
    root SOURCES]# cd /usr/src/
    [
    root src]# tar -xzvf ncurses-5.2.tar.gz
    [
    root src]# cd ncurses-5.2
    [
    root ncurses-5.2]# ./configure
    [
    root ncurses-5.2]# make
    [
    root ncurses-5.2]# make install
    環境が整ったところで再びmenuconfigを実行し、カーネルの設定します。
    [root linux]# make menuconfig
    一応僕の設定を乗せておきます。
    このファイルはmenuconfigでsaveしたものなのでloadすることも可能ですが、同じ環境でないと意味ないかな?
  5. makeとカーネルインストール
    カーネルの設定を終えたら次はコンパイルしてインストール!
    [root linux]# make dep  <--依存関係の構築
    [
    root linux]# make clean  <--不要ファイル消去
    [
    root linux]# make bzImage  <--カーネル構築

    続いて現在のカーネルをリネイムします。
    今回構築したカーネルが駄目な場合また元のカーネルに戻せるようにします。
    [root linux]# cd /boot
    [
    root boot]# mv System.map-2.4.9-3smp System.map-2.4.9-3smp.org
    [
    root boot]# mv vmlinuz-2.4.9-3smp vmlinuz-2.4.9-3smp.org
    [
    root boot]# cp -p /usr/src/linux-2.4.9/arch/i386/boot/bzImage /boot/vmlinuz-2.4.9-3smp
    [
    root boot]# cp -p /usr/src/linux-2.4.9/System.map System.map-2.4.9-3smp
    僕の環境はsmp環境だからSystem.map-2.4.9-3smpをリネイムしてます。
    しかし、これは環境によって異なります。
    System.mapや、vmlinuzファイルにシンボリックリンクを張っているファイルをリネイムしてください。
    ls -lとすれば以下の用に表示されます、矢印の右側にかかれているファイル名にリンクされてます。
    lrwxrwxrwx 1 root root 18         Oct 7  22:53  vmlinuz -> vmlinuz-2.4.9-3smp
    -rw-r--r-- 1 root root 1059077 Oct 25 2001  vmlinuz-2.4.9-3
    -rw-r--r-- 1 root root 836117   Oct 17 22:02 vmlinuz-2.4.9-3smp
    カーネルの設定は以上で終わりで、次からモジュールのインストールです。
  6. モジュールのインストール
    menuconfigでモジュール指定("M"と指定)した機能がmakeの対象です。
    [root boot]# cd /usr/src/linux
    [
    root linux]# make modules
    [
    root linux]# cd /lib/modules
    [
    root modules]# mv /lib/modules/2.4.9-3smp /lib/modules/2.4.9-3smp.org
    [
    root modules]# cd /usr/src/linux
    [
    root linux]# make modules_install
    作成されるのは、2.4.9-3smpではなく、2.4.9-3でした。
    僕の環境では/lib/modules/2.4.9が2.4.9-3smpに対して シンボリックリンクされているのでリネイムしてます。
    元々2.4.9-3にリンクされてる環境ではリネイム不要です。
    [root linux]# mv 2.4.9-3 2.4.9-3smp
     
  7. Liloの設定
    liloの設定です。
    起動時に選択により古いカーネルも指定できるようにします。
    また、僕の場合はシステムの起動にMKBOOTDISKを使っていたのでliloに変更する必要がありました。
    今まで使っていたMKBOOTDISKはvmlinuzイメージをフロッピー上に持つため、カーネルを再構築しても新しいカーネルを使いません。
    liloの場合HDD上のvmlinuzを読み込みます。
    起動にMKBOOTDISKを使っていない人は関係ない話です。
    それと、僕はHDDはWIndowsと共存させている為、LiloをMBRではなく、FDにインストールします。
    vi エディタで/etc/lilo.confを編集します。
    boot=/dev/fd0    <- liloをFDにインストールするための設定
    map=/boot/map
    install=/boot/boot.b
    prompt
    timeout=50
    message=/boot/message
    lba32
    default=linux
    image=/boot/vmlinuz
       label=linux
       append="apm=power-off"   
    <- 自動電源OFF設定
       initrd=/boot/initrd
       read-only
       root=/dev/hda8
    image=/boot/vmlinuz-2.4.9-3smp.org   
    <- 追加(古いカーネル選択用です)
       label=linux-old   
    <- 追加
       initrd=/boot/initrd   
    <- 追加
       read-only     
    <- 追加
       root=/dev/hda8   
    <- 追加
    other=/dev/hda1
       label=winnt
    ファイルを変更したらそしたらliloを登録して動く事を祈って再起動。
    これで、次回起動時からはペンギンさん画面で起動の選択が出来ます。
    [root linux]# /sbin/lilo
    [
    root linux]# shutdown -r now

  8. 最後に
    カーネル再構築までしたけど、結局shutdown時に電源は切れませんでした。
    というか、APMは有効になりませんでした。
    とりあえず、あきらめます。(T_T)


お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.