首页 > 代码库 > Ubuntu10.04 编译并安装Linux 内核2.6.32.60版本及错误解决。

Ubuntu10.04 编译并安装Linux 内核2.6.32.60版本及错误解决。

本文主要是写给内核学习新手的,主要是在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版本及错误解决。