Linux内核升级总结。

一、编译内核步骤
1、#uname
–r 确定系统的原内核版本,然后下载较新版本的Linux内核源码包
http://www.kernel.org/pub/linux/kernel/v2.6/,版本跨度不要太大,至少大版本应该是相同的,比如都是2.6.xx.xx,下面以内核文件linux-2.6.36.tar.bz2为例进行说明。

2、将下载好的内核源码包放到/usr/src目录下,解压文件,得到linux-2.6.36目录

#cp linux-2.6..tar.bz2 /usr/src
#cd /usr/src
#tar xjvf linux-2.6..tar.bz2

3、进入linux-2.6.36目录,并将原内核配置文件复制到该目录,并重命名为.config

#cd linux-2.6.
#cp /boot/config-linux-2.6..15PAE .config

4、执行make menuconfig,首先选择“Load an Alternative Configuration File”找到.config文件载入原来的内核配置,然后在原配置基础上修改成新内核的配置,make menuconfig配置内核编译选项时,应该在general setup里选择兼容老版本程序的名字空间编译选项,还有一个是,在内核源码包里的配置文件 ./config文件 中有个选项是CONFIG_SYSFS_DEPRECATED_V2 要设置为y。最后选择“Save an Alternative Configuration File”保存配置。

在配置内核时,选项前面是[*]表示直接将该功能或驱动编译到内核(build-in),[M]表示把该项功能或驱动编译成可加载的模块(module),[ ]表示不启用该功能。有些选项要么不启用 ,要么就只能选择[*],或者只能选择[M]。<Space>用于更改选项,<Enter>进入下一级选项,按两下<ESC>可返回上一级。

5、验证配置文件
#cat .config | grep xxx 看看相关参数是否已经打开

6、开始编译、安装

#make –jn (.6内核无需使用make dep和make bzImage命令,直接make就能编译。n为数字,代表同时编译的进程数,这样能加快编译速度,根据机器性能选择15-25之间即可)
#make modules
#make modules_install
#make install

7、内核升级完成,修改/boot/grub/grub.config,将新内核作为默认启动项

#cd /boot
#ll(可以看到在/boot下面新生成了名为initrd-2.6..img的内核镜像文件)
#vim grub/grub.config

二、新内核引导报错的解决方法
问题一:
找不到文件系统,提示Volume
group "VolGroup00" not found;

有两种可能的原因:
A、initrd是旧版本mkinitrd生成的。
解决方法:加入对旧版sysfs路径的支持,通过make
menuconfig配置内核时选中以下选项:
General setup -->[*] enable deprecated sysfs features to support old
userspace tools
保存后验证.config文件中是否有以下内容:
CONFIG_SYSFS_DEPRECATED_V2=y

修改这项是因为旧版的mkinitrd及其nash在内核没有CONFIG_SYSFS_DEPRECATED_V2参数时默认使用旧版sysfs路径格式,从而在新内核下无法正确访问/sys内的硬盘信息节点。

B、新内核中没有当前Raid卡的驱动。
解决方法:将Raid卡驱动编译到内核镜像中,具体步骤如下:
1、以Adaptec
6805 Raid卡为例,到官网下载Raid卡驱动程序的源代码文件:aacraid-linux-src-1.1.7-29100.tgz
2、解压源码RPM,并将驱动程序源代码复制到/usr/src/linux-2.6.36/drivers/scsi目录下

#cp aacraid-1.1.-.src.rpm /tmp
#cd /tmp
#rpm2cpio aacraid-1.1.-.src.rpm | cpio -iuvd
#mkdir aacraid
#mv aacraid_source.tgz aacraid
#cd aacraid
#tar xzvf aacraid_source.tgz
#rm -f aacraid_source.tar
#cd ..
#cp –r aacraid /usr/src/linux-2.6./drivers/scsi (提示覆盖文件时选yes)

3、重新编译内核,注意以下选项一定要选上:
select the Device Drivers -> SCSI device support -> SCSI low-level
drivers -> Adaptec AACRAID support

关于重新编译内核
以上两种可能的原因在解决的时候都需要重新编译内核,内核源码是可以重复编译的,只不过在重新编译之前,先清除没用的文件。

#cd /usr/src/linux-2.6.
#make mrproper
#make menuconfig

以下就是正常编译步骤了...

问题二:
insmod: error inserting ‘/lib/dm-region-hash.ko’: –1 File exits
这是由于initrd文件里面的init文件在加载dm-region-hash.ko这个模块时重复了,因此需要修改新生成的内核镜像文件,步骤如下:
1、解压initrd

# cp /boot/initrd-2.6..img /tmp
# cd /tmp/
# mkdir newinitrd
# cd newinitrd/
# zcat ../initrd-2.6..img | cpio -i
# ls
bin dev etc init lib proc sbin sys sysroot

2、编辑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

3、重新打包initrd

# find . | cpio -c -o > ../initrd
# cd ..
# gzip - < initrd > initrd-2.6..img

4、将initrd重新复制到/boot目录下

# cp initrd-2.6..img /boot

5、重启服务器

注意:在编辑init文件时,一定要删除后面的重复项,不要删除前面的,否则重启引导时会提示insmod: error insering '/lib/dm-mirror.ko -1 Unknow symbol in module

问题三:

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

Kernel panic – not syncing : Attempted to kill init!

原因有两个,一个是新内核名字空间不兼容问题,解决方法是make menuconfig配置内核编译选项时,应该在general setup里选择兼容老版本程序的名字空间编译选项,还有一个是,在内核源码包里的配置文件 ./config文件中有个选项是CONFIG_SYSFS_DEPRECATED_V2 要设置为y。

Linux升级内核总结的更多相关文章

  1. Linux 升级内核开启 TCP BBR 有多大好处

    前言 如果你有订阅一些科技新闻,应该会有看过内核在4.9当中加入了一个新的算法,来解决在有一定的丢包率的情况下的带宽稳定的问题,这个是谷歌为我们带来的干货,新的 TCP 拥塞控制算法 BBR (Bot ...

  2. Linux升级内核教程(CentOS7)

    1.查看当前内核版本 uname -r 2.通过yum升级内核 通过yum升级内核是最保险的升级方式,因为安装的是操作系统发行厂商验证过兼容性的rpm包,升级风险一般很小. yum install - ...

  3. CentOS Linux 升级内核步骤和方法(转)

    当前系统为CentOS Linux release 6.0 (Final),内核版本为2.6.32-71.el6.i686.由于最近内核出现最新的漏洞(linux kernel 又爆内存提权漏洞,2. ...

  4. RedHat Linux升级内核

    操作系统:Red Hat 6.4 内核文件:linux-3.10.1.tar.gz  https://www.cnblogs.com/cherish-sweet/p/newyum.html uname ...

  5. centos6.5中 linux 升级内核

    需要使用安装docker ,但是docker 需要版本在3.1及以上.但是虚拟机的是2.6所以需要升级 记录以下升级的时候报错以及解决的办法 遇到的错误有: 1.出现curl: (35) SSL co ...

  6. linux升级内核

  7. CentOS6.5升级内核到3.10.28 --已验证

    本文适用于CentOS 6.4, CentOS 6.5,估计也适用于其他Linux发行版. 1. 准备工作 确认内核及版本信息 [root@hostname ~]# uname -r 2.6.32-2 ...

  8. CentOS 6.5 升级内核到 3.10.28

    本文适用于CentOS 6.4, CentOS 6.5,亲测可行,估计也适用于其他Linux发行版. 1. 准备工作 1.1 下载源码包 Linux内核版本有两种:稳定版和开发版 ,Linux内核版本 ...

  9. centos 6.5 升级内核 linux 3.12.17 (笔记 实测)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-mi ...

随机推荐

  1. 设计模式之——Builder建造模式

    Builder模式又叫建造模式,是用于组装具有复杂结构的实例的模式. 示例程序是编写一个文档,并且写入到文件中,该文档具有以下结构,含有标题,字符串,一些条目. Builder抽象类,为建造模式的核心 ...

  2. MySQL - 查询今天的数据(以及昨天、本月、上个月、今年...) 查询Datetime 时间的数据

    1,查询当天(今天)的数据 1 SELECT * FROM `order` WHERE TO_DAYS(order_time) = TO_DAYS(NOW()) 2,查询昨天的数据 1 SELECT  ...

  3. error: https://packages.elastic.co/GPG-KEY-elasticsearch: import read failed(2).

    安装filebeat报错: curl: (35) SSL connect errorerror: https://packages.elastic.co/GPG-KEY-elasticsearch: ...

  4. MySQL 最基本的SQL语法/语句

    DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOK ...

  5. java实现简单的数据库的增删查改,并布局交互界面

        一.系统简介 1.1.简介  本系统提供了学生信息管理中常见的基本功能,主要包括管理员.管理员的主要功能有对学生信息进行增加.删除.修改.查找等操作,对信息进行管理,对信息进行修改.查找等操作 ...

  6. 010-Shell 输入/输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

  7. PAT 1136 A Delayed Palindrome[简单]

    1136 A Delayed Palindrome (20 分) Consider a positive integer N written in standard notation with k+1 ...

  8. Xcode控制台命令

    命令 解释 break NUM 在指定的行上设置断点 bt 显示所有的调用栈帧,该命令可用来显示函数的调用顺序 clear 删除设置在特定源文件.特定行上的断点,其用法为:clear FILENAME ...

  9. Flask之flask-script模块使用

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  10. Django-RestFrameWork之分页 视图 路由 渲染器

    目录 一.分页 二.视图 三.路由 四.渲染器 一.分页 试问如果当数据量特别大的时候,你是怎么解决分页的? 方式a.记录当前访问页数的数据id 方式b.最多显示120页等 方式c.只显示上一页,下一 ...