• ベストアンサー

カーネルの再構築の方法

カーネルの再構築をしたいのですが、 あまりよくわかりません。 カーネルについてからやさしくおしえてくれませんでしょうか? 本とかを読んでも理解できないので、よろしくお願いします。 カーネルは、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

  • カーネルの再構築とは?

    カーネルの再構築について調べています。 ネットで検索してみると色々なLinuxディストリビューションでのカーネル再構築方法が結果として出てきますが、そもそもカーネルの再構築とは一体何なのかが自分には分かりません。 デバイスに合わせてカーネルから不要なモジュールを削除する・・など部分的な動作は少し調べましたが、再構築の全体像がまだ見えません。 1:カーネル再構築とは何を行うことか。どのファイルを操作するか。 2:カーネル再構築はなぜ必要か。OSにどのような影響を及ぼすか。 以上を教えて頂けると有り難いです。よろしくお願いします。

  • カーネルの再構築について

    現在、カーネルの再構築を行っているのですが、設定後bootすると必ずkarnelpanicを起こしてしまいます。 boot時のエラーメッセージは mounting root filesystem mount: error 19 mounting ext3 pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2 Freeing unused kernel memory: 240k freed Kernel panic: No init found. Try passing init= option to kernel. で何らかの理由でファイルシステムのマウントが失敗してしまっているようなのですが、回復法が見つからないので教えてください。 現在使用しているkarnelは2.4.20で再構築で切り替えようとしたのは2.4.31と2.6.11の2つでどちらも同じエラーでした。よろしくお願いします。  osはredhat9です。

  • LINUXのカーネル再構築

     初めてLINUX Redhatでカーネルの再構築をしました。モジュールはmenuconfigで設定。再起動後に/usr /var /homeの中身がからっぽになってしまいました。何を失敗したのかわかりません。旧バージョンは残っているのでやり直しはきくのですが、原因がわからないと怖くて。どなたかわかりませんか?

  • カーネル再コンパイルについて

    ソースコードを書き換え、それを反映したカーネルを作りたいと思っているのですが、今現在のカーネルのコードを書き換え、saveした上でカーネルの再構築をすれば、できたカーネルには書き換えた内容が反映されているのでしょうか? また、書き換えた際に使っていたカーネルはどうなるのでしょうか? redhat2.4.20-8を使っています。 ブートローダはLILOを使っています。

  • カーネル?

    今まで読んだ本だとカーネルという中心部があって、その周りに色々なプログラムが 動作していると書いてありました。アバウトにイメージだけで理解していたつもりですが、 カーネルって何?と聞かれると上手く答えられません。 人間で言うと、何に該当するのでしょうか? それから、ウィンドウズはヴァージョンが変わっても、カーネルは殆ど変わらないと 聞いた事があります。 カーネルというものは、ヴァージョンが上がって行かないものなのでしょうか? その周りのプログラムだけがどんどん新しくなっていくのでしょうか? どうぞ宜しくお願いします。

  • RedHat8.0 カーネル再構築

    RedHat8.0 のデフォルトのカーネルの再構築を しようとしています。 make xconfig で IP multicast を y にしました。 make bzImage は正常に終了しました。 make modules が失敗します。 dummy.c dummy_init内 invalid suffix on integer constant と言ってますが、このエラーはどうすればなくなるの でしょうか。

  • カーネルの再構築について

    どうも、Linuxの初心者です。RHL7.2を使っています。 最近カーネルの再構築をしたいと思っているのですが、 make xconfig の個々の設定をどのようにすればよいか、分かりません。 各々の設定について詳しく解説、または"こうしたほうがいい"と解説してくれるページ等はないでしょうか? JFというページを見たのですが、カーネルのversionが古い上に英語がわからないため、困っています。どうか、じぶんがさんこうになったサイトでもあれば教えてください。宜しくお願いします。

  • 設定の変更だけしたいのに、それでもカーネルをコンパイル??

    こんばんは。atsu1100といいます。 今使っているRedHat7Jに「IPROUT2」ってのをインストールしたくていろいろ調べて見たところ、カーネルを再構築して設定しないといけないような事が書いてありました。 別にバージョンアップをしたい訳ではなく設定だけ変えたいのですが、それでもやっぱ、カーネルのmakeからしないといけないのですか?? 宜しくお願いします。

  • カーネル再構築とベンチマーク

    カーネルを再構築して、不要なモジュールを削除してスマートにしたいと思っています。それによってどのくらい変化があるか、ベンチマークテストなどによって数値的に確認したいのですが、何か良いソフトウェアはありますか?あるいはこういうことを解説しているサイトなどありますでしょうか? ちなみに、いまWindowsからVMwareでLinux を起動していますが、さすがに少し重たいです。カーネルを再構築してOSを軽くすることで、明らかに体感できるほどの大きい変化が期待できるものでしょうか? よろしくお願いします。

  • カーネル再構築にて、現在の値を引き継ぐ

    Redhat9のカーネル再構築を行いたいです。 DISCからインストールした状態(カーネル再構築を行おうとしているカーネルの状態)を全て引き継ぎ、  SCSI SupportのProbe all LUNs on each SCSI device を Y にする という1点だけ変更を加えて、実行したいです。 これを目標に、以下の流れでコマンドを実行しました。 cd /usr/src/linux-2.4.**/ make mrproper cp ./configs/kernel-2.4.20-i686.config .config sudo make xconfig  ・[SCSI support]→[Probe all LUNs on each SCSI device]をオンにする。  ・セーブ&exitで終わる。 make bzImage && make modules make modules_install installkernel 2.4.20-8-LUNs arch/i386/boot/bzImage System.map ここで、 参考したサイトの手順を鵜呑みにして cp ./configs/kernel-2.4.20-i686.config .config というコマンドを実行して.configを書き換えているのですが、 これは「DISCからインストールした状態」を引き継いでいないですよね? 「DISCからインストールした状態」を引き継ぐには、 インストールした時点で/usr/src/linux-2.4.**/に存在している.configが、/usr/src/linux-2.4.**/にある状態で、 make xconfig を実行すれば良いのでしょうか。 make oldconfigというコマンドが現在の値を引き継いでいるらしいのですが、 実行後に聞かれるいくつかの選択肢の意味がよくわかりません。