分享

Linux kernel内核升级全过程,教你一次成功(2.4.20

 bsdsys 2011-07-17
序 言IXPUB技术博客1b s)? N0y ^ T
由于开发环境需要在linux-2.6内核上进行,于是准备对我的虚拟机上的Linux系统升级。没想到这一弄就花了两天时间(IXPUB技术博客 \8] T0x \:k D
IXPUB技术博客0I H0g4w ] q&a4o

反复装系统,辛苦啊~~),总算把Linux系统从2.4.20-8内核成功升级到了2.6.18内核。
.kv |&YA9R(Q8J0网上虽然有很多介绍Linux内核升级的文章,不过要么过时,下载链接失效;要么表达不清,不知所云;更可气的是很多

N Q c h;} T2~ K$q1t0 IXPUB技术博客-z g } y _0d4Y+Q D

文章在转载过程中命令行都有错误。刚开始我就是在这些“攻略”的指点下来升级的,以致于浪费了很多时间。IXPUB技术博客 q9Y _2E%m u.^
现在,费尽周折,升级成功,心情很爽,趁性也来写个“升级攻略”吧!于是特意又在虚拟机上重新安装一个Linux系统

1\ a g1q K g,p w M0 IXPUB技术博客6L M&y"S Y$? r6y

,再来一次完美的升级,边升级边记录这些步骤,写成一篇Linux内核升级记实录(可不是回忆录啊!),和大家一起分享

D1i Q @4B p6K0 IXPUB技术博客8r9a1a B D

~~!

}%\7Y-j5q9f _&_ @#A,A j0

(B U oB9[ _ _0IXPUB技术博客*W;A |-T t ?0c
一、准备工作IXPUB技术博客)p)_ g m Z,J)M7E:~ d
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
-j h:h8~ _ x J0启动Linux系统,并用根用户登录,进入终端模式下。IXPUB技术博客4l E o+P S2S

3s4p0} X |4O P0IXPUB技术博客.N O%l3o G H/F I
1、查看Linux内核版本
Z9Z(W F n5g0# uname -aIXPUB技术博客 D d6g N \ R P g
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是IXPUB技术博客(d:s m {1\2q,j-@

g E&M c'ET7Z;O B02.4.x,那恭喜你,闯关通过,赶快进行下一步。

u b!t&?3w \ D0 IXPUB技术博客 p {-n t1k `0`


#U s,SP O j w _ t02、下载2.6内核源码
,Y1u3w l d X-E*j1N0下载地址:http://www./pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2IXPUB技术博客.| }5M ` P E5I

IXPUB技术博客 R5x Q X m m'w!t E


O @ D J/u9U \$B |03、下载内核升级工具
5{"z F J%E2t m T z R0(1)下载module-init-tools-3.2.tar.bz2IXPUB技术博客8X |2V G:q
http://www./pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2 IXPUB技术博客#j s.e K A j,s Q
(2)下载mkinitrd-4.1.18-2.i386.rpmIXPUB技术博客7~ E a u g9X }%O
http://ayo./fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm
i9G:t Ue } M ~-| y0(3)下载lvm2-2.00.25-1.01.i386.rpm
X w*A E l0http://ayo./fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpmIXPUB技术博客(\ Q p(L3e
(4)下载device-mapper-1.00.19-2.i386.rpm
h2v r k$[ P({*_ }'O0http://ayo./fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpmIXPUB技术博客%]2p @9j V q H R
(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到http://www./guestbook 留下你的邮箱,我给你发过去)IXPUB技术博客 _ t u ` U

IXPUB技术博客 G.vY n"B U-A

IXPUB技术博客 K4I X X P R a0l9`
二、配置工作IXPUB技术博客7z)X x P u [&K M,C
好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功IXPUB技术博客 [ SH/j I1N&T

5T0S`$V8T3P Y,`0的),下面回到Linux系统中开始配置工作吧。

-`6l U'Q U u Rz0

k G#| p'u9T S D }7v0
9`#v0P*\9j.g"f n \04、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧

b.C8T/r e0e0

k Z/] a `0!~~呵呵!

)y X3l D o L#}-m p0

.`#y&T N O V0IXPUB技术博客&wJ o w*\ c R T
5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:IXPUB技术博客 h F'z:\&v e
# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
0r T L I#u B/P o0# rm –rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过

1g4v M/{ _ S0 IXPUB技术博客.q)N/V D,X L7_ E t

)
8e1\ d:e)T/[.n,Y0# tar jvxf linux-2.6.18.tar.bz2 (解压新内核)IXPUB技术博客;J u3H I s
# Ln -s linux-2.6.18 linux (重新生成linux文件夹)

*D L U N6F&x0

z ] | w$p h | ~0IXPUB技术博客:f Z E u$^ o
6、安装module-init-tools工具IXPUB技术博客2f ZE H ] q
在/usr/src目录下,依次执行下列命令:
P C p"` C },m K0# tar jvxf module-init-tools-3.2.tar.bz2 (解压module-init-tools) IXPUB技术博客 L7o4R G&K G E/~
# cd module-init-tools-3.2 (由/usr/src目录进入module-init-tools目录下)
m-y#B a.w0#./configure --prefix=/
O I.x T x,\0# make moveoldIXPUB技术博客.f"? T)a _ \9n
# make all install
b i D q I q0#./generate-modprobe.conf /etc/modprobe.confIXPUB技术博客$P ~ V |1~ J6w+V

F7l9K.T h U E$I0
J&s0Y9y9?,W07、安装另外三个升级工具
3M P3k o,[ {0回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
7f"f v } W R$U Y'f d0# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,这里一定要加入--nodeps参数,下同)
A;Y+S$x)l i'U+t4\0# rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpm
y)L uA:?-V ?$O \ L:[0# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpm
N8e,a ~1o ]0如果不更新以上几个升级包,在后面编译内核时会提示以下错误:IXPUB技术博客+D1c Z \9k5s M ^ x3g t `
      mkinitrd failedIXPUB技术博客 Q O | K _/T F
      make[1]: *** [install] Error 1IXPUB技术博客0e @0f(i!q U
      make: *** [install] Error 2IXPUB技术博客 P R| @ g e p e

IXPUB技术博客)@ Y a8H [9z*[ _"_


,g l,X+i(Bw I08、配置内核选项。有点繁琐,~~希望一次成功哦~~。
_ u h r.{ iP;O3K0# cd linux-2.6.18 (进入到/usr/src/linux-2.6.18目录下)
m*\ f N `$k g2d5L0# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
9E f Q'i i V0# make menuconfig (配置内核各选项)
(f b p f d X Y D \ [ o S0此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定IXPUB技术博客#I3[ J m L q | T

IXPUB技术博客+b T d T(w

。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功

5z A U _5O1A B ^0

w h o h8n3t0尽弃):
)Q9J B Q ] ^!l F'l9}0(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项

/~,n T#o o p0 IXPUB技术博客 E Q s | T2Y ~ Y2i*Y

IXPUB技术博客:g"zW n Z M&_(I K P W
(2)Device Drivers--->Block Devices中选上“Loopback device support”;
D(}5N i G r q0     Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;
$z } V#V3F9P r0     Device Drivers--->Graphics support,一定要选上“ Support for frame. buffer devices”;IXPUB技术博客(X8f D6g0h G8k y
     Device Drivers --->USB support --->选上“USB Mass Storage support”(如果是在实环境中,想要更多

-k V H9}&b0 IXPUB技术博客;j"S&? G j"d%z!I1h h

USB支持,就全选吧。我的是在虚拟机中,用不着了)IXPUB技术博客 P)J:V N6W
     Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---><*> AMD PCnet32

9G,y \d A B f I M#K0

X q!h ~ _;} j P0PCI support IXPUB技术博客 s%B A&R A9y N Q C$U
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
*Q u+Y7n B H,Z0           Second extended fs support
+I&y t e k ~ ]0           Ext2 extended attributesIXPUB技术博客4] [ D4|-n8]
           Ext2 POSIX Access Control ListsIXPUB技术博客8f d e j ["Z N
           Ext2 Security LabelsIXPUB技术博客 y Y+G"J \2y#C(j c;a
           Ext3 journalling file system support
#[ l I j g-N8j v8d0y0           Ext3 extended attributes
Y#Z g'C8T%e+t(K M0           Ext3 POSIX Access Control Lists
z D S `:F ~ N,|(X \1D0           Ext3 Security LabelsIXPUB技术博客 K B%Z#s b n-d8D
           JBB (ext3) debugging support
] R%e:f z!] ]0     File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;IXPUB技术博客 I k L-B f.U6T
注意:
9M z Y @&~ x$j0       ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机IXPUB技术博客 X-k"u#|#K#t W'\

'N U"u8G*g0器就会当掉,出现如下错误信息:
r m*C J)N%m e c ] p q T0          kernel panic : no init found ,try passing init = option to kernel.....IXPUB技术博客 F6Q s D s
或者是:IXPUB技术博客 O L Z8H U @)Y#c#A
          VFS:Cannot open root device "hdxy" or unknow-block(0,0)
Y X m A S R l E0          Please append a correct "root=" boot option
;d L h ~ h8? E I0          kernel panic:VFS:Unable to mount root fs on unknown-block(0,0)
A p e V5S0或者是:IXPUB技术博客 M ~6r!j8D$S s%]
          mount: error 19 mounting ext3
S7@ } u |/@0          pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2IXPUB技术博客2P H4y r s I \ ~
          umount /initrd/proc fail: 2IXPUB技术博客 l9i K-F'P P#X
          Freeing unused kernel memory: 244k freedIXPUB技术博客-U'R u5G g @ M i
          Kernel panic – not syncing: No init found. Try passing init = option to kernelIXPUB技术博客:| B M u _ a v
(我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启IXPUB技术博客+D l#E @ N c v H

IXPUB技术博客.A x p4V ~ X"W N9X

Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)IXPUB技术博客'^ I b g8[ ~
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
F u M$D"l e u0     Device Drivers ---><*>SCSI device support (此项不选的话,下面两项就选择不上)
x$j,c,w W!T0     Device Drivers ---><*>SCSI device support ---><*>SCSI disk support
Z,B6X)I F O0     Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI

0T'y)a n K0G A0

[*q b B3W#`:j!G0supportIXPUB技术博客 h;A1T m;R @

.d.?1_9O/l0IXPUB技术博客 ?,e0I/W$h8^8F X
三、编译工作
s @ b q m \ @ m)k0OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!

L n:T L*s1n/Y0 IXPUB技术博客 a ~ }*Q k%S(j m C1{

IXPUB技术博客 j z!] y O W;O
9、开始编译啦……
9R8s0J9U6K0在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!
&x!Z+?(U W1L7S0D0# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
8[ M ? _ k)D q;K0# make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
B9x9Q)K k o"M%T0# make bzImage (注意大小写。这一步才是真正编译内核)
5x h;C L9J z0    内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make IXPUB技术博客 d)~$[6v p5w \ x

u z8n k h+d0zImage编译,内核很大的话,系统会提示你使用make   bzImage命令来编译,所以我直接用make bzImage来编译。IXPUB技术博客 H I){%O'?"Z!T p;S
# make modules (编译可加载模块)IXPUB技术博客:d H(@ d\ R
# make modules_install (安装可加载模块)IXPUB技术博客 {7v9[1z `-U4W
安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。IXPUB技术博客 A.{ O z.H `2t4[ X.W P
# make install (安装新内核)IXPUB技术博客5F q0[%S z _ F
注意:IXPUB技术博客5c r ^ _4A;J$j ]
        make install的时候可能会出现如下错误信息:IXPUB技术博客 [ N c*l7n \(R
        No module BusLogic found for kernel 2.4.12IXPUB技术博客 J m)E2e!q z
        mkinitrd failedIXPUB技术博客 Z z)H4~)\ @ s
此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内

,k J I J K0

(C ` L w z a0核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:
u)C \ e#}0# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o /lib/modules/2.6.18/kernel/drivers/scsi
P B/{'L9^;\*v0不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题

r [#j X R V0

U4] l V'Na ]+f ?%U t0,就来我的网上留言本求助吧,进http://www. ,点“留言本”即可,我会及时看到你的求助信息的。

R ~+\ E e kF J L0 IXPUB技术博客 |(Q3X1?#e&T [ z


H M P/\ I"^ c(J `0四、启动新内核
r'w a R:Q:]010、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:    
i ` j:J#}5m0# cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage   /boot/vmlinuz-2.6.18     IXPUB技术博客3Y8\ x:h j i)n
# cp /usr/src/linux-2.6.18/System.map   /boot/System.map-2.6.18    
\8L:k"S D7a)^ V0# cd /boot (进入boot目录)
X&\ o E Z O;F M k0# rm –rf System.map (删除原来的连接)     IXPUB技术博客0m1i d Q P x'j:c Y
# ln –s System.map-2.6.18 System.map   (重新建立连接)     IXPUB技术博客2g$Y Ej9Y,]9Z @1L

IXPUB技术博客 D-Z S2@;Q&v g4q$z h

IXPUB技术博客 S L)_ ] C.f7b Q W
11、修改Grub启动管理器IXPUB技术博客 w ~!^(h:Q(V _
如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
*D*H e p k"f0在/boot目录下,执行以下命令:
W*Q P ] P$d i w0# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下会生成一个initrd-2.4.18.img,

+r Y l'^ F0 IXPUB技术博客5P {!P O'E

并且你的grub.conf文件也作了相应更改)
J(z5_ T _ q Q O C5S0注意:IXPUB技术博客 p d A%C j x \
      IXPUB技术博客 I K R'X S v8?
# df (查看根目录在那个分区,下一步要用到。注意,这里根分区不是boot的那个50M的分区,而一般是你最大的那个分IXPUB技术博客,F,@ u } ?/{ S KG ? u

r"_|,F [ W0区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)
:` K#X,U Z \ b+],q0# vi /boot/grub/grub.conf IXPUB技术博客 F.m Z u:z \(u
进入grub.conf文件,找到如下信息:IXPUB技术博客4f/u7\9C)a!E K C
default=1
6\ } ?6e w6Z ~/]0timeout=10IXPUB技术博客}/o h { j J N9_ d v
splashimage=(hd0,0)/grub/splash.xpm.gz
T V m"p+A }0title Red Hat Linux (2.6.18)IXPUB技术博客 ? G#D o G2_
        root (hd0,0)
F:] b(s+t0        kernel /vmlinuz-2.6.18 ro root= LABEL=/
F z J1B k0        initrd /initrd-2.6.18.imgIXPUB技术博客 i S \ x ^ l K/h s I
做两处修改:
+o.u g q:| r"q0(1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)IXPUB技术博客 z'E,w f4e&p1v8E
(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)/dev/hda2IXPUB技术博客 ].r s*J s-]
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:IXPUB技术博客 N M j S*Q)K k
default=0
7m z s B/X x,A0timeout=10IXPUB技术博客 q,m Y1v U"`:I |
splashimage=(hd0,0)/grub/splash.xpm.gzIXPUB技术博客5x1N S#i f*H w ~,K B
title Red Hat Linux (2.6.18)IXPUB技术博客 ` Y [;w&u B#k)j+O
        root (hd0,0)
J ` B E E x0        kernel /vmlinuz-2.6.18 ro root=/dev/hda2
2Y m u/r1`(R O ? N0        initrd /initrd-2.6.18.imgIXPUB技术博客 N$L H9^%c I1|+k
title Red Hat Linux (2.4.20-8)
)H"a a4` X j6T0        root (hd0,0)IXPUB技术博客+l8@:r G:d z0z
        kernel /vmlinuz-2.4.20-8 ro root=LABEL=/IXPUB技术博客*E!T L/{2J+{
        initrd /initrd-2.4.20-8.imgIXPUB技术博客/I i)I q3p j

IXPUB技术博客 W D ^ L3n K v7s


P E \ e5M/Y6m#c012,OK,大功告成!赶快重启,看看升级后的2.6内核吧~~~~IXPUB技术博客;G5c,C Y m)u2S

IXPUB技术博客 u v-[ h J l ~3e:^1| O L


\$P6y E,g5|$L0后记:IXPUB技术博客 g a4g j/P S z
Linux内核升级和编译,老掉牙的话题了,网上相关的文章不计其数。然后,这么多的文章,却没有一篇让我顺利的升级

l3|-Q w a5F%p j0 IXPUB技术博客 e8{/V)z,| l

成功。经过两天的体验,我深切的感受到,对于像我这样的新手来说,第一次升级和编译Linux内核,真是一项艰巨的任

Z c3Z9x8I l-~4Q0 IXPUB技术博客0g"} f$C r @Ud%E

务。好在没有失去耐心,经过多篇文章的比对和自己的琢磨,一次次的修正,终于正确升级、编译成功。总结这两天的感

U a a }#J-w v0 IXPUB技术博客3L&[;i t i T r l

受,那就是“痛,并快乐着”!如果你照着这些步骤一路下来的话,仍然没有成功;那么我可以告诉你两点:一是,不要

^ X*`0_3@'?0 IXPUB技术博客 w ^)x'D u z!l ~+E x

怀疑我的步骤有问题,因为不光是我,我的同事照我的这篇文档也一次成功;二是,你可以到我的留言本IXPUB技术博客 O G8w a Q4? r.u C K

IXPUB技术博客0L*o.s L O.~-Z

http://www./guestbook 给我留言,我会尽力解答你的问题。以此拙作,希望能给大家带去些微的帮助。
4E/j I6q S v { | w }0

D'n'~#j M G w5p0

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多