科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux2.4升级到2.6内核升级指南

Linux2.4升级到2.6内核升级指南

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

linux-2.6.x内核发布后, 坛子里的兄弟们肯定都迫不及待地要升级原有的2.4.x内核. 但是由于与2.6.x内核配套的系统程序并没有相应的来得及更新, 升级过程会碰到很多问题, 因此觉得有必要把我的经验与大家share一下:-)

作者:ccidnet 来源:ccidnet 2007年10月18日

关键字: 指南 内核 升级 Linux

  • 评论
  • 分享微博
  • 分享邮件
[post] The Guide of Upgrading to linux kernel 2.6.x The Guide of Upgrading to linux kernel 2.6.x Z(<$UuX  
Cf'8C<(  
Author: Rongkai Zhan #Pd *O_`  
date: 2004-3-14 "c@##*]N#  
4}J,6YWhbr  
前言: linux-2.6.x内核发布后, 坛子里的兄弟们肯定都迫不及待地要升级原有的2.4.x内核. 但是由于与2.6.x内核配套的系统程序并没有相应的来得及更新, 升级过程会碰到很多问题, 因此觉得有必要把我的经验与大家share一下:-) XD们以后碰到类似问题时, 请先阅读本文, 而不要一上来就盲目发帖. 2S ypv-  
3a6I !S;*  
ps, you are welcome to fix me. >SsXEB  
w ?:g2 '  
1. 备份重要的数据 Hu$Y+7"Z  
hlb[zi$  
这是个好习惯,就不用多说了:-) @8I.y [f  
RZ*D %|w  
2. 下载最新的2.6.x内核源码包 h(g8^HKpsE  
9J XT2  
这个当然要到官方网站http://www.kernel.org或者它的mir...?去下载了, 最好别到那些unknown的网站去下, 因为那些源码包有可能被恶意做了手脚. 最新的linux-2.6.4.tar.bz2源码包大概有33M左右. 下载的时候可以泡杯coffee, 然后点根烟...... I]&h'Q4  
>+Rh?Sy  
在/usr/src/目录下解开源码包, 得到源代码目录/usr/src/linux-2.6.4/. 在对kernel做任何事情之前, 建议你先看一下它的README文件和Documentation/Changes文件, 从中你会得到不少有用的信息. 这些信息会让你在随后的升级过程避免很多不必要的麻烦. s '- wrG'l  
P Arw$Gr  
在文档Documentation/Changes中给出了欲成功地升级到kernel-2.6.x所需的最小系统软件要求, 比如对于kernel-2.6.4是这样的: 4NK>Wecu  
d2m'fD  
o Gnu C 2.95.3 # gcc --version GqN>tx  
o Gnu make 3.79.1 # make --version 3 :>1n  
o binutils 2.12 # ld -v pk.}  
o util-linux 2.10o # fdformat --version (T0:T)G*  
o module-init-tools 0.9.10 # depmod -V R@+ 1n:  
o e2fsprogs 1.29 # tune2fs ;0fGth=  
o jfsutils 1.1.3 # fsck.jfs -V $\;bu:w  
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs NKin&S6Y3  
o xfsprogs 2.6.0 # xfs_db -V )ys!I'Ju.-  
o pcmcia-cs 3.1.21 # cardmgr -V U(w,%   
o quota-tools 3.09 # quota -V k_Sto\  
o PPP 2.4.0 # pppd --version nv0Y[gm=y  
o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version y )=B&A{p  
o nfs-utils 1.0.5 # showmount --version AL{I5CdC  
o procps 3.2.0 # ps --version s&w > x  
o oprofile 0.5.3 # oprofiled --version 0Z]<v!K  
!f)h*PZj  
对于RH8/9的用户而言, 上述要求基本上都能满足. 大概只有两个程序需要更新: modutils工具包和mkinitrd程序. `#3nWM8:  
2r"w,<YF  
3. 安装module-init-tools-3.0.tar.gz工具包 %:RTzL%y  
1z/2Y>:  
linux-2.6.x内核的module处理过程有所改变(很多原先在用户态下由modutils处理的工作都放到内核里去完成了), 因此2.4.x下的modutils工具包已经不在适合新的2.6.x内核, 必需将其升级到module-init-tools工具包. 该工具包的最新版本是3.0(ps, 该工具包的版本从0.9.15一下跳到3.0, 其跨度之大...hoho). 可以下载module-init-tools-3.0.tar.gz源码包的地方有两个: IJLM3^dB  
+X&?/_+p<s  
o Rusty's Linux Kernel Page: http://www.kernel.org/pub/linux/ker...ools-3.0.tar.gz t"Amj=  
o http://www.kernel.org/pub/linux/uti...ools-3.0.tar.gz >If"gs\  
lz0.QXM  
接下来, 按照下列步骤安装module-init-tools工具包: (>Gs7}<E  
Aag}Dk2>  
# configure --prefix=/ q~;oKnfyd  
# make moveold Yif%jh  
# make all install oY^.s@;  
# ./generate-modprobe.conf /etc/modprobe.conf [LL;t?\  
0e$)a--5B  
命令"make moveold"将把系统原来的modutils工具程序改名为"*.old"(比如,lsmod.old等等). NOTE! 这是非常重要的一步, 千万不要省略. 这将使得你可以继续使用原有的linux-2.4.x系统, 因为在2.4.x系统下, 新的module-init-tools工具包实际上是倚赖原来"*.old"程序来加载内核模块. 如果忘记了这一步也不要紧张, 可以先下载并安装原来的modutils程序包, 然后按照上面的步骤重来一遍就可以了. M-?Ur"<  
-<!jCZ  
新的module-init-tools工具包不再使用原来的/etc/modules.conf配置文件了, 而是使用新的配置文件/etc/modprobe.conf. 因此必需用命令"./generate-modprobe.conf /etc/modprobe.conf"来生成新的配置文件/etc/modprobe.conf. 但是令人不爽的是, 这个生成的新配置文件存在BUG, 下面我们将会提到. sZM c-  
'!lz{Zt  
4. 更新mkinitrd程序 :KZt]*mO.  
'w=Y:>@  
可以到站点http://people.redhat.com/arjanv/2.6...1-2.i386.rpm包. 由于mkinitrd程序包依赖于device-mapper包, 而device-mapper包又倚赖于lvm2包, 因此你还要同时下载device-mapper-1.00.07-1.i386.rpm包和lvm2-2.00.08-2.i386.rpm包. w=Cb}WdoCo  
'nQ}G%Oy  
5. 配置,编译和安装linux-2.6.x内核 '?EyJK  
yXyFOx"0m  
新内核在Makefile方面的改动很大, "make menuconfig"和"make xconfig"继续存在, 但是"make xconfig"被改写了, 不再使用原来的Tcl/Tk语言, 而是基于QT库了. 新增加了"make gconfig", 它是基于GTK库的. "make xconfig"和"make gconfig"比原来更强大而且更易于使用了. 但不幸的是, 它们好像还不太稳定......因此, 还是使用我最喜欢的"make menuconfig"吧:-) %b>k5S   
?S62SjK[  
关于新内核的配置想提几点: )_o%+GKe  
y? |@5dUy"  
o 关于"Loadable Module support"选项, 一定要选上"Module unloading"和"Automatic kernel module loading"这两个选项. zG][X5A  
o 关于"Processor type and features"选项, 一定要选上"Preemptible Kernel"选项, 这是2.6.x内核优于2.4.x内核的重要原因之一. K{ot7SNN!3  
o 关于"Block Devices"的配置, 一定要选上对loopback和ramdisk的支持. $_Mz*UYC  
o 关于"Multi-device support(RAID and LVM)", 要选上"device mapper". >mtsY=  
o 关于"Input device support", 记得要选上"Keyboards"和"Mice"的支持. TVu ]-;  
o 关于"Graphics support", 要选上对frame buffer的支持. PC?H C}C  
o 关于ALSA, 要选上"OSS API emulation"选项. OSS可以不用了. /#J)I0dq  
o 关于USB, 能选的都选上吧:-) EW C5?plb  
o 关于文件系统, 选上常用的那几种就可以了. 如果要体验sysfs的话, 要选上对sysfs的支持. VRY?CT!  
L^YkXK~IZ  
配制好内核后, 就可以直接编译了, "make dep"这一步已经显示地需要了. m)| nZaXh  
1r /  
# make bzImage [95m 9>   
# make modules cG|:G{Vf95  
# make modules_install D'7jTI?M  
# make install n4-Fu Z  
)hG+O/n;:  
上面的命令"make install"将: (1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接; (2)修改bootloader的配置文件; (3)调用mkinitrd程序创建内核的initrd映象. 对于GRUB而言, 将在/boot/grub/grub.conf配置文件增加如下类似的配置行: m+A(YD_[  
b|U\ 9N  
title Red Hat Linux (2.6.4) VH -@VTD+  
root(hd0, 1) 5?$32xD  
kernel /boot/vmlinuz-2.6.4 ro root=LABEL=/ *NcS J)GA  
initrd /boot/initrd-2.6.4.img weuq<%  
FIw]sX(~  
不幸的是, 新内核并不识别"root=LABEL=/"这个启动参数. 如果现在你就重新启动新内核的话, 将发生kernel panic错误. 因此, 必需把这个"root=LABEL=/"启动参数去掉, 就OK了. +KeEO  
,]$Z_T'  
到这里, 你已经可以重启机器, 用kernel-2.6.4启动了. 当然, 多半你不会成功, 不是没鼠标就是没键盘:-) H'izUDET  
Td%HI Uq8  
6. 支持Hotplug d'u:\_h,  
mZN6=r?|  
当然, 首先要在内核配置时配置了HOTPLUG的支持. 然后, 由于/proc/ksyms改名为/proc/kallsyms, 所以必需修改启动脚本/etc/rc.sysinit. 为了兼容原有的linux-2.4.x系统, 可以加上下面几行: )`zSrcNn_M  
o.+k b<^t  
# {)&n7-Y/]  
# ----- KERNEL 2.6.x support ------ [,&`ZF+Kp  
# This is for compatibility between kernel-2.4.x and kernel-2.6.x s)Du"NNHi  
# .{[=^Rv"  
UNAME=`uname -r` tZ`x/h  
KERNELVER=${UNAME:0:3} sX8#CunT$  
if [ "$KERNELVER" = "2.6" ]; then mV%} n  
# L*:8M.Y;lN  
# This is kernel-2.6.x ~o*wBo}x  
# T{&Ita^?F  
KSYMS=/proc/kallsyms P:7f!$!  
else U=C/[><>[  
# F;4Gx  
# This is kernel-2.4.x  f S/0{  
# MBk6vhMQ^C  
KSYMS=/proc/ksyms mZE5mQ[  
fi eDG84O  
&?AG95 8]d  
然后, 把rc.sysinit文件中所有出现/proc/ksyms的地方都换成"$KSYMS"变量引用. 配置好后, 还必需下载hotplug的用户态辅助工具包:http://www.kernel.org/pub/linux/uti...4_03_11.tar.gz. 解开这个包以后, 直接"make install"就可以了. 它将产生/etc/hotplug/配置目录. BOT>YppW  
~@ )oZ1  
7. 体验sysfs ZvZ h8%M  
$zm(mN-  
首先, 创建目录/sys: 3mp s8|  
DZ?QXAg(t[  
# mkdir /sys Xc{h\7nH  
e028{[u  
然后, 按照下列步骤修改启动脚本/etc/rc.sysinit文件: ~d/0"s1  
qwr\Az/  
o 找到行: mount -f /proc", 在下面增加: 20r=K_l&  
8ek&N^O,  
if [ "$KERNELVER" = "2.6" ]; then i-fW]MR<  
mount -f /sys !X$bw9}#j  
fi N>=@X8;\  
6KnRiD##  
o 找到行: action $"Mounting proc filesystem: " mount -n -t proc /proc /proc, 在其下面增加这样一行: Lk$M5  
^yS A;?  
# 6b-(=OTP8E  
# Mount /sys for kernel-2.6.x CFs1.MV&B  
# 6(%1A?~ D  
if [ "$KERNELVER" = "2.6" ]; then a 4R;3l  
action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys \_6@9~eX#  
fi .4 _ZJ8  
T3 }I '>g  
接下来, 在/etc/fstab文件中, 加入这样一行: OlkX *`SH  
:s}kk AZ  
none /sys sysfs defaults 0 0 nv$H[XE1#  
.EDRr&!Ew  
最后, 修改/etc/init.d/halt脚本中的halt_get_remaining函数: O{Sb\w [  
` JS-q mZ  
将: q+hd~<s#  
awk '$2 ~ /^\/$|^\/proc|^\/dev/{next} mvKXpmpv)  
改为: MNMA 4M5  
awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next} SPYX,AVX  
1Dqa2'ZWd  
8. 支持USB设备 I0}4ZzUA'  
)m&?/F  
linux-2.6.x的USB驱动模块的名字已经改变了, 所以由此引起的问题多多......, 对应于USB-2.0的host控制器的内核模块名字仍然是ehci-hcd, 对应USB-1.1的host控制器的内核模块名字已经从usb-ohci改为ochi-hcd, 对应于通用USB host控制器的内核模块名字已经从usb-uhci该为uhci-hcd. /6x#p6-a  
$1|ro?0  
然而不幸的是, 在安装module-init-tools程序包时生成的/etc/modprobe.conf配置文件却仍然使用usb-ohci这个名字. 例如: U!9 &  
{ :Ahx)  
alias usb-controller usb-ohci [l5r7cOA,;  
alias usb-controller1 ehci-hcd -`n&n9V #r  
pW_ju{r'  
因此, 要把它改为: Gs%GV5  
}fyWF?r'  
alias usb-controller ohci-hcd Q9QT8J]  
alias usb-controller1 ehci-hcd ~ M.9IpBo  
'^Kp>;  
如果不做这样的修改, 那么使用USB-1.1 host控制器的机器在启动内核的时候将着不到相应的驱动模块. e=U |7yJ  
| V/=tb20D  
支持USB键盘的模块名字也从keybdev变为usbkbd, 支持USB鼠标的模块名字也从mousedev改为usbmouse. 因此, 我们必需修改启动脚本/etc/rc.sysinit文件. 同时为了兼容原有的2.4.x系统, 我们在脚本的一开始定义两个变量: 9A$ZNHqL  
m;Yl$!  
# >hM9iD  
# ----- KERNEL 2.6.x support ------ O%,   
# This is for compatibility between kernel-2.4.x and kernel-2.6.x d e J  
# &vo~h,Gh  
UNAME=`uname -r` )\{=|*aO  
KERNELVER=${UNAME:0:3} oEJ2A6  
if [ "$KERNELVER" = "2.6" ]; then t9\*QLI  
# 1S ~;TV_G  
# This is kernel-2.6.x df.k{FV7  
# HU[J?t=  
KSYMS=/proc/kallsyms :ZGl*BX,  
KEYBDEV_NAME=usbkbd {LNm='.P  
MOUSEDEV_NAME=usbmouse rSF\4,l{'j  
else 'X^VcU(6  
# Sn]Q( (Pg  
# This is kernel-2.4.x Kzm0ao1  
# ]JV\l Mw~  
KSYMS=/proc/ksyms D:XKEk  
KEYBDEV_NAME=keybdev YLcf313bX  
MOUSEDEV_NAME=mousedev +[~pW_ne;  
fi T"+UX/?#:  
Sj TzGq:  
然后, 把/etc/rc.sysinit脚本文件中出现keybdev和mousedev的地方都改为$KEYBDEV_NAME和$MOUSEDEV_NAME. 把脚本文件/etc/rc.sysinit中的needusbstorage部分从: "$iQ^?q  
R:dq/qkh3  
needusbstorage= 9{7[ U3  
if [ $usb = "1" ]; then y~yuw\&5G  
needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null` * dv9{CW  
LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null d4\#8o_4K  
jp0rRiLLb(  
action $"Initializing USB keyboard: " modprobe $KEYBDEV_NAME 2> /dev/null 5qx1X=  
action $"Initializing USB mouse: " modprobe $MOUSEDEV_NAME 2> /dev/null =S/e+G[,C  
fi 6-{oH XV  
DIbSfuyn  
改为: 6re>LL>E  
~sT1qeTc  
needusbstorage= D=/"0$ w  
if [ $usb = "1" ]; then qDJv?rFk  
if [ "$KERNELVER" = "2.6" ]; then `b8D&'k4uv  
needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null` G,at >  
LC_ALL=C grep 'hid' /sys/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe usbhid 2> /dev/null o{z;eB"W  
else &SOB/  
needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices 2>/dev/null` ^nEG M8  
LC_ALL=C grep 'hid' /proc/bus/usb/drivers || action $"Initializing USB HID interface: " modprobe hid 2> /dev/null &Z'<\xZ^F  
fi C\+_b'8e  
action $"Initializing USB keyboard: " modprobe $KEYBDEV_NAME 2> /dev/null UA#'L9:t  
action $"Initializing USB mouse: " modprobe $MOUSEDEV_NAME 2> /dev/null M7( h  
fi = \Vv-_  
&W3ZSEi  
好了, 到此为止, 我们应该可以重新启动机器了, 赶快去体验最新的kernel-2.6.4吧:-) IwC.$%  
zEd2P/_s  
9. 其它 WO7l.m~  
*fN M<R>@Z  
o 关于在linux-2.6.x系统上不能正常使用RPM命令的问题, 请参阅文档[2]和[6]. 51k aXV  
o 关于声卡的问题, 可以参阅参考文档[2]和[6]. .m6 E8  
o 关于在linux-2.6.x系统上运行vmware的问题, 请参阅参考文档[2]和[6]. :0{rQ0zA  
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章