分类: LINUX
2009-03-10 18:43:30
很久就开始尝试编译Linux内核,但是总是遇到不少的问题,经过几十次的编译,直到现在才解决,人都要崩溃了。所以干脆把这个过程写出来,希望在你遇到同样问题的时候少走点弯路。
我用的是Red Hat Linux 9. 内核版本是
cd /usr/src/linux
make mrproper #清除目录下所有和先前生成内核时候产生的中间文件 make menconfig #内核配置 |
注意在vmware下有以下几个必须选中否则编译将会遇到问题(参考)
Device Drivers --->SCSI device support ---><*> SCSI disk support Device Drivers --->SCSI device support --->SCSI low-level drivers ---> <*> BusLogic SCSI support Device Drivers ---> Fusion MPT device support ---> Device Drivers ---> USB support ---><*> USB Mass Storage support Device Drivers ---> Networking support --->Ethernet (10 or 100Mbit) ---> <*> AMD PCnet32 PCI support |
2.6中 make dep 可以不用了 #依赖性和完整性检测
make bzImage #产生压缩内核 cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmkernel make modules #编译可加载模块 make modules_install #安装模块 |
以上过程可能比较消耗时间,我每次编译都用了超过1小时的时间。.
如果BusLogic SCSI suppor选择的是M,就还要运行
mkinitrd /boot/newkernel.img |
BusLogic SCSI support我选择的是*,所以就不用运行mkinitid命令了.
修改配置文件
我用的是grub,在/etc/grub.conf后添加以下语句
title New Kernel ( root (hd0,0) kernel /newkernel ro root=/dev/sda2 #initrd /newkernel.img |
BusLogic SCSI support 如果你选的M,你还得把#initrd /newkernel.img前的#去掉.
然后重新启动。
我也用lilo试过
在/etc/lilo.conf后添加以下语句
image=/boot/newkernel label=New #initrd=/boot/newkernel.img read-only append="root=/dev/sda2" |
同样BusLogic SCSI support 如果你选的M,你还得把#initrd=/boot/newkernel.img前的#去掉.
运行lilo命令,然后重新启动。
问题
1. No rule to make target `net/ipv4/netfilter/ipt_TOS.c', needed by `net/ipv4/netfilter/ipt_TOS.o'. Stop.
上面提到了,如果你是在Windows下解开Linux内核的话就会遇到这个问题,因为Windows不区分文件大小写,ipt_TOS.c和ipt_tos.c在Windows中是一回事,就被替换掉了,改在Linux下解开它就没有问题了。
2. 不能挂接根文件系统
修改配置文件把根文件系统改成具体的设备文件,不要使用LABEL标签