- PR -

再構築したカーネルの起動時にエラーが発生する

1
投稿者投稿内容
Tt
常連さん
会議室デビュー日: 2003/04/02
投稿数: 42
投稿日時: 2003-08-31 14:58
たびたび教えてくんで大変恐縮なのですが、質問させていただきます。

今、カーネルの2.4.18-3を2.4.22へ再構築しているのですが、
うまく再構築できません。
再構築したカーネルの起動中に、以下のメッセージで止まってしまいます。

kmod: failed to exec /sbin/modprobe -s -k block-major-8, errno = 2
VFS: Cannot open root device "802" or 08:02
Please append a correct "root=" boot option
kernel panic: VFS: Unable to mount root fs on 08:02

VFSの行にあるキーワードを頼りに調べてみたら、
どうやらrootデバイスの指定が間違っているとのことなのですが、
lilo.confで新しいカーネルで指定しているのは
古いカーネルが指定しているrootデバイスと同じ場所です。
あとはSCSI接続しているHDDに入れているので
mkinitrdをしなければいけないところをしていないからという可能性も
あるのですが、以下のコマンドをやってもエラーが出てしまいます。

# /sbin/mkinitrd /boot/initrd-2.4.22 2.4.22
No module aic7xxx found for kernel 2.4.22

ちなみに、lsmodでaic7xxx はしっかりと組み込まれているのを
確認済です。

何が原因のエラーでどうすれば良いのか、わかる方がいらっしゃいましたら
ぜひアドバイスをお願い致します。

参考として、カーネル再構築時に行ったことを列挙しておきます。


1) ftpサイトから入手したlinux-2.4.22のtarボールを/usr/src 以下に展開
# tar zxfv linux-2.4.22.tar.gz

2) 設定の変更
# make mrproper
# make menuconfig
----------------------------------------------------------------------
<編集内容>
----------------------------------------------------------------------

[Main Menu]-[Character Devices]
/dev/agpgart (AGP Support): (旧)y → (新) M 

----------------------------------------------------------------------  
   
これ以外は変更していません。

3) カーネルのコンパイルとモジュールのインストール
   # make dep
# make clean
# make bzImage
# make modules
# make modules_install

4) コンパイルしたイメージ等を/boot以下にコピー
   # cp /usr/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22
# cp /usr/src/linux-2.4.22/System.map /boot/System.map-2.4.22
# ln -sf /boot/System.map-2.4.22 /boot/System.map

5) lilo.confを編集しliloを実行
----------------------------------------------------------------------
   <編集内容>
----------------------------------------------------------------------

   bootboot=/dev/sda
   map=/boot/map
   install=/boot/boot.b
   prompt
   timeout=50
   message=/boot/message
   lba32
   default=linux

   image=/boot/vmlinuz-2.4.22
  label=linux-2.4.22
  initrd=/boot/initrd
  read-only
  root=/dev/sda2
   image=/boot/vmlinuz
  label=linux
  initrd=/boot/initrd
  read-only
  root=/dev/sda2

----------------------------------------------------------------------

# /sbin/lilo

6) リブート

7) カーネルの選択時にラベル”linux-2.4.22”を選択
   → 前述箇所にて処理が中断され、起動失敗

   ※ 再度リブートしたときに linux を選択するとkernel-2.4.18-3 が正常に起動します。


※参考資料)

# df -k
 /dev/sda2 6040320 3709544 2023936 65% /
/dev/sda1 62193 10807 48175 19% /boot
/dev/sda3 1707700 1228148 392804 76% /home
/dev/sda4 932912 102072 783452 12% /var

 # lsmod
Module Size Used by Not tainted
e100 70232 1 (autoclean)
st 25844 0 (unused)
usb-uhci 20996 0 (unused)
usbcore 56224 1 [usb-uhci]
aic7xxx 105808 4


以上、よろしくお願いいたします。
Marionette
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 70
投稿日時: 2003-08-31 18:10
>ちなみに、lsmodでaic7xxx はしっかりと組み込まれているのを
>確認済です。

kernel 2.2.18で確認出来てもしょうがないです。

正しいrootデバイスを指定しろと表示されるのは、scsiディスクが認識されないためだと
思います。
/lib/modules/2.4.22/kernel/drivers/scsi/aic7xxx.oはちゃんとありますか?
まずそれを確認してからですね。
rrru
常連さん
会議室デビュー日: 2003/04/21
投稿数: 28
投稿日時: 2003-08-31 23:22
>[Main Menu]-[Character Devices]
>/dev/agpgart (AGP Support): (旧)y → (新) M 
>
>----------------------------------------------------------------------  
>   
>これ以外は変更していません。

どう考えてもこれだけの変更でログイン画面まで行くとは思えません。
デフォルトで組み込まれるモジュールは殆ど無いはずですから。。。
最低限 lsmod で組み込まれるモジュールは選択するべきです。

># /sbin/mkinitrd /boot/initrd-2.4.22 2.4.22
>No module aic7xxx found for kernel 2.4.22
>
>ちなみに、lsmodでaic7xxx はしっかりと組み込まれているのを
>確認済です。

これはmake menuconfigでaic7xxxを選択していないためだと思われます。

aic7xxx なら SCSI low-level drivers の Adaptec AIC7xxx support

を選択しなければモジュールとして組み込まれるわけがありません。

それから initrd を使うなら

RAM disk support で Initial RAMdisk(initrd)support を選択しないと

このようにカーネルの再構築をするなら、ハードウェア構成や使用されてる
チップセット、使用したい機能等を把握して選択していかないと
いつまでたってもログイン画面にはたどり着けません。
/proc 下を調べるか直接見たりしてとにかく情報を集めましょう。
選択するものは逐一HELPを見れば分かるはずです。

それから initrd ですが

> label=linux-2.4.22
>  initrd=/boot/initrd
>  read-only
>  root=/dev/sda2
>   image=/boot/vmlinuz
>  label=linux
>  initrd=/boot/initrd

異なるカーネルで同じinitrd を使用してもダメだと思います、稀に
マイナーチェンジしたカーネルなら使える場合もあるらしいですがこのケースでは無理ですね。

カーネル再構築はとても地味な作業です、納得がいくまで頑張ってください。

[ メッセージ編集済み 編集者: rrru 編集日時 2003-08-31 23:26 ]
Tt
常連さん
会議室デビュー日: 2003/04/02
投稿数: 42
投稿日時: 2003-09-01 19:43
アドバイスありがとうございます。
さっそくモジュールの設定をし、initrd も専用のものをmkinitrdにて
作成しました。その際、やはり以前と同様のエラーが起きて
うまくいかなかったのですが、あるページを参照して/etc/module.conf内の

alias scsi_hostadapter aic7xxx

をコメントアウトしたら、無事にinitrdが作成できました。
新しいカーネルの起動もうまくいきました。
本当にありがとうございました。

ところで、ちょっと疑問に思ったのが、
上にあるコメントアウトしたことによるmkinitrdの成功はなぜなのでしょうか。
というより、なぜその行のせいで失敗していたのでしょうか。。。

1

スキルアップ/キャリアアップ(JOB@IT)