To be a better coder
分类: LINUX
2018-01-08 10:41:33
Linux内核版本有两种,即稳定版和开发版,版本号由3个数字组成,r.x.y
上有stable、longterm邓版本,longterm是比stable更稳定的版本,会长时间更新。
本文实验平台为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,否则可能出现证书解析错误
yum grouplist // 查看已经安装和未安装的软件包组,以判断是否要安装相应的开发环境和开发库; yum groupinstall "Development Tools" //一般是安装这两个软件包组,这样做会确定你拥有编译时所需的一切工具 yum install ncurses-devel //使make *config命令可执行 yum install qt-devel //如果你没有 X 环境,这一条可以不用
//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!”的错误。
make // 编译过程大约需要半个小时 make modules_install install2
vim /etc/grub.conf 或者
vim /boot/grub/grub.conf
升级内核之前/boot/grub/grub.conf的内容
升级内核之后/boot/grub/grub.conf的内容
可能出现的错误如下:
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’”这样的错误。
// 解压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” 的提示,通过上述配置可以将错误提示去除掉。