試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Mandriva Linux 2010.0のカーネルの再ビルドに関するメモ(後半)

Mandriva Linux 2010.0のカーネルの再ビルドに関するメモ(前半)」の続き。

  1. 初期RAMディスクイメージ(initrd)の作成 <前半>
    1. カスタムカーネルを起動するためのブートローダ設定 <後半>
  2. ALSAのIntel HD Audioにおけるビープ音を無効にし、pcspkrを用いるようにする
  3. カスタムカーネル向けのモジュール(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を直接編集する。

各項目の設定

各項目の詳細設定

設定後の一覧

ALSAIntel 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」ドライバで動かすはめになったりもしたが、最終的にはこのあたりも解決し、カスタムカーネルが使えるようになった。

使用したバージョン: