首页 > 代码库 > 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版本及错误解决。