博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将linux2.4.20内核升级到2.6.18.8并加载sctp模块
阅读量:5102 次
发布时间:2019-06-13

本文共 7378 字,大约阅读时间需要 24 分钟。

今天忙了一天终于搞好了,为了避免大家跟我一样走弯路,跟大家分享下,最近要用到sctp模块,而linux2.4.20内核不支持sctp只能将内核升级,我刚开始在虚拟机上将内核升级到linux2.6.24的,但是reboot后出现init[1]: segfault at 00000021 eip 00000021 esp bfaaa15c error 4…….也不太清楚是什么错误,进入不了linux系统,上网上查了下,说在虚拟机上貌似不支持linux2.6.23以后的内核,晕了,等于白忙,建议在虚拟机上升级内核的话,还是不要升级到linux2.6.24吧,于是就打算将内核升级到2.6.18.8 

如何升级,网上这位仁兄讲得蛮好的,其中有些问题我帮修改了点,嘿~下面介绍的步骤是升级2.6.24内核跟升级到2.6.18.8一样,只需改下载linux-2.6.18.8.tar.bz2,编译过程中如果出现S_IFSOCK没定义,就加上#define S_IFSOCK 0140000  

一、准备工作

首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。启动Linux系统,并用根用户登录,进入终端模式下。

1、查看Linux内核版本

# uname -a

如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。

2、下载2.6内核源码

下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2

3、下载内核升级工具

(1)下载module-init-tools-3.2.tar.bz2

http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2

(2)下载mkinitrd-4.1.18-2.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm

(3)下载lvm2-2.00.25-1.01.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm

(4)下载device-mapper-1.00.19-2.i386.rpm

http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm

二、配置工作

好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功的),下面回到Linux系统中开始配置工作吧。

4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。

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

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

# rm rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过)

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

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

6、安装module-init-tools工具

/usr/src目录下,依次执行下列命令:

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

# cd module-init-tools-3.2 (/usr/src目录进入module-init-tools目录下)

#./configure --prefix=/

# make moveold

# make all install

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

7、安装另外三个升级工具

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

# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入--nodeps参数,下同) # rpm -Uvh --nodeps mkinitrd-4.1.18-2.i386.rpm

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

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

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

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

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

mkinitrd failed

make[1]: *** [install] Error 1

make: *** [install] Error 2

8、配置内核选项。有点繁琐,~~希望一次成功哦。

# cd linux-2.6.24 (进入到/usr/src/linux-2.6.18目录下)

# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)

# make menuconfig (配置内核各选项)

此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃)

(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;

(2)Device Drivers--->Block Devices中选上“Loopback device support”;

Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;

Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”;

Device Drivers --->USB support --->选上“USB Mass Storage support(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)

Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32 PCI support

(3)File system--->(以下9个选项是关于ext2ext3文件系统配置,全部选上)

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

JBB (ext3) debugging support

File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;

注意:

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

kernel panic : no init found ,try passing 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 root fs 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: 244k freed

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

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

Device Drivers ---><*>SCSI device support (此项不选的话,下面两项就选择不上)

Device Drivers ---><*>SCSI device support ---><*>SCSI disk support

Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI support

三、编译工作

OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!

9、开始编译啦……

/usr/src/linux-2.6.24目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!

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

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

# make bzImage (注意大小写。这一步才是真正编译内核)

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

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

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

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

# 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。这一步若卡住了,下面的都无法进行。

四、启动新内核

10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:

# cp /usr/src/linux-2.6.24/arch/i386/boot/bzImage /boot/vmlinuz-2.6.24

# cp /usr/src/linux-2.6.24/System.map /boot/System.map-2.6.24

# cd /boot (进入boot目录)

# rm rf System.map (删除原来的连接)

# ln s System.map-2.6.24 System.map (重新建立连接)

11、修改Grub启动管理器

如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)

/boot目录下,执行以下命令:

# new-kernel-pkg --mkinitrd --depmod --install 2.6.24 (这时候你的/boot下会生成一个initrd-2.4.24.img,并且你的grub.conf文件也作了相应更改)

# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不时boot的那个50M的分区,而一般是你最大的那个分区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)

# vi /grub/grub.conf

进入grub.conf文件,找到如下信息:

default=1

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.6.24)

root (hd0,0)

kernel /vmlinuz-2.6.24 ro root= LABEL=/

initrd /initrd-2.6.24.img

做两处修改:

(1) default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)

(2) kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)

此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:

default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.6.24)

root (hd0,0)

kernel /vmlinuz-2.6.24 ro root=/dev/hda2

initrd /initrd-2.6.24.img

title Red Hat Linux (2.4.20-8)

root (hd0,0)

kernel /vmlinuz-2.4.20-8 ro root=LABEL=/

initrd /initrd-2.4.20-8.img

12OK,大功告成!赶快重启,看看升级后的2.6内核吧

我后来重新升级到2.6.18.8reboot 后选择linux2.6.18.8进入系统,这时候你会发现你的VMware Tools 你需要重新安装,内核改变,原来的用不起来了,包括网络也需要重新配置,我后来在安装rpm文件时发现rpm –ivh xxx.rpm 时总是出现问题,我想可能是rpm版本过低,打算升级rpm包的,但是安装升级包时总是出现问题,汗~大侠可以尝试安装下,我后来改了下rpm配置文件,发现ok了,开心哇,哈哈~

修改以下文件获得解决:

/usr/lib/rpm/macros
在里面寻找

代码:

%__dbi_cdb         create cdb mpool mp_mmapsize=16Mb mp_size=1Mb

修改成

代码:

%__dbi_cdb          create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private

接着就安装sctp模块

本来我是到sorceforge网站上下载 lksctp-tools-2.6.16-1.0.6,有五个文件。

* lksctp-tools-*1.0.6*-1.i386.rpm
lksctp-tools-*1.0.6*-devel-1.i386.rpm
lksctp-tools-*1.0.6*-doc-1.i386.rpm
lksctp-tools-1.0.6.tar.gz

lksctp-tools-1.0.6-1.src.rpm

2. 前3个文件直接用rpm -ivh 安装没有问题但是最后一个src.rpm文件要用rpmbuild --rebuild 命令安装时出现问题,出现好多错误和警告,本身代码是没有问题的,我想应该是我的系统环境的问题的吧,反正问题是很难解决的,晕倒~~后来在csdn上看到一位大侠的帖子,让我加载sctp成功了,呵呵~

很简单,就两步:

make CONFIG_IP_SCTP=m -C /usr/src/linux-2.6.28 M=/usr/src/linux-2.6.28/net/sctp modules

然后insmod sctp.kook了,太精辟了~

  
忙乎了一天,搞好了,遇到问题,走了不少弯路,供大家分享,希望对大家有用,哈哈
~

转载于:https://www.cnblogs.com/aixingfou/archive/2011/04/01/2002246.html

你可能感兴趣的文章
python装饰器的应用案例
查看>>
42:集合:
查看>>
编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)...
查看>>
Jmeter(四十七)_性能测试统计超时率
查看>>
使用SQLQuery 在Hibernate中使用sql语句
查看>>
孪生素数求解
查看>>
oracle自定义函数返回结果集
查看>>
虚函数 or 非虚函数
查看>>
获取ios设备信息
查看>>
ORACLE创建用户,建表空间,授予权限
查看>>
AC_Automata模板
查看>>
小峰servlet/jsp(2)
查看>>
LeetCode(8) - String to Integer (atoi)
查看>>
MultiThread
查看>>
gdi和gdi+并用
查看>>
web中缓存的几种方式
查看>>
AI金融知识自学偏量化方向-了解不同类型的机器学习2
查看>>
LoadRunner 测试脚本
查看>>
CSS初始化的原因
查看>>
分布式团队中沟通引发的问题, itest 解决之道
查看>>