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水木清华站∶精华区