• Linux升级内核总结


    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.36.tar.bz2 /usr/src
    #cd /usr/src
    #tar xjvf linux-2.6.36.tar.bz2

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

    #cd linux-2.6.36
    #cp /boot/config-linux-2.6.18.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 (2.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.36.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.7-29100.src.rpm /tmp
    #cd /tmp
    #rpm2cpio aacraid-1.1.7-29100.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.36/drivers/scsi (提示覆盖文件时选yes)

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

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

    #cd /usr/src/linux-2.6.36
    #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.36.img /tmp
    # cd /tmp/
    # mkdir newinitrd
    # cd newinitrd/
    # zcat ../initrd-2.6.36.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 -9 < initrd > initrd-2.6.36.img

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

    # cp initrd-2.6.36.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。

     

  • 相关阅读:
    arduino电子艺术PWM直流电机电调实验
    横坐标轴移动位置
    将不才则三军倾
    Source Insight常用快捷键及注释快捷键设置
    dos2unix批量转换的脚本
    win8: ListView
    win8: Asynchronous Programming in JavaScript with “Promises”
    WindJS 中的$await
    iphone:关于沙盒 存储路径
    win8: hello gril
  • 原文地址:https://www.cnblogs.com/zqwang0929/p/3414886.html
Copyright © 2020-2023  润新知