升级Linux内核
Linux内核在线升级
准备工作
1 查看Linux内核发行版本的命令
uname -a
cat /etc/issue
cat /proc/version
2 Linux内核版本介绍
Linux内核版本有两种,即稳定版和开发版,版本号由3个数字组成,r.x.y
- r:表示主版本号
- x:次版本号,奇数表示开发中的版本,偶数表示稳定版本;
- y:修订版本号,表示修改的次数
Linux内核主页上有stable、longterm邓版本,longterm是比stable更稳定的版本,会长时间更新。
3 获取Linux内核
本文实验平台为CentOS 5.5 内核版本为2.6.18,欲升级到2.6.32.69。
在Linux内核主页(http://www.kernel.org)下载Linux内核,
wget https://cdn.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/linux-2.6.32.69.tar.xz --no-check-certificate
//添加--no-check-certificate,否则可能出现证书解析错误
4 安装编译内核所需要的软件
yum grouplist // 查看已经安装和未安装的软件包组,以判断是否要安装相应的开发环境和开发库;
yum groupinstall "Development Tools" //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具
yum install ncurses-devel //使make *config命令可执行
yum install qt-devel //如果你没有 X 环境,这一条可以不用
升级Linux内核
1 产生一个内核配置文件
//xz 的文件解压比较特殊,需要先用xz解压成rar文件后,再使用tar解压
xz -d linux-2.6.32.69.tar.xz //解压*.tar.xz ,若无xz,需要先安装,yum -y xz
tar -xvf linux-2.6.32.69.tar //解压*.tar
cd linux-2.6.32.69
make menuconfig // 图形化的
若依然使用之前的内核配置,使用如下命令即可。
make oldconfig // 使用当前内核的配置
结果如下:
ripts/kconfig/conf -o arch/x86/Kconfig
#
# configuration written to .config
#
但该过程中,你可能仍然需要手动设置新的配置,直接“回车”选择默认即可。你也可以不手动配置,并接受默认配置,执行以下命令即可,
sh -c 'yes "" | make oldconfig' //使用当前内核的配置,新配置,使用默认
上述步骤执行完成后会生成一个.config文件,即编译内核所需要的配置文件。编辑生成的 .config 文件,将CONFIG_SYSFS_DEPRECATED_V2 改成CONFIG_SYSFS_DEPRECATED_V2=y,否则会出现“Kernel panic – not syncing: Attempted to kill init!”的错误。
2 编译并安装内核
make // 编译过程大约需要半个小时
make modules_install install
3 修改Grub引导顺序
vim /etc/grub.conf
或者
vim /boot/grub/grub.conf
升级内核之前/boot/grub/grub.conf
的内容
升级内核之后/boot/grub/grub.conf
的内容
4 重启 reboot
或者 init 6
可能出现的错误如下:
错误1:Kernel panic – not syncing: Attempted to kill init!
mount: could not find filesystem ‘/dev/root’
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic – not syncing: Attempted to kill init!
解决方法:将config文件中原本被注释掉的CONFIG_SYSFS_DEPRECATED_V2 改成CONFIG_SYSFS_DEPRECATED_V2=y
原因: 修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。主要是解决”mount:could not find filesystem ‘/dev/root’”这样的错误。
错误2:insmod: error inserting ‘/lib/dm-region-hash.ko’ : -1 File exists
// 解压initrd文件
cp initrd-2.6.32.69.img /tmp
cd /tmp/
mkdir newinit
cd newinit/
zcat ../initrd-2.6.32.69.img | cpio -i
// 编辑init
vim init
注释掉下面四行:
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
//重新打包initrd
find .|cpio -c -o > ../initrd
cd ..
gzip -9 < initrd > initrd-2.6.32.69-new.img
cd /boot/
mv initrd-2.6.32.69.img initrd-2.6.32.69.img.bak
mv /tmp/initrd-2.6.32.69-new.img initrd-2.6.32.69.img
*说明:出现错误2时,系统仍然可以启动,但会出现“insmod: error inserting ‘/lib/dm-region-hash.ko’ : -1 File exists” 的提示,通过上述配置可以将错误提示去除掉。
5 查看内核版本 uname -r
,升级成功
参考链接
1 How to upgrade the kernel on CentOS
2 CentOS 6.5 升级内核到 3.10.28
3 centos5.5简单内核升级
4 What does “make oldconfig” do exactly in the Linux kernel makefile?
5 Linux内核升级方法详解
6 centos内核升级文档
更多推荐
所有评论(0)