|
|
今天下了“壮士一去兮不复返“的决心,做好了重装系统的准备,开始了内核编译之旅。
其实在内核源代码文档里面,就有许多非常有用的帮助信息,如下:
debianer:/usr/src/linux/Documentation#ls
其中在源代码目录下,有README,其中一段:
To configure and build the kernel use:
cd /usr/src/linux-2.6.N
make O=/home/name/build/kernel menuconfig
make O=/home/name/build/kernel
sudo make O=/home/name/build/kernel modules_install install
其实已经非常简单明了告诉你编译的过程。
其实在编译内核非常关键的一步就是建立一个适合你硬件的.config(在make menuconfig或者make gconfig),内核编译选项非常的多,需要具备一定的硬件知识才能选择得对。
今天编译了四次,最后才成功了。其中总结如下:
1 第一次编译,到了boot root file system就停了,我仔细看了看有关提示,居然显示/dev/hda unknow partition table(大致这样,具体忘了),
怪了,无法读取分区表信息。我就想起其中选择块设备时,有分区的各种模式选择,好像有bsd,sun,apple各种各样,由于和我机器没有关系,就都不选择。
我记起其中有一项:
native partition table support[]
//当时好像没有选择,这好像是本地分区表支持,应该选上,于是把它编译到内核里。
2 第二次就改了这个地方,编译通过,再次reboot,进去了终端(当时的心,无法形容),接下来就安装nvidia驱动,显卡驱动在linux下是以模块编译进去的,不同内核需要再次编译为模块。
接下来,问题来了:your kernel was configured to include rivafb support! The rivafb driver conficts with the nvidia driver,please reconfigure your kernel and *disable* rivafb support ,then try install nvidia driver.
原来nvidia驱动与rivafb(不知道是什么,盼望有人告知)冲突,网上找了很久,没找到解决方法,想想再来一次吧,就当是积累经验。
3 第三次就是自己改一下config,把其中一项显卡驱动riva支持去掉。不过做了一件非常“愚蠢“的事情:
make后,忘了make modules_install,查看/lib/modules/下,发现riva还存在(其实是前一次编译留下的),于是“慌了“,后来想想才明白了。不过有一些混乱,就干脆再来一次。
4 一切顺利!连显卡驱动也安上了。
其中,要注意的几点:
在官方文档:
make , make modules_install ,make install
其实make相当手工make bzImage,make modules
make install相当于自动配置好/boot目录,升级/boot/grub/menu.lst
我由于“保守“了一点,手工配置/boot目录,其实也就是配置下面四个文件:
azhoulinux@debianer:/boot$ ls config-2.6.17-6 initrd.img-2.6.17-6 vmlinuz-2.6.17-6 System.map-2.6.17-6
config-2.6.17-6 initrd.img-2.6.17-6 System.map-2.6.17-6 vmlinuz-2.6.17-6
其中config可能不必要的。
其中System.map,config,vmlinuz在编译后目录下找到,vmlinuz在debianer:/usr/src/linux/arch/i386/boot# file bzImage
bzImage: Linux kernel x86 boot executable RO-rootFS, root_dev 0x309, Normal VGA
现在讲讲initrd.img:
debianer:/usr/src/linux# mkinitramfs -o /boot/initrd.img-2.6.17-6 2.6.17.6
就手工建立initrd.img。
现在系统启动时间59.34秒(包括进入x-window),感觉快了许多。
有什么不对的请指正!
谢谢各位 |
|