编译 linux 内核

一、准备工作
/tpV/tE0 首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。IXPUB技术博客/rc0p:a6zX J
启动Linux系统,并用根用户登录,进入终端模式下。6i;SB'W,_?a0 IXPUB技术博客C#gNg,y$Y

IXPUB技术博客*`K,J9^;tGm'Z*D
1、查看Linux内核版本
.s X^| MJKF0 # uname -a
d#g(X-b1JW0 如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是IXPUB技术博客^9m S)X+`6v

IXPUB技术博客TDz*qvo

2.4.x,那恭喜你,闯关通过,赶快进行下一步。

4v!~p7U(`Z0 IXPUB技术博客`.g ?;C3~1^�J5a


Wx2dB2_hj0 2、下载2.6内核源码
NvX$Q;Ki~6f&~0 下载地址:http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2 IXPUB技术博客 c/0G7`Z%umX;m

IXPUB技术博客q_uC2]G5B


~1i.nd2f.PC0 3、下载内核升级工具
,P%y"GwPY0 (1)下载module-init-tools-3.2.tar.bz2
G)Np /j N0 http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
4ez6zAcE)|']0 (2)下载mkinitrd-4.1.18-2.i386.rpmIXPUB技术博客8mK5`rap-q1Q
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/mkinitrd-4.1.18-2.i386.rpm
scL|t(^0 (3)下载lvm2-2.00.25-1.01.i386.rpmIXPUB技术博客 X$mJ {8Q2d&Q:Nl
http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/lvm2-2.00.25-1.01.i386.rpm IXPUB技术博客4iz#hJU
(4)下载device-mapper-1.00.19-2.i386.rpm
OE!a fZ0 http://ayo.freshrpms.net/fedora/linux/3/i386/RPMS.core/device-mapper-1.00.19-2.i386.rpm IXPUB技术博客0F"Lf&`8w!X
(2.6.18内核和这4个升级工具我都有备份,如果以上下载地址失效,请到http://www.piaoyang.org/guestbook 留下你的邮箱,我给你发过去)IXPUB技术博客7[9E6P8a0_

GjM[j$n:_4J3|0 IXPUB技术博客*/:pdRF!s1QZSK+`&r�p
二、配置工作IXPUB技术博客v0K8V X@$oY
好啦,2.6内核和4个升级工具都下载完了(少一个也不行,如果没有下载齐全,请不要尝试下面的步骤,升级是不会成功

PV�Z F-`$PZ,d0 IXPUB技术博客Hm n}}v

的),下面回到Linux系统中开始配置工作吧。IXPUB技术博客2dI5q,kr$~#y}C]

IXPUB技术博客)p1e _H};]

IXPUB技术博客/fy7} i#s%zR5CR`7~%m
4、将下载好的内核源码包和4个升级工具都拷贝到/usr/src文件夹下。怎么拷贝就不用我教了吧~~~~不会拷贝的去撞墙吧IXPUB技术博客@^r4kqq A[5b

IXPUB技术博客q%^+~9O/2r/Ca7u

!~~呵呵!

+Z+E8aG5Xn3O0

'H9O#c)s pW F0
!D+d{,]x0 5、拷贝完毕,开始解压新内核,具体操作请依次执行以下命令:IXPUB技术博客*w/0I�`-mj1A
# cd /usr/src  (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
Fq4})B{FK!l0 # rm –rf linux  (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此命令行可略过IXPUB技术博客:fOk7e+F1tEA1Q1u

4[ B/J"Lr3U F0 )
^B~"o)F"j I.x4Q0 # tar jvxf linux-2.6.18.tar.bz2  (解压新内核)
n/F0|5]*DlW*w0 # ln -s linux-2.6.18 linux  (重新生成linux文件夹)

p2Ny"d8D2R&k1O0

!M&nv)wA$M1xg0
.C(z:P7lv.V0 6、安装module-init-tools工具IXPUB技术博客)FY lh1FL2C
在/usr/src目录下,依次执行下列命令:IXPUB技术博客Ux*W V%t!S7K`3C
# tar jvxf module-init-tools-3.2.tar.bz2  (解压module-init-tools)
(/bU B+[~0 # cd module-init-tools-3.2  (由/usr/src目录进入module-init-tools目录下)IXPUB技术博客V v5WR@P P
#./configure --prefix=/
"L�_2gQ/tKs C0 # make moveoldIXPUB技术博客c7yz)|'SRq,[8n8c
# make all installIXPUB技术博客!JQp`n%@MI
#./generate-modprobe.conf /etc/modprobe.conf

fgM.rm0{0o E(}0 IXPUB技术博客3S"pS9^ B&gc


4{UQp�q(SR0 7、安装另外三个升级工具IXPUB技术博客D8Kqs/r
回到/usr/src目录下,依次执行下列3个命令来安装另外三个升级工具:
6Qb2V8J9A,u [8@0 # rpm -ivh --nodeps mkinitrd-4.1.18-2.i386.rpm  (注意,这里一定要加入--nodeps参数,下同)
1aoB'tf0 # rpm -ivh --nodeps lvm2-2.00.25-1.01.i386.rpmIXPUB技术博客;m3mG(Y^'}%b;oB
# rpm -ivh --nodeps device-mapper-1.00.19-2.i386.rpmIXPUB技术博客 N7J'Vt{Z3Q9vWct.J
如果不更新以上几个升级包,在后面编译内核时会提示以下错误:
5Q#Wg0P AmOv0       mkinitrd failedIXPUB技术博客R a9J5OzV%J*B.XU
      make[1]: *** [install] Error 1IXPUB技术博客 XGL(LD r
      make: *** [install] Error 2

:mC$prIvV0

PC~8w#g.j v3r0
G1}{#w _^ZqJ4J#aN0 8、配置内核选项。有点繁琐,~~希望一次成功哦~~。
i8h rg8f'j0 # cd linux-2.6.18  (进入到/usr/src/linux-2.6.18目录下)IXPUB技术博客8/AJ0qf4x D-r)|.W}f
# make mrproper  (该命令可确保源代码目录下没有不正确的.o文件)
*L7gIbAg"bf0 # make menuconfig (配置内核各选项)
4u.r uuge"|Q]*n0 此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定IXPUB技术博客c,Y b9hE:C'st

h1H Q_9f/M[jt.?0 。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功IXPUB技术博客o+i&Aw}w.A

IXPUB技术博客�wQ L�T:ZA/

尽弃):IXPUB技术博客'x:kf5{!I
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项IXPUB技术博客6{Tq'G5JgP

&{1B2B;j`.FLW}0
i&x k}J)H^0 (2)Device Drivers--->Block Devices中选上“Loopback device support”;IXPUB技术博客e w#E!Id
     Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper  support”;IXPUB技术博客$eM$Y5mX&~�}
     Device Drivers--->Graphics support,一定要选上“ Support for frame. buffer devices”;IXPUB技术博客toT-]qSxX y@pI
     Device Drivers  --->USB support  --->选上“USB Mass Storage support”(如果是在实环境中,想要更多

z!iqG1E4K'~nO0 IXPUB技术博客!p"SdY6q:b4[

USB支持,就全选吧。我的是在虚拟机中,用不着了)
&FO+P0MW~N?0      Device Drivers  --->;Network device support  --->Ethernet (10 or 100Mbit)  ---><*>  AMD PCnet32

9ct4};y,ce0 IXPUB技术博客sgm+~[;Tkd.m

PCI support
ANdhWB0 (3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
fz A1H9q_3wd0            Second extended fs support
!YTqK$II0            Ext2 extended attributesIXPUB技术博客-h�}'f2S"S%M7c4Ppd
           Ext2 POSIX Access Control ListsIXPUB技术博客}il2jLK.^ t-zXQU
           Ext2 Security Labels
yy]~ G4UuX`'X0            Ext3 journalling file system supportIXPUB技术博客Qime�~M1Lx$I
           Ext3 extended attributes
s m'D4jeF{4I0            Ext3 POSIX Access Control ListsIXPUB技术博客/ _-M.Z{%yO`T9i5b
           Ext3 Security LabelsIXPUB技术博客+Y*EG/?*|
           JBB (ext3) debugging supportIXPUB技术博客-TZ'BwR7r(x7J
     File system--->DOS/FAT/NT Filesystems  --->选上“NTFS file system support”;IXPUB技术博客{sse4D0y6[4V
注意:IXPUB技术博客2zs-sMA
       ext2和ext3文件系统配置很重要,也是必需的,如果对Ext3、Ext2文件的支持直接编译进内核,在你reboot时机

_(p"xl9{B,c0 IXPUB技术博客Zk*Ju1^Q7/J

器就会当掉,出现如下错误信息:IXPUB技术博客$W+A+{!^S MIf
          kernel panic : no init found ,try passing init = option to kernel.....
XB8vE6[7Y0 或者是:
KZ4y-F(uK0           VFS:Cannot open root device "hdxy" or unknow-block(0,0)
V%Yb GwPw0           Please append a correct "root=" boot optionIXPUB技术博客;[hK4k']KY0j*D
          kernel panic:VFS:Unable to mount root fs on unknown-block(0,0) IXPUB技术博客i!s5MqJ&G1q.B ~
或者是:IXPUB技术博客4D VF2v} S(VB N
          mount: error 19 mounting ext3
?!/3w1y{*z |E.` p,Y0           pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed: 2IXPUB技术博客"|u(pR0CA.D0x
          umount /initrd/proc fail: 2IXPUB技术博客�g%y/'q3g w4Q
          Freeing unused kernel memory: 244k freed
'[3|+Upz t;d5J0           Kernel panic – not syncing: No init found. Try passing init = option to kernel
w{v.n {(N Q3kTN U0 (我的机器就是在重启之后出现第三种错误,进不去系统,郁闷死,只好重装了~~~如果依照本文做完所有步骤,当你重启

g_�zuP;S0 IXPUB技术博客(l.H3H*?w1B A2P

Linux系统后,若不幸进不去2.6.18内核,你会发现你的出错信息就是上面三种了~~~哈!)
PTf@'P1kkO0 (4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:IXPUB技术博客|6V8`m#H/6L
     Device Drivers ---><*>SCSI device support  (此项不选的话,下面两项就选择不上)IXPUB技术博客*j|b5Y3A:q!q@!pd
     Device Drivers ---><*>SCSI device support ---><*>SCSI disk supportIXPUB技术博客B&@v&]4_7b0`qp)|
     Device Drivers---><8>SCSI device support--->SCSI low-level drivers---><*>; BusLogic SCSI IXPUB技术博客g8dYpt @[_:/X

IXPUB技术博客,F6D I6]m

support

M O;~i6W6{GX]q0

5Kortl@^`D0 IXPUB技术博客s;i)r;c&j;vm
三、编译工作
9D,l,YN#]ZKG;W1y&P0 OK,繁杂的配置工作完成了,至此,编译前的准备工作都做好了!

$@ F+R8EO5z2aQ0

R"n_eZ0
b]Cd7E&H4s0 9、开始编译啦……IXPUB技术博客n'?fh da+G
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间,给自己倒杯茶耐心等候吧!IXPUB技术博客�w6W ` P*l"Y.[
# make dep  (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
'c2w3lJ0{ T0 # make clean  (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)IXPUB技术博客 AI4S v4n*tKc2w%l
# make bzImage  (注意大小写。这一步才是真正编译内核)
!x X&B%o TR;^0     内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make  IXPUB技术博客;Uo ],za

&lh/i(J,Qm LP0 zImage编译,内核很大的话,系统会提示你使用make   bzImage命令来编译,所以我直接用make bzImage来编译。
8g&V+RYm)g4`0 # make modules  (编译可加载模块)IXPUB技术博客Z$oj Zx B[6O A)V
# make modules_install  (安装可加载模块)IXPUB技术博客8Nt]$hw~-|v
  安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
k?gH FJ K0 # make install  (安装新内核)IXPUB技术博客fc0z3wMXSF1^/e:F.}
注意:
&E s{4bA0         make install的时候可能会出现如下错误信息:
4]|@ fol0         No module BusLogic found for kernel 2.4.12
O?/E ^#T!p}0         mkinitrd failed
l+i.u ~PWy3[0 此问题一般只出现在SCSI硬盘+VMWARE+REDHAT架构中,因为BusLogic被编译进了内核而不是一个module的形式(2.4内IXPUB技术博客2s5_!e S!l

1e6U+s.r-[0 核的Buslogic模块即使静态编译进内核也不行)。解决方式是直接将BusLogic.o文件复制过去:IXPUB技术博客+ump%a)V%}O
# cp /usr/src/linux-2.6.18/drivers/scsi/BusLogic.o  /lib/modules/2.6.18/kernel/drivers/scsi
A6C;ETP[{;|0 不过别忘记,复制过后再执行一下make install。这一步若卡住了,下面的都无法进行,如果看本文档还是没有解决问题

iEY2iJ(M�N)W GW0

6Ng6FQ%g-tsN^0 ,就来我的网上留言本求助吧,进http://www.piaoyang.org ,点“留言本”即可,我会及时看到你的求助信息的。

9n:e/S"}N!M0

s%S(O7q s@g0Z0
k7c$fU w5IQvU%k0d0 四、启动新内核
8xU*C5F1{7s{0 10、将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:    
i"C�R)huE%mXT0 # cp  /usr/src/linux-2.6.18/arch/i386/boot/bzImage   /boot/vmlinuz-2.6.18     IXPUB技术博客%k?G,{6W&Wr i
# cp  /usr/src/linux-2.6.18/System.map   /boot/System.map-2.6.18     IXPUB技术博客%L{ iu"~
# cd  /boot  (进入boot目录)
bUqJMn0 # rm –rf  System.map  (删除原来的连接)     IXPUB技术博客TvfOL:IWb
# ln –s System.map-2.6.18  System.map   (重新建立连接)    

5p?e*]qi$G0 IXPUB技术博客+o#~-Cg4R~m


W?"hE-/N0 11、修改Grub启动管理器
q/KL(wN2] JG!@9o _,~0 如果没有错误的话, 下面开始修改grub配置文件(不要告诉我你用的lilo)
"lo-L$Hj`!e^[0 在/boot目录下,执行以下命令:IXPUB技术博客-OCuh"cX2j*G0w o
# new-kernel-pkg --mkinitrd --depmod --install 2.6.18 (这时候你的/boot下会生成一个initrd-2.4.18.img,IXPUB技术博客GB+t!{0d$?1i

IXPUB技术博客9x"/8V.Ib

并且你的grub.conf文件也作了相应更改)
!C3h;}Q6jWN l0 注意:IXPUB技术博客tW m#D;Z!zYIf
     
YwJ-ay KL6t0 # df  (查看根目录在那个分区,下一步要用到。注意,这里根分区不是boot的那个50M的分区,而一般是你最大的那个分IXPUB技术博客AhN `WF:A%X

IXPUB技术博客8E2Th$Iz0ve

区,也就是“/”,千万不要搞错哦。我的为 /dev/hda2)IXPUB技术博客9|B?7b;]_(M{*k Fg
# vi /boot/grub/grub.conf 
p Ij;i*mU#k0 进入grub.conf文件,找到如下信息:IXPUB技术博客0dg;S'/I{6N
default=1IXPUB技术博客MmoTG
timeout=10IXPUB技术博客,y6]S/Z^G Rq4]
splashimage=(hd0,0)/grub/splash.xpm.gzIXPUB技术博客nv2pK n%y#WsH/ V
title Red Hat Linux (2.6.18)
)j1| {@*kIl0         root (hd0,0)
7U"d(r4C/N'D5b)X0         kernel /vmlinuz-2.6.18 ro root= LABEL=/
j�jq g /#J0         initrd /initrd-2.6.18.imgIXPUB技术博客&L)S+ac D:@
做两处修改:
|:tp3/+U-~5x-l0 (1) 将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入2.4内核)IXPUB技术博客9R)O+rVc#y]
(2) 将kernel行的“LABEL=/”换成根目录所在的分区(上一步查看的就是)/dev/hda2IXPUB技术博客 T$D [d1|5h^6XSg qG
此步很重要,修改错误将可能导致进不去系统,我把我修改后的grub.conf文件列出来,不明之处,可以对照修改:IXPUB技术博客*UW%E/cO#_
default=0IXPUB技术博客8B/+c*y(ShDfQ[
timeout=10IXPUB技术博客 i0OG%iE q!` R
splashimage=(hd0,0)/grub/splash.xpm.gzIXPUB技术博客G*Z R+zt%N Bf$g
title Red Hat Linux (2.6.18)
2v3s4YAc}z0         root (hd0,0)IXPUB技术博客%RQ ]e6xd^
        kernel /vmlinuz-2.6.18 ro root=/dev/hda2
R?e`2z b0         initrd /initrd-2.6.18.img
7xh&j8VTap6vN0 title Red Hat Linux (2.4.20-8)
X ih]{N B&]0         root (hd0,0)
N}%ev3G-uK!Hy0         kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
I_MX'SX"s0t2/2R0         initrd /initrd-2.4.20-8.img

U0E-r7C&Z_^.W$M/p0

yZg2P@ C0
?5q-R P+J,m^U [0 12,OK,大功告成!赶快重启,看看升级后的2.6内核吧~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值