2011/09/17(Sat)CentOS 5.xで新しめのカスタムカーネルの起動に失敗する場合の対処法

2011/09/17 3:41 Software::Linux
カーネルコンフィグのメモ。
ちょっと古めのPentium 4を積んでいるP-ATA接続なマシンで*1カスタムカーネルを作ると、起動でコケることがあったので、そのコンフィグのメモ。

*1 : これは関係ないかも知れないが

環境

マシンはEpson DirectのEndeavor AT950.
ディストリビューションはCentOS 5.6.
カスタムカーネルは、linux-2.6.32.16を/boot/config-2.6.18-238.19.1.el5を元にmake oldconfigだけしてコンパイルしたもの。選択肢は全てデフォルトそのまま。

現象

いわゆるprocfsやらsysfsやらが認識できない系のトラブル。
Scanning and configuring dmraid supported devices
Creating root device.
Mounting root filesystem.
mount: could not find filesystem '/dev/root'
Setting up other filesystems.
Setting up new root fs
setuproot: moving /dev failed: No such file or directory
no fstab.sys, mounting internal defaults
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
Switching to new root and running init.
unmounting old /dev
unmounting old /proc
unmounting old /sys
switchroot: mount failed: No such file or directory
init used greatest stack depth: 2676 bytes left
Kernel panic - not syncing: Attemted to kill init!
Pid: 1, comm: init Not tainted 2.6.32.16-custom #1
Call Trace:
 [<c042ed81>] ? panic+0x3e/0xe5
 [<c0431631>] ? do_exit+0x5a/0x5c8
 [<c0431bf9>] ? do_group_exit+0x5a/0x7f
 [<c0431c2b>] ? sys_exit_group+0xd/0x10
 [<c04028c5>] ? syscall_call+0x7/0xb

解決方法

推奨されていないようだが、SYSFS_DEPRECATED_V2を有効にすると解決する。
Symbol: SYSFS_DEPRECATED_V2 [=n]
Prompt: enable deprecated sysfs features which may confuse old userspace tools
  Defined at init/Kconfig:608
  Depends on: SYSFS [=y]
  Location:
    -> General setup
  Selects: SYSFS_DEPRECATED [=n]
CentOS 5.xのような古いカーネルをベースに作られているディストリに新しめのカーネルを載せる時のように、新しいカーネルではObsoleteになった機能をuserlandが要求するということが有るので注意ということで。

別な現象 2011/09/28

kernelのブートパラメータでroot=UUID=xxxxxのように書いていると同じようになった事が。
root=/dev/sdaXのように書いたらOK.(要調査)

特殊なチップセットの場合に注意 2011/12/17

最近のチップセットは、専用のカーネルデバイスドライバを組み込まないと、内蔵HDD/SDDへアクセスできず、これと同じ現象に陥る事がある。
例えば、Intel US15W System Controller Hubを使っているONKYO TW217A5等では、Intel SCH PATA(CONFIG_PATA_SCH)というコンフィグを有効にする必要がある。
CONFIG_PATA_SCH:

This option enables support for Intel SCH PATA on the Intel
SCH (US15W, US15L, UL11L) series host controllers.

If unsure, say N.

Symbol: PATA_SCH [=m]
Type  : tristate
Prompt: Intel SCH PATA support
  Defined at drivers/ata/Kconfig:637
  Depends on: ATA [=y] && ATA_SFF [=y] && ATA_BMDMA [=y] && PCI [=y]
  Location:
    -> Device Drivers
      -> Serial ATA and Parallel ATA drivers (ATA [=y])
        -> ATA SFF support (ATA_SFF [=y])
          -> ATA BMDMA support (ATA_BMDMA [=y])
カーネル組み込み(=y)とした場合は特に必要ないが、カーネルモジュール(=m)とした場合はinitrdを作る段階で組み込みが必要。
#  mkinitrd --preload pata_sch /boot/initrd-2.6.32.16-custom.img 2.6.32.16-custom

参考文献

Building your own kernel based on CentOS, ‘switchroot: mount failed. Kernel Panic.’ ~ Mattias Geniar