Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3750562
  • 博文数量: 880
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 6155
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-11 09:12
个人简介

To be a better coder

文章分类

全部博文(880)

文章存档

2022年(5)

2021年(60)

2020年(175)

2019年(207)

2018年(210)

2017年(142)

2016年(81)

分类: LINUX

2018-01-08 10:41:33

Linux内核在线升级

准备工作

1 查看Linux内核发行版本的命令

  • uname -a
  • cat /etc/issue
  • cat /proc/version

2 Linux内核版本介绍

Linux内核版本有两种,即稳定版和开发版,版本号由3个数字组成,r.x.y

  • r:表示主版本号
  • x:次版本号,奇数表示开发中的版本,偶数表示稳定版本;
  • y:修订版本号,表示修改的次数

上有stable、longterm邓版本,longterm是比stable更稳定的版本,会长时间更新。

3 获取Linux内核

本文实验平台为CentOS 5.5 内核版本为2.6.18,欲升级到2.6.32.69。 
在Linux内核主页()下载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 install2

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,升级成功

参考链接

 
2 CentOS 6.5 升级内核到 3.10.28 
 
 
 
6 centos内核升级文档

阅读(468) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~