表示結果から読み解け! ハードウェア構成の調査

第5回 Linuxカーネルのコンフィグレーション手順

大竹龍史(ナレッジデザイン)
2008/8/28

第4回1 2 3 4次のページ

本連載は、Linux 認定試験 LPICに対応しています。一般的なLinuxユーザーレベルのトピックは省略し、システム管理とサーバ管理の内容を取り上げています。また、LPIC対策だけでなく、関連するトピックについて系統的な理解を問う問題も出題しています。連載の特徴は、対象となるプログラムのバージョンを可能な限り明記していること、比較的新しくまとまった解説がまだ少ないトピック、重要だが理解しにくいトピックを優先して取り上げていることです。問題を解き、その解説を読むことにより実践でLinuxを活用できる力を身に付けます。


  今回のディストリビューション:Fedora 8

問題を解く鍵 【1】

 このトピックに関連した設定や試験問題を解く際には、以下の項目がポイントになります。

【1】カーネルコンフィグレーションの概要を把握しておく

@IT自分戦略研究所カンファレンス
上級ITプロフェッショナルのスキルとキャリア 開催
日時:2008年9月27日(土)
11:00〜18:00(受付開始 10:30〜)
場所:秋葉原UDX 6F RoomA+B
詳しくは開催概要をご覧ください。

 カーネル(kernel:核)はシステム起動時にメモリにロードされ、その後メモリに常駐し、CPUやメモリなどシステム資源の管理やデバイスの制御、プロセスのスケジューリングなどを行う、文字どおりにLinuxオペレーティングシステムの核となるプログラムです。

 カーネルは一般的に、/bootディレクトリの下に「vmlinuz」あるいは「vmlinuz-バージョン名」(例:/boot/vmlinuz-2.6.23.1-42.fc8)のファイルに格納され、システム起動時にGRUBやLILOなどのブートローダによってメモリにロードされます。またシステム立ち上げ後、必要に応じて動的にカーネルのアドレス空間にロードされるモジュールがあり、これは「/lib/modules/カーネルバージョン」(例:/lib/modules/2.6.23.1-42.fc8)ディレクトリの下に、種類ごとにサブディレクトリで分類され置かれています。このモジュールは動的にロード可能という意味でローダブルモジュール(loadable module)あるいは単にモジュールと呼ばれます。

 このカーネル、あるいはローダブルモジュールを作り直す作業がカーネルコンフィグレーションです。カーネルコンフィグレーションは、カーネルの機能追加や不必要な機能の削除、またハードウェア構成変更に伴うデバイスの追加や削除に対応するために行います。
  
  カーネルコンフィグレーションには、カーネルのソースと、ソースをコンパイルするためのユーティリティが必要なので、これを用意します。必要な開発ユーティリティはmake、Cコンパイラgcc、アセンブラas、リンカldなどがあり、今回取り上げるFedora 8の場合は、RPMパッケージとしてのmake、gcc、binutilsなどを、インストールする必要があります。

 Linuxディストリビューションによっては、インストールCD/DVDにカーネルソースコードが含まれている場合と含まれていない場合があり、最近は含まれていない場合が多いようです。Fedora 8の場合は含まれていないので、Fedoraプロジェクトのダウンロードサイトあるいはそのミラーサイトから、Fedora 8カーネルのソースパッケージをダウンロードして、インストールしましょう。

kernel-2.6.23.1-42.fc8.src.rpm
-
Xen非対応のカーネルソース
kernel-xen-2.6-2.6.21-2950.fc8.src.rpm
-
Xen対応のカーネルソース

 また、カーネル開発プロジェクトのサイトから、Linuxディストリビューションによってカスタマイズされていない、オリジナルのカーネルソースをダウンロードして使うこともできます。

カーネル開発プロジェクト(Webページ)

カーネルソースのダウンロード

 ソースファイルを眺めると、リーナス・トーバルス(Linus Torvalds)氏をはじめ、たくさんの開発者が寄与したGPLを基に開発・配布されているオープンソースの典型であり、壮大なプロジェクトであることが実感できるでしょう。

手順の概要

(1)ダウンロードしたカーネルソースは一般的には/usr/srcの下に展開します(空き容量さえあれば、どこのディレクトリでも問題ありません)。

(例)Fedora 8のカーネルソースを展開する例
# rpm -ivh kernel-2.6.23.1-42.fc8.src.rpm
# cd /usr/src
# bunzip2 -c /usr/src/redhat/SOURCES/linux-2.6.23.tar.bz2 | tar xvf -

(2)ソースを展開したディレクトリに移動します。

# cd /usr/src/linux-2.6.23
# ls
COPYING        MAINTAINERS      arch     fs       kernel  scripts 
CREDITS        Makefile         block    include  lib     security 
Documentation  README           crypto   init     mm      sound 
Kbuild      REPORTING-BUGS   drivers  ipc      net     usr

 このディレクトリの下に、種類ごとにサブディレクトリに分類されてソースコードが置かれています。コンフィグレーションの手順はこのディレクトリの下のMakefileとそこからincludeされた複数のファイルに記述されており、それをmakeコマンドで実行します。

(3)makeコマンドを実行します。

 Makefileのどの部分を実行するかを、make mrproper、make bzImage、make installなど、makeの引数で指定し、順番に実行していきます。引数として指定するmrproper、bzImage、installをmakeのターゲットと呼びます。

(例)カーネル2.6で初期状態から実行する例
# make mrproper
=>
以前のカーネルコンフィグレーションで生成されたすべてのファイルを削除して初期状態に戻す
# make menuconfig
=>
新しいカーネルの構成を記述したコンフィグレーションファイル.configを作る。ほかに、make config、make xconfig、make gconfig、make defconfigなどの方法がある
# make 
=>
.configに従い、カーネルとローダブルモジュールを生成する
# make modules_install
=>
ローダブルモジュールを/lib/modulesの下にインストールする
# make install
=>
カーネルを/bootの下にインストールする

(例)カーネル2.6で既存のコンフィグレーションファイルを利用する例
# cp /boot/config-2.6.23.1-42.fc8 ./.config
=>
現在使用しているカーネルのコンフィグレーションファイル/boot/config-2.6.23.1-42.fc8を.configにコピーする
# make clean
=>
以前のコンフィグレーションで生成されたファイルを削除する。ただし、.configは削除しない
# make oldconfig
=>
.configを基に関連ファイルを設定する。新たに設定の必要な項目があれば設定する
# make
=>
.configに従い、カーネルとローダブルモジュールを生成する
# make modules_install
=>
ローダブルモジュールを/lib/modulesの下にインストールする
# make install
=>
カーネルを/bootの下にインストールする

 この結果、最終的に/bootの下に新しいvmlinuzが作られ、/lib/modulesの下にカーネルバージョンのディレクトリができて、その下にローダブルモジュールが置かれます。

問題を解く鍵 【2】

第4回1 2 3 4次のページ


@IT Special 注目企業
@IT Special ラーニング
関連キーワード

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード


スキルアップに役立つサービス
ITトレメ スキルアップに役立つ問題を無料で出題
ラーニングカレンダー ITスキル研修4000件、最新情報の検索できます

キャリアアップ

スポンサーからのお知らせ

・ケ・ュ・チマツ、クヲオ貍シ・ケ・ン・・オ。シ

- PR -
@IT Special 注目企業
インデックス

イベントカレンダー

PickUpイベント

- PR -
もっと見る

お勧め求人情報


@IT Special ラーニング