分享

linux 5.4 redhat 2.6.18 升级到 3.9.6

 sven_ 2014-04-17

我使用的是64位的redhat 5.4  版本是2.6.18系统

一 准备工作(下载内核升级工具及内核源码)

    1.下载linux-3.9.6源码。地址是:http://www./pub/linux/mips/kernel/v3.x/

    2.下载module-init-tools。(我使用的是module-init-tools-3.10.tar.bz2,下载地址:https://www./pub/linux/utils/kernel/module-init-tools/

    3.lvm2-2.02.46-8.el5.x86_64.rpm;

       mkinitrd-5.1.19.6-54.x86_64.rpm;

       device-mapper-1.02.32-1.el5.x86_64.rpm(这三个可以在你光盘的server文件下面找到)

二 配置工作

    1.将下载好的内核源代码和工具都放到/usr/src文件夹下。

    2.拷贝完毕,开始解压新内核,具体操作请依次执行以下命令;

      # cd /usr/src(进入/usr/src目录,如果已经在/usr/src目录,可不执行该命令)

      # rm –rf linux(删除linux文件夹,如果内核以前从未编译过,则没有这个文件夹,可不执行该命令)

     # tar jvxf linux-3.9.6.tar.bz2(解压新内核)

     # ln -s linux-3.9.6linux(重新生成linux文件夹)

3.安装module-init-tools工具,在/usr/src目录下,依次执行下列命令;

# tar jvxf module-init-tools-3.10.tar.bz2(解压module-init-tools)

# cd module-init-tools-3.10(由/usr/src目录进入module-init-tools目录)

#./configure--prefix=/

# make moveold

# make allinstall

#./generate-modprobe.conf/etc/modprobe.conf

 

4.安装另外三个升级工具,回到/usr/src目录下,依次执行下列命令;

# rpm -ivh--nodeps mkinitrd-4.1.18-2.i386.rpm

# rpm -ivh--nodeps lvm2-2.00.25-1.01.i386.rpm

# rpm -ivh--nodeps device-mapper-1.00.19-2.i386.rpm

如果不更新以上几个升级包,后面编译内核时会提示以下错误;

  mkinitrd failed

  make[1]; *** [install] Error 1

  make; *** [install] Error 2

5. 配置内核选项

# cdlinux-2.6.18(进入/usr/src/linux-2.6.18目录)

# makemrproper(确保源代码目录下没有不正确的.o文件)

#make menuconfig(配置内核选项,这里我使用的是以前的配置文件,命令是 :


cp/boot/config-2.6.18-164.el5 ./.config,然后输入命令makemenuconfig选择load文件:.config) 

此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,可以用方向键选择,用Y键确定,大多数选项默认就行,以下几个选项必须选择(这里必须认真选择不然会出错。编译也就不能成功)

(1) Loadable Module support中选上"Moduleunloading"和"Automatic kernel module loading"

(2) Device Drivers--->Block Devices中选上"Loopbackdevice support";

   DeviceDrivers--->Multi-device support(RAID and LVM)中选上"devicemapper  support";

   DeviceDrivers--->Graphics support中选上"Support for frame buffer devices";

   Device Drivers--->USBsupport中选上"USB Mass Storage support"(先将该项依赖项设为y,如果是在实环境中,想要更多USB支持,就全选上);

   DeviceDrivers--->Network device support--->Ethernet(10 or

   100Mbit)中选上"AMDPCnet32 PCI support"(这里在3.9.6的版本里面选项是

Ethernet driver support---> AMD PCnet32 PCI support)

Device Drivers--> SCSI device support --> SCSCI low-level drivers --> [M] Serial ATA(SATA) support --> [M] Intel PIIX/ICH SATA support(这个没找到,没选)

 

如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:

   DeviceDrivers---><*>SCSI device support

   DeviceDrivers---><*>SCSI device support---><*>SCSI disk support

   DeviceDrivers---><*>SCSI device support--->SCSI low-leveldrivers---><*>BusLogic SCSI support

Device Drivers  --->;Fusion MPT device support  --->;;Fusion MPT (base + ScsiHost) drivers; Fusion MPT misc device (ioctl) driver(这个要不要,不确定)

 

 

(3)File system--->

           Second extended fs support

           Ext2 extended attributes

           Ext2 POSIX Access Control Lists

         Ext2 Security Labels

           Ext3 journalling file system support

           Ext3 extended attributes

           Ext3 POSIX Access Control Lists

           Ext3 Security Labels

           JBD (ext3) debugging support

   File system--->DOS/FAT/NT Filesystems中选上"NTFSfile system support"

注意:

          ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机器就会当掉,出现如下错误信息:

          kernel panic no init found ,trypassing init = option to kernel

或者是:

          VFS Cannot open root device"hdxy" or unknow-block(0,0)

          Please append a correct"root=" boot option

          kernel panic VFS Unable to mount rootfs on unknown-block(0,0)

或者是:

          mount error 19 mounting ext3

          pivotroot;pivot_root(/sysroot,/sysroot/initrd) failed 2

          umount /initrd/proc fail 2

          Freeing unused kernel memory 244kfreed

          Kernel panic – not syncing No initfound. Try passing init = option to kernel

 

 

三 编译工作

zcat ../initrd-2.6.30.4.img |cpio -i 11537blocks

 

1.在/usr/src/linux-2.6.18目录下,执行以下命令:

# make dep(建立编译时所需的从属文件,如果内核从未编译过,此步可跳过)

# make clean(清除内核编译的目标文件,如果内核从未编译过,此步可跳过)

# make bzImage(开始编译)

如果发生以下错误:


这里如果发生simples的错误遇到上面的错误直接更换头文件。参考地址是:http://ju./entry/6447

命令是:

[root@wangguan linux-3.9.6]# makeheaders_install

[root@wangguan linux-3.9.6]# cd /usr/include/

[root@wangguan include]# mv asm asm_orig

[root@wangguan include]#  mv linux linux_orig

[root@wangguan include]# mv asm-genericasm-generic_orig

[root@wangguan include]# cd/usr/src/linux-3.9.6

[root@wangguan linux-3.9.6]# cp -rusr/include/asm /usr/include/

[root@wangguan linux-3.9.6]#  cp -r usr/include/asm-generic/ /usr/include/

[root@wangguan linux-3.9.6]# cp -rusr/include/linux /usr/include/

内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage.如果用makezImage编译,内核很大的话,系统会提示你用make bzImage命令来编译make

# make modules(编译可加载模块)

这里可能发生的错误是:


fs/gfs2/rgrp.c: In function ‘rg_mblk_search’:

fs/gfs2/rgrp.c:1398: 编译器内部错误:段错误

请提交一份完整的错误报告,

如有可能请附上经预处理后的源文件。

具体步骤请参见<URL:http://bugzilla./bugzilla>。

Preprocessed source stored into /tmp/ccOsYE5A.out file, pleaseattach this to your bugreport.

make[2]: *** [fs/gfs2/rgrp.o] 错误 1

make[1]: *** [fs/gfs2] 错误 2

make: *** [fs] 错误 2


原因是在rgrp.c类中对有些构造体方法的变量赋值,初始化的错误。修改为:


-------------------------------------------------------------------

1395 static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip,

1396                unsigned requested)

1397 {

1398     //struct gfs2_rbm rbm = { .rgd = rgd, };

1399     struct gfs2_rbm rbm;

1400     rbm.rgd = rgd;



1642     //struct gfs2_rbm rbm = { .rgd = rgd, .bi = rgd->rd_bits, .offset = 0 };
1643     struct gfs2_rbm rbm;
1644     rbm.rgd = rgd;
1645     rbm.bi = rgd->rd_bits;
1646     rbm.offset = 0;


1943 static unsigned char gfs2_get_block_type(struct gfs2_rgrpd *rgd, u64 block)
1944 {
1945     //struct gfs2_rbm rbm = { .rgd = rgd, };
1946     struct gfs2_rbm rbm;
1947     rbm.rgd = rgd

1967 static void gfs2_alloc_extent(const struct gfs2_rbm *rbm, bool dinode,
1968                  unsigned int *n)
1969 {
1970     //struct gfs2_rbm pos = { .rgd = rbm->rgd, };
1971     struct gfs2_rbm pos;
1972     pos.rgd = rbm->rgd;


2125     //struct gfs2_rbm rbm = { .rgd = ip->i_rgd, };
2126     struct gfs2_rbm rbm;
2127     rbm.rgd = ip->i_rgd;



----------------------------------------------------------------------


 

双斜杠是注释掉原来的申明的方式,将赋值写出来。将涉及到struct gfs2_rbm rbm的申明赋值的方式都修改了(后面有好几个类似的错误)。(这个错误其实在更新完gcc版本后是不会出现的。由于太多人看帖子不发言我就不详细说明了。

# make modules_install(安装可加载模块)

安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块.

# make install(安装新内核)

注意:make install的时候可能会出现如下错误信息

    No module BusLogic found for kernel 2.4.12

    mkinitrd failed

此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内核的Buslogic模块即使静态编译进内核也不行).解决方式是直接将BusLogic.o文件复制过去:

# cp/usr/src/linux-2.6.18/drivers/scsi/BusLogic.o/lib/modules/2.6.18/kernel/drivers/scsi

复制过后再执行一下make install,这一步若卡住了,下面的都无法进行。

开机启动的时候如果发生以下错误:

insmod: error inserting '/lib/dm-region-hash.ko': -1 File exists

 

解决方法是:


1,解压initrd文件
[root@bogon ~]# cp /boot/initrd-3.9.6.img /tmp/
[root@bogon ~]# cd /tmp/
[root@bogon tmp]# ls
initrd-2.6.30.4.img
[root@bogon tmp]# mkdir newinitrd
[root@bogon tmp]# cd newinitrd/
[root@bogon newinitrd]# zcat ../ initrd-3.9.6.img |cpio -i
11537 blocks
释放之后看到如下内容
[root@bogon newinitrd]# 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
[root@bogon newinitrd]# find .|cpio -c -o > ../initrd
11538 blocks
[root@bogon newinitrd]# cd ..
[root@bogon tmp]# gzip -9 < initrd > initrd.img
[root@bogon tmp]# ls
initrd-2.6.30.4.img    initrd    initrd.img          newinitrd

好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改grub.conf里边的initrd-2.6.30.4.img为initrd.img就可以了,
这样“insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists” 就不会有了

 

Can’t open HIDP control……错误:

 

 

在配置的时候  make menuconfig   将蓝牙的设备加上:

Bluetooth subsystem support--->



iptables错误  这个错我找了很多的网站,包括翻墙。总算被解决了。


iptables -restore 不能初始化

ip6tables -restore 不能初始化 (这里字太多不想打) 


解决的方式说出来太多了  不想打字了,都没人回复。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多