Mandriva Linux 2010.0のカーネルの再ビルドに関するメモ(後半)
「Mandriva Linux 2010.0のカーネルの再ビルドに関するメモ(前半)」の続き。
- 初期RAMディスクイメージ(initrd)の作成 <前半>
- ALSAのIntel HD Audioにおけるビープ音を無効にし、pcspkrを用いるようにする
- カスタムカーネル向けのモジュール(DKMSによるもの)が読み込めない?
カスタムカーネルを起動するためのブートローダ設定
Mandriva Linux コントロールセンターの「起動 - 起動システムを設定」の2ページ目で「追加」を押し、ブートローダ項目を追加する。- 「ラベル」には好みで表示文字列を記述
- 「イメージ」はカーネル本体の場所(例:/boot/vmlinuz-custom)
- 「root」は/のパーティションのデバイス名(/dev/sd[ディスクごとの文字][パーティション番号])
- 「追加」にはディストリの提供するカーネルの項目からカーネルの追加コマンド行引数(resumeやsplashの指定)をコピペしておく
- 「詳細」を押して「initrd」に初期RAMディスクイメージの場所(例:/boot/initrd-custom)を指定する
- 「デフォルト」にチェックすると既定の項目となる
必要に応じて、「追加」への「splash=silent」を省いた「linux-nonfb」版や、「failsafe」のみを記述した「failsafe」についてもカスタムカーネルを使用したものを用意する。同じような作業の繰り返しになってしまうのがつらいが、設定の複製はできないので、面倒であれば/boot/grub/menu.lstを直接編集する。
各項目の設定
各項目の詳細設定
設定後の一覧
ALSAのIntel HD Audioにおけるビープ音を無効にし、pcspkrを用いるようにする
以前はpcspkrモジュールを用いてビープ音が正しく鳴っていたのだが、手元のオンボードサウンド(Realtek ALC883)では2010.0のカーネル(Linux 2.6.31.5)の時点では代わりにサウンドカードからビープ音が出るようになってしまっていたが、カーネルの再ビルド以外の対処方法が分からなかった。この度、別の目的でカーネルの再ビルドをすることになったので、同時にこのALSAのビープ音機能を無効にしてpcspkrモジュールが用いられるようにすることにした。
Device Drivers ---> <M> Sound card support ---> <M> Advanced Linux Sound Architecture ---> [*] PCI sound devices ---> <M> Intel HD Audio ---> [ ] Support digital beep via input layer [CONFIG_SND_HDA_INPUT_BEEP]
カスタムカーネル向けのモジュール(DKMSによるもの)が読み込めない?
「dkms-」で始まる(Debian/Ubuntuでは「-dkms」で終わる)名前のパッケージはカーネルモジュールのソースで構成され、DKMS(Dynamic Kernel Module Support Framework)というツールによってモジュールのインストール状態が管理される。現在動作しているカーネル向けのモジュールがインストールされていない(とデータベース上の情報がなっている)場合に自動的にモジュールをビルドしてくれる大変ありがたいもので、カーネルのバージョンが上がったときには自動的に新しいカーネル向けのモジュールが作成される(そのときの起動時間は長めになる)。ビルドしたカスタムカーネルで起動したときにもこのモジュールビルド処理が行われ、ファイルは正しく配置されるのだが、何故かどのカーネルモジュールも正しく読み込まれず、カーネルモジュールを要求するパッケージ(XのNVIDIAドライバを含む)が動作しない。
調べたところ
http://forum.mandriva.com/viewtopic.php?t=113292
が見つかり、その書き込みを参考にして
[*] Enable loadable module support ---> [ ] Module versioning support [CONFIG_MODVERSIONS]
ビルド設定の上記項目を無効にしてカーネルをビルドし直して起動することで問題は解決したが、DKMSがモジュールをインストール済みと認識してしまっており、これを
$ sudo dkms remove -m nvidia-current -v 185.18.36-4mdv2010.0 -k 2.6.31.5-1mnb-custom
のように個別に消していく作業も必要だった。この作業には
$ /usr/sbin/dkms status
を実行して
nvidia-current, 185.18.36-4mdv2010.0, 2.6.31.5-desktop-1mnb, x86_64: installed
のようなカーネルとモジュールの組み合わせ(上はディストリのカーネルのもの)の一覧を表示し、その中からカスタムカーネルのものを探して「remove」で消していくという流れとなった。
この件でNVIDIAドライバの関係でXサーバの設定まで書き換えられてしまい、GUI設定ツールで再設定するまで「nv」ドライバで動かすはめになったりもしたが、最終的にはこのあたりも解決し、カスタムカーネルが使えるようになった。
使用したバージョン:
- Linux 2.6.31.5-1mnb