1. 程式人生 > >Ubuntu10.04 編譯並安裝Linux 內核2.6.32.60版本及錯誤解決。

Ubuntu10.04 編譯並安裝Linux 內核2.6.32.60版本及錯誤解決。

fdisk命令 prop 這一 boot 虛擬 相關 uuid 電源 linux分區

本文主要是寫給內核學習新手的,主要是在VMWare虛擬機上進行操作。

首先安裝對應版本的編譯工具鏈。

下面進行編譯和安裝。

1.首先解壓源碼。

2.使用cp命令把解壓之後的源碼復制到 /usr/src目錄中 例如:cp -r linux-2.6.32.60 /usr/src/

======================================

註:如果是首次編譯內核,無需執行上面1,2但是需要在內核源碼目錄下執行make mrproper命令來刪除之前已編譯的.o和.config文件。

======================================

3.使用su命令切換到root用戶,cd到/usr/src/中的內核源碼目錄下。

4.把本機的 /usr/src/本機內核版本/ 目錄下的.config文件復制到 /usr/src/要編譯的內核版本 目錄下,例如在我的機器上命令是:cp /usr/src/linux-headers-2.6.32-21/.config /usr/src/linux-2.6.32.60 。

5.make oldconfig。這條命令首先讀取剛才拷貝的.config文件,然後會詢問一些新的內核特性是否編譯,對於新手來說一直按回車鍵就可以了。

6.make bzImage,開始編譯內核

7.make modules,開始編譯模塊。

8.make modules_install,安裝內核模塊

9.make install,安裝內核

10.執行update-initramfs -c -k 內核版本號,例如在我的機器上就是:update-initramfs -c -k 2.6.32.60,這個命令十分重要。

11.拷貝編譯出的內核壓縮文件bzImage 到boot目錄下,命名為vmlinuz-內核版本號, 例如在我的機器上是這樣操作的: cp /usr/src/linux-2.6.32.60/arch/i386/boot/bzImage /boot/vmlinuz-2.6.32.60

12.執行update-grub和update-grub命令更新引導文件。

13.reboot

==================================================

二.編譯過程出現的問題

安裝內核重啟之後加載新內核很可能出現問題從而無法啟動,這裏說一種方法用來加載原來的內核。

這裏直說使用VMWare虛擬機的方法。

1.首先點擊 虛擬機-電源-打開電源時進入固件,這樣我們就可以進入BIOS了。在BIOS中選擇BOOT選項,將CD-ROM作為第一啟動項,然後CTRL+F10進行保存重啟。

2.進入Ubuntu安裝盤,不選擇安裝,選擇try Ubuntu,這樣就進入Ubuntu試用版系統了。

3.進入系統之後首先使用sudo passwd對Root密碼進行設置,然後切換到ROOT用戶。

4.使用fdisk -l 命令查看你的 boot分區在哪個硬盤上,我的是在/dev/sda1上面。(註意,如果你安裝系統的時候沒有進行進行分區,那麽fdisk命令顯示的Linux分區就包含boot)。

5.掛載boot分區到自己創建的目錄,例如在我的電腦上使用的命令是 mkdir mydir && mount /dev/sda1 mydir,之後cd到mydir 目錄就是在boot分區了。

我們主要編輯 /boot/grub/grub.cfg文件,把所有關新內核的配置刪除,例如我的機器上需要刪除

menuentry ‘Ubuntu, with Linux 2.6.32.60‘ --class ubuntu --class gnu-linux --class gnu --class os {
  ..........

}

所有帶有2.6.32.60的menuentry 塊都需要刪除。

刪除之後,保存文件,重啟機器,修改BIOS的BOOT為硬盤啟動。

(註:網上還有一種修改grub.cfg的set default="0"的方法,但是在我的機器上沒有起作用)。

錯誤:Kernel Panic - not syncing :VFS: Unable to mount root fs on unknown-block(0,0)

沒辦法掛載root,解決辦法,在所有新內核相關的menuentry塊中添加“initrd /boot/initrd.img-內核版本號”這一句。

例如在我的機器上,添加initrd /boot/initrd.img-2.6.32.60,

menuentry ‘Ubuntu, with Linux 2.6.32.60.kid‘ --class ubuntu --class gnu-linux --class gnu --class os {
  recordfail
  insmod ext2
  set root=‘(hd0,1)‘
  search --no-floppy --fs-uuid --set b3b4f2e3-fb0d-4151-97ab-f73c88ab2742
  linux /boot/vmlinuz-2.6.32.60 root=/dev/sda1 ro quiet splash

  initrd /boot/initrd.img-2.6.32.60

}

關於initrd的問題可以參考鳥哥的Linux私房菜第二十章。

本文參考鏈接:

  http://blog.sina.com.cn/s/blog_4ba5b45e0102e7nk.html

  http://blog.csdn.net/zufeng_chen/article/details/5824544

Ubuntu10.04 編譯並安裝Linux 內核2.6.32.60版本及錯誤解決。