BBS水木清华站∶精华区

发信人: encarta (知更鸟), 信区: Linux        
标  题: 编译内核:我的一点心得 
发信站: BBS 水木清华站 (Wed Aug 30 11:06:45 2000) 
 
为了给内核打上一个网络方面的补丁,这两天一直在机器上编译内核,犯过了 
屡次错误之后,终于成功了,有感于介绍这方面的心得比较少,特发此篇,望 
大侠们指教. 
 
在一般情况下是不需要编译内核的,但如果要给内核打上补丁(就是对内核文件 
做了修改,增加了其中功能),就必须重新编译内核. 
 
一般情况下要先去下载一个和当前内核版本一样的内核源代码文件,比如当前 
用的是RedHat6.0,内核版本就是2.2.5,就可以到 www.kernel.org下载一个 
linux-2.2.5.tar.gz的内核源代码文件,拷到/usr/src目录下,并解开,比方说 
解到了/usr/src/linux-2.2.5目录下。再把补丁程序也拷到linux-2.2.5目录, 
执行patch -p1 < linux.patch(比方说补丁文件叫linux.patch)。这样就给 
内核源代码文件打上了补丁(做了修改,一般是增加了代码)。 
 
然后执行: make menuconfig,这一步很关键,直接影响内核编译成功与否, 
我就是在这里犯了几个错误。 
 
首先,在cup类型的选项中,其默认值是奔腾pro或奔腾MMX,如果你的CPU是 
Cyrix586,就要把这一项改成相应的CPU类型。 
 
其次,要清楚,如果你选择了所打上的补丁支持的功能,那么这项新功能还需要 
在内核中选择其它什么支持。比如:我的补丁是给网络方面增加了移动IP的功能, 
那么在我选择了移动IP的功能后,我还需要选择advanced route, route messaging, 
netlink,ip tunneling等选项,这些一般都在补丁文件中有说明,如果你没有选 
或者是选得不全那么很有可能编译是能通过的,但用新内核启动后在finding  
modules dependencies这一步时会死掉。当初我在编译新内核时在这一步死了 
n次,后来在menuconfig中增加了补丁说明中的没有提到的几个选项才通过。 
 
再次,在menuconfig的网络设备选项中,关于以太网的默认值是PCI的以太网卡, 
对ne2000的默认支持方式是build-in,即没有设成模块,所以如果你的网卡是 
ISA的,那么务必要选择其中的other ISA card,最好把PCI intel pro选项去掉, 
另外把ne2000 support选项改成module。 
 
最后就是make dep; make clean; make bzImage 
然后 make modules� 
     make modules_install 
然后 cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-kernel.version 
(这一步务必不要覆盖原来能启动的文件,取个新的名字,以防新内核启动不了) 
     cp /usr/src/linux/System.map /boot/System.map-kernel.version 
(这一步也取个新名字,原因同上) 
然后修改lilo文件 
      vi /etc/lilo.conf 
在其中增加一个启动选项 
 
最后务必运行 /sbin/lilo -v 
(对于这一步再多讲几句,可能你编译了几次内核都不行,而每次编译的内核文件 
都是相同的名字,那么lilo.conf文件当然是不用改了,但 运行lilo这一步可千万 
不能省,因为lilo做了很多事,它可能要记录image文件的物理位置,而不仅是 
文件名) 
 
好了,以上就是我这两天编译内核的一点心得,供大家参考,有什么错误之处 
请大家指正。 
 
-- 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.120.8.76] 

BBS水木清华站∶精华区