RHEL4编译内核(简单)
时间:2006-08-28 来源:youngcool
前言 RHEL AS 4是redhat 公司的一个优秀的发行版,十分稳定。同时也十分易用。但易用同时也意味着更傻瓜化。安装过程的简化省去了许多的麻烦,对内核的配置少到没 有。这固然方便了普通的用户。但如果追求更高效的内核或更新的硬件支持,就需要自己来编译内核了。笔者近日因为显卡的需要而编译安装了最新的2.6.14的内核,编译过程中详细查看了内核压缩包内的readme文件,参考了一些技术文档,现在将详细过程写出来,希望能供大家参考。
一、准备
首先下载内核的压缩包,注意,需要完整的压缩包,而不是文件名里有patch的那种,那种是用来升级的。用升级包来升级的话出错就进不了系统,无法调整所以风险较大,这里不予讨论。将压缩包解压后得到类似linux-2.6.14的文件夹,将这一文件夹移动到 /usr/src/ 下。此时确保你已经正确安装gcc,编译工作马上就可以开始了。
二、编译
[paul@ParhWorkStation ~]$ su
Password:
获得root的权限。
[root@ParhWorkStation paul]#cd /usr/src/linux-2.6.14
进入内核目录。
[root@ParhWorkStation linux-2.6.14]#make mrproper
清除从前编译遗迹,注意这一步必不可少,少了这一步会导致编译出错。
[root@ParhWorkStation linux-2.6.14]#make gconfig
打开图形化的配置菜单,Gnome的用户执行make gconfig(基于Gtk),KDE的用户执行make xconfig(基于Qt)。当然还可以选择make menuconfig或make config,如果你想体验一下linux前辈们的辛苦的话。
在配置的过程中,有几点要提一下。配置的选项大部分是对硬件的支持,你一定对自己电脑的硬件很熟悉,那么那些多余的乱七八糟的驱动就可以去掉了。每一次对选项的双击会使选项遵循由Y-->M-->N的循环,Y是编译进内核,M是编译成模块,N是不进行编译。Y的话是钩,M的话是杠,N的话就是空的啦。编译进内核的话就是只要系统在跑,编译的功能就在运行,而编译成模块则是用的着的时候才加载到内核中运行,用不着的时候可以从内核中卸载,以释放内存,这显然是Linux内核的一个巨大优点。因此一般的硬件驱动都可以编译成模块,只有几个例外,其中就有硬盘控制器的驱动。
为什么硬盘控制器不能编译成模块 当你最初引导内核的时候,引导的其实是一个驻留在/boot下的内核的压缩镜像,由这个镜像挂载硬盘分区和文件系统,进而读取分区上的数据,同时加载模块。如果没有将硬盘控制器驱动编译进内核,内核就无法读取分区,更不可能加载模块了!怎么?还没理解?想想先有鸡还是先有蛋吧!
因此,要特别注意选项里对SCSI或是IDE硬盘的支持,根据自己的情况将选项选为Y,同时建议将主分区(即挂载在/上的分区)分区格式的支持也编译进内核。例如ext3。
在新的内核中ntfs分区格式的支持已经包括,很好用。
另外要提的一点是'development', 'experimental', 'debugging'这几个在'kernel hacking'下的选项,除非你真的需要,(不过反过来,如果你需要的话就不会来看本文这么初级的文章了)不要选它们。它们会使你的内核更大,也更慢。
配置好之后可以选择 'Save as...'l来以文本的形式备份所作的配置,这样如果需要再次编译,就不用重新一项项选了。最后保存,关掉窗口。
[root@ParhWorkStation linux-2.6.14]#make
开始编译,这时可以吃点零食犒劳一下,或者去床上数几只绵羊。这个过程会持续一会儿,长度与你电脑的内存成反比。如果实在不耐烦,考虑加内存吧。
[root@ParhWorkStation linux-2.6.14]#make modules_install
编译好后执行这个命令安装模块,这个过程快多了。好了,编译就到这里。
三、安装
[root@ParhWorkStation linux-2.6.14]#cp /usr/src/linux-2.6.14/arch/i386/boot/bzImage /boot/vmlinuz-2.6.14
[root@ParhWorkStation linux-2.6.14]#cp System.map /boot/System.map-2.6.14
这是将编译过程中产生的镜像复制到/boot分区下,使Grub(假定你安装时选择默认的引导器)能够引导。
[root@ParhWorkStation linux-2.6.14]#/sbin/new-kernel-pkg --mkinitrd --depmod --install 2.6.14
redhat提供这么一个工具用来生成引导时的initrd文件,里面包含了启动系统的初始信息。同时,--install参数更新了 /boot/grub/grub.conf 中的信息,添加了新内核的引导项。如果你不满意默认的引导标题等等,可以自己vim /boot/grub/grub.conf,那个配置文件可读性很强的,不会有问题。
如果有激活SELinux,那么请vim /etc/selinux/config,将SELinux disable掉,因为新内核可能无法加载SELinux。
四、重新启动
[root@ParhWorkStation linux-2.6.14]#reboot