升级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内核升级文档

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值