japan.internet.com
japan.internet.com メンバーID
Twitter
Facebook
RSS
ピックアップ
2007年8月17日 09:00

Linux カーネルをカスタマイズ――2

著者Carla Schroder海外海外発
カーネルの一般的なカスタマイズ方法

できたばかりのカーネルや最新のパッチは Kernel.org から入手できる。これらはオリジナルの未修正カーネルで、「バニラカーネル」(標準カーネル)と呼ばれている。そして次はビルド環境を構築する必要がある。Fedora も Debian も作業は簡単だ。Fedora では、「Development Tools」パッケージグループを次のようにインストールする。

# yum groupinstall ’Development Tools’

Qt も必要だ。

# yum install qt-devel

Debian では以下のコマンドを使う。

# aptitude install build-essential libqt3-mt-dev qt3-dev-tools

tarball を unpack したソースのなかにある「Documentation/Changes」ファイルには、ビルド環境に必要なアプリケーションの基本一覧がある。実際のところ、カーネルの tarball に付属するマニュアルは時間をかけて読んでおきたい。これは知識の宝庫だ。

新しいカーネルのソースをダウンロードして unpack しても、これを「/usr/src」には置かない。だれの言葉にも耳を貸してはならない。ホームディレクトリにディレクトリを作成し、そこにソースツリーを置いておく。カーネルの README にも次のようにある。

「(前略)…カーネルの tarball はアクセス権のあるディレクトリに置くこと(例:自分のホームディレクトリ)…(中略)…『/usr/src/linux 』は絶対に使わないこと。ここには、(たいてい完全ではない)ライブラリヘッダファイルが使うカーネルヘッダのセットが置かれている。これらはライブラリと一致する必要があり、どのカーネルにもいじらせてはならない」

筆者は「/home/carla/kernel」を使っている。

カーネルの tarball を「tar zxvf linux-2.6.22.tar.bz2」で unpack する。当然、正しいバージョンを使うこと。そして、トップレベルのカーネルソースディレクトリに移動し、好きなテキストエディタで Makefile を開く。「EXTRAVERSION = line」を「EXTRAVERSION = .1-carla」など、何かユニークなものに変更する。

次に、「make」コマンドのオプションを見てみよう。

$ make help

これで多数の情報が表示される。落ち着いてよく読んでいただきたい。プレーンテキストの Makefile 本体を読んだら、ここでひと掃除しておく。

$ make mrproper

「make help」で表示されたものを読み、その機能を覚えよう。この段階では不要なはずだが、ちょっとした保険になるし、何か得するかもしれない。

図1
*クリックして拡大




いよいよ佳境の新カーネル候補のコンフィギュレーションだ。

$ make xconfig

これで図1のようになる。

この部分にはかなり時間がかかる。カーネルのソースツリーに「config」ファイルがない、もしくはこれを意図的に提供するという場合は、「xconfig」が「/boot/config-2.6.*」ファイルを使用することになる。これは問題ではなく、出だしとして良いだろう。いずれにせよ、何でも変更することはできるのだ。「xconfig」の使い方を調べるときは「Help」ボタンをクリックする。コンフィギュレーションオプションにはすべて説明が付いているが、これらの一部については次回に説明する。

コンフィギュレーションに納得したら、オプションなしで「make」コマンドを実行する。この処理には多少時間がかかり、最大で1時間かそれ以上になる。そして、次に root に移動して以下のコマンドを実行する。

# make modules_install # mkinitrd -o /boot/initrd-2.6.22.img # cp ~/kernel/linux-2.6.22/arch/i386/boot/bzImage /boot/vmlinuz-2.6.22 # cp ~/kernel/linux-2.6.22/System.map /boot/System.map-2.6.22

「arch/i386/boot/bzImage」が新しいカーネルで、これは「/boot」ディレクトリにコピーしておく必要がある。対応する「System.map」をコピーすれば、新しい「initrd」イメージがそこにできているはずだ。

これらをすべて「GRUB」メニューに登録し、再起動したら試してみる。以下は「menu.lst」項目の例だ。

title homebrew 2.6.22 kernel root (hd0,0) kernel /boot/vmlinuz-2.6.22 root=UUID=b099f554-db0b-45d4-843e-0d6a1c43ba44 ro initrd /boot/initrd-2.6.22.img

カーネルの名前と「initrd」イメージの名前は任意で、「menu.lst」の項目と一致する限りは好きな名前を付けられる。GRUB は0からスタートするため、最初のハードディスクの最初のパーティションである「/dev/hda1」は、「menu.lst」では「(hd0、0)」になる。

root パーティションの UUID は、「blkid」コマンドを実行して取得する。

$ blkid /dev/sda1: UUID="b099f554-db0b-45d4-843e-0d6a1c43ba44" SEC_TYPE="ext2" TYPE="ext3" /dev/hda1: UUID="1a5408ad-7d1d-4e24-b9db-d132d76e9e8e" SEC_TYPE="ext2" TYPE="ext3"

今は便利な「udev」があるので、ブロックデバイスの特定には UUID を使いたい。「/dev」名がスタティックでなく、「udev」に左右されるためだ。起動するまで「/dev」ディレクトリには何もないため「initrd」イメージを作成する必要がある。つまり、(筆者の知る限り)ブートデバイスをカーネルに組み込む方法はなくなってしまった。

次回は、 Debian と Fedora のそれぞれのカーネルカスタマイズ方法を学習し、無数にあるカーネルのコンパイルオプションの解説も行う。

参考

Debian Kernel Handbook
KernelNewbies.org
Kernel.org
Compiling a Custom Linux Kernel

カーネルカスタマイズの上級者は、カスタムカーネルの作成を自動化するコンフィギュレーションファ生成パッケージである dphys- kernel-packages を試されたい。

« 戻る:理由

目次

1 理由
2 カーネルの一般的なカスタマイズ方法
関連テーマ
プリンター用
記事を転送
この記事をクリップ!
厳選した九州のお野菜とお米をお届け
厳選した九州のお野菜とお米をお届け 野菜の木では、老舗料亭 沙羅の木が厳選した九州のお野菜とお米をお届けします。 毎週、隔週での定期のご購入も可能です。 入会費、年会費、送料、荷造手数料は無料です。
注目のトピックス
Copyright 2012 internet.com K.K. (Japan) All Rights Reserved.