由于開發(fā)環(huán)境需要在linux-2.6內(nèi)核上進行,,于是準備對我的虛擬機上的Linux系統(tǒng)升級。沒想到這一弄就花了兩天時間(
IXPUB技術博客0I H0g4w ] q&a4o
反復裝系統(tǒng),,辛苦啊~~),,總算把Linux系統(tǒng)從2.4.20-8內(nèi)核成功升級到了2.6.18內(nèi)核。
.kv |&YA9R(Q8J0網(wǎng)上雖然有很多介紹Linux內(nèi)核升級的文章,,不過要么過時,,下載鏈接失效;要么表達不清,,不知所云,;更可氣的是很多
N Q c h;} T2~ K$q1t0 IXPUB技術博客-z g } y _0d4Y+Q D
文章在轉載過程中命令行都有錯誤。剛開始我就是在這些“攻略”的指點下來升級的,,以致于浪費了很多時間,。IXPUB技術博客 q9Y _2E%m u.^
現(xiàn)在,費盡周折,,升級成功,,心情很爽,趁性也來寫個“升級攻略”吧,!于是特意又在虛擬機上重新安裝一個Linux系統(tǒng)
1\ a g1q K g,p w M0 IXPUB技術博客6L M&y"S Y$? r6y
,,再來一次完美的升級,邊升級邊記錄這些步驟,,寫成一篇Linux內(nèi)核升級記實錄(可不是回憶錄?。?,,和大家一起分享
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系統(tǒng),,并用根用戶登錄,,進入終端模式下。IXPUB技術博客4l E o+P S2S
3s4p0} X |4O P0IXPUB技術博客.N O%l3o G H/F I
1,、查看Linux內(nèi)核版本
Z9Z(W F n5g0# uname -aIXPUB技術博客 D d6g N \ R P g
如果屏幕顯示的是2.6.x,,說明你的已經(jīng)是2.6的內(nèi)核,也用不著看下文了,,該干什么干什么去吧,!~~~如果顯示的是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內(nèi)核源碼
,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,、下載內(nèi)核升級工具
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內(nèi)核和這4個升級工具我都有備份,如果以上下載地址失效,,請到http://www./guestbook 留下你的郵箱,,我給你發(fā)過去)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內(nèi)核和4個升級工具都下載完了(少一個也不行,,如果沒有下載齊全,請不要嘗試下面的步驟,,升級是不會成功IXPUB技術博客 [ SH/j I1N&T
5T0S`$V8T3P Y,`0的),,下面回到Linux系統(tǒng)中開始配置工作吧。
-`6l U'Q U u Rz0
k G#| p'u9T S D }7v0
9`#v0P*\9j.g"f n \04,、將下載好的內(nèi)核源碼包和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,、拷貝完畢,開始解壓新內(nèi)核,,具體操作請依次執(zhí)行以下命令:IXPUB技術博客 h F'z:\&v e
# cd /usr/src (進入到/usr/src目錄下,,如果已經(jīng)在/usr/src目錄下,可不執(zhí)行該命令)
0r T L I#u B/P o0# rm –rf linux (刪除linux文件夾,。值得一提的是,,如果內(nèi)核先前從未編譯過,則沒有這個文件夾,,此命令行可略過
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 (解壓新內(nèi)核)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目錄下,依次執(zhí)行下列命令:
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目錄下,,依次執(zhí)行下列3個命令來安裝另外三個升級工具:
7f"f v } W R$U Y'f d0# rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm (注意,,這里一定要加入--nodeps參數(shù),下同)
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如果不更新以上幾個升級包,,在后面編譯內(nèi)核時會提示以下錯誤: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,、配置內(nèi)核選項。有點繁瑣,,~~希望一次成功哦~~,。
_ 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 (配置內(nèi)核各選項)
(f b p f d X Y D \ [ o S0此時會出現(xiàn)一個圖形界面,列出了所有的內(nèi)核配置選項,,有的選項下還有子選項,,你可以用方向鍵來選擇,用Y鍵來確定IXPUB技術博客#I3[ J m L q | T
IXPUB技術博客+b T d T(w
,。經(jīng)過我多次試驗,,大多數(shù)選項默認就行,以下幾個選項必須選擇(請認真核對下面每一個選項,,否則編譯很有可能前功
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”(如果是在實環(huán)境中,,想要更多
-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文件系統(tǒng)配置,全部選上)
*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文件系統(tǒng)配置很重要,,也是必需的,如果對Ext3,、Ext2文件的支持直接編譯進內(nèi)核,,在你reboot時機IXPUB技術博客 X-k"u#|#K#t W'\
'N U"u8G*g0器就會當?shù)簦霈F(xiàn)如下錯誤信息:
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
(我的機器就是在重啟之后出現(xiàn)第三種錯誤,,進不去系統(tǒng),,郁悶死,只好重裝了~~~如果依照本文做完所有步驟,,當你重啟IXPUB技術博客+D l#E @ N c v H
IXPUB技術博客.A x p4V ~ X"W N9X
Linux系統(tǒng)后,,若不幸進不去2.6.18內(nèi)核,,你會發(fā)現(xiàn)你的出錯信息就是上面三種了~~~哈!)IXPUB技術博客'^ I b g8[ ~
(4)如果你在vmware下編譯內(nèi)核,,硬盤用的是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目錄下,,執(zhí)行以下命令即可編譯。編譯需要一段時間,,給自己倒杯茶耐心等候吧,!
&x!Z+?(U W1L7S0D0# make dep (建立編譯時所需的從屬文件。注意:如果內(nèi)核從未編譯過,,此步可跳過)
8[ M ? _ k)D q;K0# make clean (清除內(nèi)核編譯的目標文件,。注意:如果內(nèi)核從未編譯過,此步可跳過)
B9x9Q)K k o"M%T0# make bzImage (注意大小寫,。這一步才是真正編譯內(nèi)核)
5x h;C L9J z0 內(nèi)核編譯成功后,,會在/usr/src/linux/arch/i386/boot目錄中生成一個新內(nèi)核的映像文件bzImage。如果用make IXPUB技術博客 d)~$[6v p5w \ x
u z8n k h+d0zImage編譯,,內(nèi)核很大的話,,系統(tǒng)會提示你使用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
安裝成功后,,系統(tǒng)會在/lib/modules目錄下生成一個2.6.18子目錄,里面存放著新內(nèi)核的所有可加載模塊,。IXPUB技術博客 A.{ O z.H `2t4[ X.W P
# make install (安裝新內(nèi)核)IXPUB技術博客5F q0[%S z _ F
注意:IXPUB技術博客5c r ^ _4A;J$j ]
make install的時候可能會出現(xiàn)如下錯誤信息: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
此問題一般只出現(xiàn)在SCSI硬盤+VMWARE+REDHAT架構中,,因為BusLogic被編譯進了內(nèi)核而不是一個module的形式(2.4內(nèi)
,k J I J K0
(C ` L w z a0核的Buslogic模塊即使靜態(tài)編譯進內(nèi)核也不行)。解決方式是直接將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不過別忘記,,復制過后再執(zhí)行一下make install,。這一步若卡住了,下面的都無法進行,,如果看本文檔還是沒有解決問題
r [#j X R V0
U4] l V'Na ]+f ?%U t0,,就來我的網(wǎng)上留言本求助吧,進http://www. ,,點“留言本”即可,,我會及時看到你的求助信息的,。
R ~+\ E e kF J L0 IXPUB技術博客 |(Q3X1?#e&T [ z
H M P/\ I"^ c(J `0四、啟動新內(nèi)核
r'w a R:Q:]010,、將新內(nèi)核和System.map文件拷貝到/boot目錄下,,依次執(zhí)行以下命令:
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目錄下,,執(zhí)行以下命令:
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 (查看根目錄在那個分區(qū),下一步要用到,。注意,,這里根分區(qū)不是boot的那個50M的分區(qū),而一般是你最大的那個分IXPUB技術博客,F,@ u } ?/{ S KG ? u
r"_|,F [ W0區(qū),,也就是“/”,,千萬不要搞錯哦。我的為 /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內(nèi)核)IXPUB技術博客 z'E,w f4e&p1v8E
(2) 將kernel行的“LABEL=/”換成根目錄所在的分區(qū)(上一步查看的就是)/dev/hda2IXPUB技術博客 ].r s*J s-]
此步很重要,修改錯誤將可能導致進不去系統(tǒng),,我把我修改后的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內(nèi)核吧~~~~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內(nèi)核升級和編譯,,老掉牙的話題了,網(wǎng)上相關的文章不計其數(shù),。然后,,這么多的文章,卻沒有一篇讓我順利的升級
l3|-Q w a5F%p j0 IXPUB技術博客 e8{/V)z,| l
成功,。經(jīng)過兩天的體驗,,我深切的感受到,對于像我這樣的新手來說,,第一次升級和編譯Linux內(nèi)核,,真是一項艱巨的任
Z c3Z9x8I l-~4Q0 IXPUB技術博客0g"} f$C r @Ud%E
務。好在沒有失去耐心,,經(jīng)過多篇文章的比對和自己的琢磨,,一次次的修正,終于正確升級,、編譯成功,??偨Y這兩天的感
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 給我留言,,我會盡力解答你的問題。以此拙作,,希望能給大家?guī)バ┪⒌膸椭?br>4E/j I6q S v { | w }0
D'n'~#j M G w5p0