• ベストアンサー

カーネルの再構築の方法

カーネルの再構築をしたいのですが、 あまりよくわかりません。 カーネルについてからやさしくおしえてくれませんでしょうか? 本とかを読んでも理解できないので、よろしくお願いします。 カーネルは、2.4.2です。REDHAT7.1です。 今までの自分的な認識は、ウインドウズでいうデバイスマネージャーみたいなものと思い込んでいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • acky
  • ベストアンサー率31% (182/583)
回答No.1

まず/usr/srcに移動します。作業はrootで行うことを前提としていますが、途中 まではユーザーでも出来るでしょう。 # cd /usr/src 次にすでにlinuxという名前でシンボリックリンクがある場合はそれを削除します。 # rm -f linux ダウンロードしたカーネルを展開します。 ダウンロードしたソースがkernel-2.4.3.tar gzだった場合 # tar zxvf kernel-2.4.3.tar gz ダウンロードしたソースがkernel-2.4.3.tar.bz2だった場合 # bzip2 -d -c kernel-2.4.3.tar bz2 | tar xv これで新たに/usr/src以下にlinuxというディレクトリが生成されます。 ここでこの新しいカーネルを再構築するのに必要なモジュールが自分の環境 に整っているかを確認しましょう。 /usr/src/linux/Documentationの中にあるChangesというファイルを確認しま す。もしそこに示されたも のよりもご自分の環境のバージョンが古い場合、あらかじめアップデートしてお く必要があります。そのためのアップデータが置いてある場所も、更にファイル を読み進めていくと親切に書いてありますので、そちらからダウンロードして、 アップデートしましょう。ほとんどのアップデータは一般的なconfigure,make, make installでアップデートできます。またe2fsprogsやmodutilsはsrcファイルが あるので、それをリビルドすると楽チンです。これらRPMの扱いについてお分か りにならない場合は、ドキュメントを読むなり参考書を読むなりして下さい。一応 一般的には以下のようにします。 まずダウンロードしたファイルを/usr/src/redhat(turbo)/SRPMSに移します # cp file(ファイル名).src.rpm /usr/src/redhat(turbo)/SRPMS 次にこれをリビルドします。 # cd /usr/src/redhat(turbo)/SRPMS # rpm --rebuild file.src.rpm すると/usr/src/redhat(turbo)/RPMS/i386以下にrpmファイルが生成されます。 # cd /usr/src/redhat(turbo)/RPMS/i386 # rpm -Uvh file.i386.rpm ここまででエラーがなかった場合、アップデートは完了です。 すべての必要なアップデートが完了したら展開したカーネルをリネームします。 # cd /usr/src # mv linux linux-2.4.3 リネームしたカーネルにシンボリックリンクを貼ります。 # ln -s linux-2.4.3 linux 次に新しいカーネルディレクトリに移動します。 # cd linux カーネルをコンパイルする前に、一度カーネルをリセットします。 # make mrproper カーネルのコンフィグをはじめます。 # make xconfig(X上でGUI)またはmake menuconfig ここでご自分の環境に合わせてコンフィグレーションして下さい。 分からなければ現在のカーネルを参考にしてもいいでしょう。 その場合は新たにターミナルを起動して # cd /usr/src/linux.bak # make xconfig とすると現在のカーネルの状態が同様にみることが出来ます。ただし見終わっ たらセーブしないで終了して下さい。 新しいカーネルの方は必ずセーブして終了します。するとmake depしてね、と 言われますので、それを実行していきます。 # make dep # make clean ---------------------------------- (ここであらかじめ/etc/lilo.confを boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 lba32 default=linux image=/boot/vmlinuz-2.2.16-22LL6smp label=linux22 initrd=/boot/initrd-2.2.16-22LL6smp.img read-only root=/dev/hda5 image=/boot/vmlinuz label=linux read-only root=/dev/hda5 のように修正しておけば(あくまで一例です)、 以下の作業は不要になり、かわりに次のコマンドを実行して下さい # make install この過程が終了した後に # make modules # make modules_install # /sbin/lilo を実行し再起動すれば、新しいカーネルになります) ---------------------------------------- # make bzImage(Iは大文字の"アイ"でl"小文字のエル"ではありません) # make modules # make modules_install どのプロセスでもエラーがなかった場合は次に進めます。 もしエラーがないと確信がある場合は # make dep clean bzImage modules modules_install と一気にやってしまうことも可能です。 次にinitrdを生成します。 # mkinitrd /boot/initrd-2.4.0 2.4.0(/lib/modulesを参照) ここでエラーが出た場合はとりあえずinitrdの生成を諦めるか、再度カーネルを コンフィグしなおして上記をやりなおします。 更に進めます。 # cp -p arch/i386/boot/bzImage /boot/vmlinuz24 # cp -p System.map /boot/System.map24 # cd /boot # ln -s System.map24 System.map ここまで順調にきたら、liloを書き換えます。 /etc/lilo.confをエディタで開いて下さい。 こちらに一例を示しました。赤字の部分は書き換え、青字の部分は書き加えます。 なお、initrd=/boot/initrd-2.4.0の部分はinitrd生成に失敗した場合は省いて下さい。 /etc/lilo.confを書き換えたら保存して、 # /sbin/lilo を実行して下さい。これで再起動後は新しいカーネルで起動できるはずです。 なお、元のカーネルで起動したい場合はboot:と表示されたらlinuxとタイプして Enterを押して下さい。 あくまで一般例です。 RPMを利用する方法とは違いますのでご注意下さい。 なお、上記は自分のHPに掲載している部分からコピーしてきましたので、若干おかしいところがあるかも知れません。

その他の回答 (1)

回答No.2

「再構築の方法」については、OSに依存することであり、ackyさんが非常に詳 しく説明されていますし、多くのサイトでも解説されているので、省略します。 カーネルというのは、UNIXのような古典的なOSの場合、通常のプログラム自身 が処理できないような作業をしてくれるプログラムと理解すればいいと思いま す。OSを起動するというのは、なにはともあれカーネルをメモリ上に置いて、 それを実行することであるという面もあります。 カーネルがやってくれる作業には、入出力(デバイス操作、ネットワーク、割 込み処理を含む)、プロセス管理(最初のプロセスの生成を含む)、ファイル システム管理、仮想記憶管理、アクセス制御などがあります。通常のプログラ ムでも、入出力とか、ファイル操作をやってるじゃないかと考えるかもしれま せんが、通常のプログラムはシステムコールという方法でカーネルにお伺いを たてるだけで、実際の作業はカーネルがするわけです。 では、どんなときにカーネルを再構築するかというと、バグ修正やバージョン アップのパッチを当てたいとき、非標準のファイルシステムなどの新しい機能 を付加したいとき、カーネルがサポートしている以外のデバイスを組み込みた いとき、カーネルのパラメータを調整したいときなどが該当します。 最近のUNIXでは、動いているカーネルに対して、動的にモジュールを追加・削 除できる機能も付加されていますので、以前ほど頻繁にカーネルを再構築する という状況は減っていますが、まったく不要という具合にもなっていません。

関連するQ&A