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

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

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

下面進行編譯和安裝。ubuntu

1.首先解壓源碼。工具

2.使用cp命令把解壓以後的源碼複製到 /usr/src目錄中 例如:cp -r linux-2.6.32.60  /usr/src/學習

======================================ui

注:若是是首次編譯內核,無需執行上面1,2可是須要在內核源碼目錄下執行make mrproper命令來刪除以前已編譯的.o和.config文件。.net

======================================htm

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

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

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

相關文章
相關標籤/搜索