作者 主題: 請問升級Kernel過程出現Kernel panic 該如何解決呢??  (閱讀 8019 次)

0 會員 與 1 訪客 正在閱讀本文。

jwtialbert

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
各位學長好,小弟最近在做kernel upgrade的練習,
目標是想要從2.6.18 升級到 2.6.30
在經過漫長的make …過程之後,我在/boot/grub/menu.lst中加入如下:

title CentOS 5 (2.6.30)
            root (hd0,0)
            kernel /vmlinuz-2.6.30 ro root=/dev/sda1
            initrd /initrd-2.6.30

其中 " root=/dev/sda1" 是用 df 與fdisk /dev/sda 確認過是boot所在
爾後,重開機,使用新的kernel

結果碰到如下訊息 :
=========================================
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
Kernel panic - not syncing: Attempted to kill init!
==============================================
在到處爬文之後,我使用下面的方式進grub測試
在grub選單時按C 進入command mode
grub > root (hd0,0)   --> 有正確顯示我的root filesystem 為ext3
grub > kernel (hd0,0)/vmlinuz-2.6.30 root=/dev/sda1   --> 找不到這個檔案??
但是如果我改下
grub > kernel (hd0,0)/boot/vmlinuz-2.6.30 root=/dev/sda1  --> 這樣就會成功找到!?

接下來
grub > initrd (hd0,0)/initrd-2.6.30.img     --> 找不到這個檔案??
同樣的改下
grub > initrd (hd0,0)/boot/initrd-2.6.30.img   --> 這樣就又找到了!?

小弟有試過重編kernel ,將google找到的一些文章中寫的mode也編成built-in ,結果也還是不行
此外,也試了2.6.29,也一樣不行

請各位學長能指點一下迷津 ~萬分感激

anderson1127

  • 訪客
引用
title Fedora Core (2.6.18-1.2798.fc6)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/
        initrd /boot/initrd-2.6.18-1.2798.fc6.img

上面是我的系統的default grub.conf 設定值 , 拿來與你的設定比較看看...
只是多了 /boot/ , 你要不要試試加上/boot試看看??

jwtialbert

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
謝謝學長指導

目前更換一部Server等級的機器再試一次,就可以很順利的使用2.6.30的kernel
過二天再來對PC再升級一次,個人猜想應該是某些東西不能用module的方式編譯,
必須built-in 進去才行  :(


TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
如果是 Hard disk 的 drivers 一點要編到 kernel 中,不能用 module!!
不然一開機就抓不到 HDD 啦!!

不知道 CentOS 的 /proc/config.gz 這個檔案嗎? 就是舊 kernel 的 config!!
可以利用舊 kernel 的 config 來套用到新 kernel 上,問題會比較少哦!!
--
TyroneYeh

rainday

  • 鑽研的研究生
  • *****
  • 文章數: 740
  • 性別: 男
  • enhancing and optimizing
    • 檢視個人資料
kernel要有enable config.gz , /proc底下才會有這檔案
在CentOS5.2也還沒變default enable , 我自己的 opensuse11倒是有看到

一般通常是先拿舊/boot/config-2.6.xx(這個跟/proc/config.gz是一樣的)來做為新kernel source裡的.config,再進入make menuconfig裡選功能,這樣就可以直接來compile
<0  =_=  Don't learn to hack , hack to learn.

jwtialbert

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
引用
title Fedora Core (2.6.18-1.2798.fc6)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18-1.2798.fc6 ro root=LABEL=/
        initrd /boot/initrd-2.6.18-1.2798.fc6.img

上面是我的系統的default grub.conf 設定值 , 拿來與你的設定比較看看...
只是多了 /boot/ , 你要不要試試加上/boot試看看??

學長您好~
我後來把menu.lst改成如下:
title CentOS 5 (2.6.30)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.30 ro root=/dev/sda1
            initrd /boot/initrd-2.6.30

只是重開機後,情況還是一樣沒有改善

anderson1127

  • 訪客
學長您好~
我後來把menu.lst改成如下:
title CentOS 5 (2.6.30)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.30 ro root=/dev/sda1
            initrd /boot/initrd-2.6.30

只是重開機後,情況還是一樣沒有改善

應該是 initrd-2.6.30.img   才對吧??

但話又說回來,你如何產生initrd-2.6.30.img   ?
又,你的HD是SATA 介面還是IDE介面 ??
如果你不是很懂initrd 這個檔案的產生,那我會建議你直接將SATA or IDE chip set的driver
直接納入kernel 裡,不要compile 成module !!

多試幾次吧.... 從失敗中學習來的經驗值最寶貴!!

jwtialbert

  • 憂鬱的高中生
  • ***
  • 文章數: 99
    • 檢視個人資料
學長您好~
我後來把menu.lst改成如下:
title CentOS 5 (2.6.30)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.30 ro root=/dev/sda1
            initrd /boot/initrd-2.6.30

只是重開機後,情況還是一樣沒有改善

應該是 initrd-2.6.30.img   才對吧??

但話又說回來,你如何產生initrd-2.6.30.img   ?
又,你的HD是SATA 介面還是IDE介面 ??
如果你不是很懂initrd 這個檔案的產生,那我會建議你直接將SATA or IDE chip set的driver
直接納入kernel 裡,不要compile 成module !!

多試幾次吧.... 從失敗中學習來的經驗值最寶貴!!

感謝學長指教
我是用以下指令產生的:
[root@localhost /usr/src/linux-2.6.30 ] #> mkinitrd /boot/initrd-2.6.30 2.6.30
至於HD是scsi

我會再試幾次看看,一定要想辦法成功,倒是真的也學到不少就是了 ^^

anderson1127

  • 訪客
感謝學長指教
我是用以下指令產生的:
[root@localhost /usr/src/linux-2.6.30 ] #> mkinitrd /boot/initrd-2.6.30 2.6.30
至於HD是scsi

我會再試幾次看看,一定要想辦法成功,倒是真的也學到不少就是了 ^^

SCSI的HD的話,那就請把SCSI chip driver 直接納入kernel 裡,另外也請注意
還有一些SCSI 相關的options 也一併納入 !!

一般人常常會搞不清楚SCSI chipset 是何種廠牌 , 如果不清楚廠牌名稱
請直接將SCSI 介面卡拔下,將chip 的名稱抄寫下來,去比對kernel裡的scsi chipset 名稱
我許久以前就曾玩過一些Symbios 53C875 chip 及AdvanSys SCSI chip
如果是on board SCSI則請去查看on board chip 名稱!!

PS: 這種options最近是玩到不想玩了...

acty

  • 鑽研的研究生
  • *****
  • 文章數: 694
    • 檢視個人資料
    • UNIX 管理者的學習紀錄
抄晶片名稱喔  我覺得比較簡單又正確的方法是

用救援光碟開機   下 lsmod 就知道系統載入哪些模組
(ps. 如果你已經搞到系統開不起來的話)

ex. lsmod | grep ata (ata 就包含 ata 及 sata)

至於要知道重編 kernel 時晶片名稱就可以打 lspci 就知道啦

只要注意一下  那些晶片  在後來 kernel 版本有沒有改名稱就好

像 r8169 , r8169 後來合併成 r8169,
    sky97lin 後來改成 skge 等等
« 上次編輯: 2009-07-12 02:00 由 acty »
~~破窗計畫來囉~~~

學習與挑戰是我的樂趣... HIT!!
我知道的不多  但歡迎大家以起來討論

UNIX 管理者的學習紀錄 - http://actychen.wordpress.com