Linuxカーネルのコンフィグレーション手順:実践でも役立つLPICドリル(5)(2/4 ページ)
本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。
■今回のディストリビューション: CentOS4.4、Fedora8
問題を解く鍵 【2】
【2】カーネルコンフィグレーション手順の各ステップの意味を把握しておく
make mrproper
現在のコンフィグレーションファイル.configと、前回のカーネルコンフィグレーションで生成されたすべてのファイルを削除して初期状態に戻します。
make cleanとの違い | cleanの場合はmrproperでは削除される現在のコンフィグレーションファイル.config やローダブルモジュールの生成に必要なファイルは削除されません。 |
---|---|
mrproperの由来 | トーバルス氏が、欧州で知られているMr.Properというクリーニング製品の名前にちなんで付けたとのこと。米国では同じ製品がMr.Cleanとして知られていて、製品のマスコットイメージはsailor(船乗り)だそうです。 |
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
カーネルのコンフィグレーションファイル.configを生成し、関連ファイルを設定します。
設定項目1つ1つについて、順番に対話的に尋ねてくる、最もシンプルな形式です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
cursesライブラリを利用した、端末ベースのメニュー形式のインターフェイスです。
QtベースのGUIツールです。
GtkベースのGUIツールです。
既存の.configをデフォルトとして、新しい定義が必要な項目がある場合のみ、尋ねてきます。
arch/$ARCH/defconfigをデフォルトとして、.configを生成します。
上記のいずれかのコマンドにより.configを生成して、独自にカスタマイズしたカーネルを作る場合、カーネルのバージョンで識別できるようにバージョンを変更しておく方がよいでしょう。カーネルバージョンを変更する場合は次のようにしてMakefileを編集してから、カーネル生成手順を実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
make
カーネルbzImageとローダブルモジュールを生成します。bzImageはarch/$ARCH/bootの下に、ローダブルモジュールは各サブディレクトリの下に生成されます。makeの代わりに、make bzImage、make zImageあるいはmake modulesを実行することで、カーネルあるいはローダブルモジュールをそれぞれ別々に生成することもできます。
make bzImageあるいはmake zImageを実行してカーネルを生成する場合、makeの実行中にコンパイルされたbuildコマンド(arch/$ARCH/boot/tools/build)の実行により、最終的にbzImageあるいはzImageが出来上がります。最後に、生成されたカーネルの情報が表示されます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
bzImage/zImageファイルの構成(各部のサイズはこの例でのものです)
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Root device is (8, 5):
ルートデバイス(この例ではメジャー番号8、マイナー番号5)は、デフォルトではカーネル構成時のルートデバイスが指定されてBoot sectorに書き込まれます。
GRUBやLILOなどのブートローダにルートデバイスの指定がない場合は、ここで指定されたデバイスがルートデバイスになります。
Boot sector:
SetupとSystem(圧縮されたカーネル)をロードするプログラムです。ブートローダにGRUBやLILO を使う場合はこのプログラムは使用しません。サイズは512バイト固定です。
Setup:
Boot sectorあるいはLILOやGRUBのようなブートローダから呼び出されます。BIOSからハードウェア情報を読み取ってパラメータの設定を行うなど、リアルモードからプロテクトモードへ移行するために必要な作業を行います。作業が終わるとカーネルのエントリポイント(実行開始番地)に飛んで、カーネルに制御が移行します。この例ではサイズは6889バイトです。
(注1)リアルモード:実アドレスモード。8086プログラムを実行するモード。アドレス空間のサイズは20bit=1MB。プロテクトモード:プロテクトモードでは個々のアプリケーションは独立したアドレス空間を持ち、それぞれのアドレス空間へのアクセスはカーネルによって保護されます。アドレス空間のサイズは32bit=4GB。
System:
gzipによって圧縮されたカーネルです。この例ではサイズは2489KBです。
bzImageとzImageの違いについて:両者のSetupプログラムは異なり、カーネルのエントリポイントのアドレスも異なります。zImageが対応できる圧縮カーネルのサイズは512KBまで、bzImageはサイズ512KB以上の圧縮カーネルに対応できます。ただしbzImageの場合、そのSetupプログラムが利用するBIOSコールに対応していない古いBIOSの場合はカーネルをロードできません。カーネルを圧縮するコマンドはzImageもbzImageもgzipです。
カーネル2.4の場合:
カーネル2.4の場合、カーネルzImage/bzImageとローダブルモジュールの生成手順は2.6とは若干異なり、まずmake depあるいはmake dependというステップを実行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
make modules_install
/lib/modules/カーネルバージョン(例:/lib/modules/2.6.23.1-42.fc8) ディレクトリを作成し、その下にサブディレクトリに分類してカーネルモジュールをコピーします。また、モジュールのパスと、モジュールの依存関係を記述したmodules.depファイルを生成します。
make install
このコマンドは/lib/modules/カーネルバージョン(例:/lib/modules/2.6.23.1-42.fc8)ディレクトリを参照するので、make modules_installを実行しておきます。/bootの下にbzImageをvmlinuzとしてコピーし、System.mapをコピーし、initrdを生成します。また、/boot/grub/grub.confに新しく生成したカーネルのエントリを追加します。
init 6
システムを再起動し、新しいカーネルで立ち上げます。
dmesgで確認
カーネル立ち上げ時のメッセージをdmesgコマンドで表示して確認できます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
unameコマンドでも確認できます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
rdevコマンドについて
既出の説明のとおり、bzImage/zImageのBoot sector部にはrootデバイスの情報が書き込まれていて、ブートローダでrootデバイスを指定しない場合は、これが使われます。rdevコマンドで、このrootデバイスの情報を表示、変更することができます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
(注2)rdevコマンドには上記機能のほかに、bzImage/zImageのBoot sector部に書き込まれているramディスクサイズやビデオモードを変更する機能もあります。
(注3)今回の例で取り上げたFedora 8のRPMパッケージutil-linux-ngにはrdevコマンドが含まれていないため、Fedora 7のSRPMパッケージutil-linuxのrdevをコンパイルして使用しました。
Copyright © ITmedia, Inc. All Rights Reserved.