由于所有的系统不管bsd还是Linux其核心就是kernel,它负责进程调度,内存分配,驱动程序,安全子系统,网络,文件系统等所有核心关键任务,所以本人对内核有着狂热的折腾精神,编译过netbsd,openbsd,freebsd,debian,Oracle Linux.CentOS就差没去定制编译windows内核了呵呵,经过多次的失败与成功总结了不少的经验,特此分享给大家:
1,所有的bsd的系统内核编译很简单,无非就是找到GENREIC内核配置文件,看NOTES文件修改定制,再用config 生成内核编译目录,再去make && makeinstall非常的简单没有什么技术含量(指不用太操心),难度都在如何优化,看电脑配置,去除无用驱动,加载有用功能,这里就不多讲了。
2,说到Linux就非常的变态了,有的标准内核 还有无数个发行版内核,他们的却别是什么呢,这么说吧,标准内核就是通用内核,没有那么多专用设备驱动,功能也是稳中求胜,没有rhel那么前卫,但是也没有debian那么保守呵呵,如果你是狂热的内核开发者,或者喜欢搞定定制的话,就选择他,比如打上加固内核安全的gresecurity tomoyo 补丁等。它的编译相对来说简单点不需要那么操心,只要在各个平台上面,安装好gcc ncursec kernel-build等开发环境,就可以使用传统的make menuconfig 或者 根据当前的配置自动精简make localmodconfig 再进行裁剪,定制,之后就是make all && make modules_install && make install在debian上还要自己mkinitramfs img文件,在centos oracle Linux上就不需要了,他会自动创建。
3,再来说说今天的重点吧,各个发行版内核的特点,有些人老是问,到底debian centos有什么却别呢? 其实说到底最大的却别就是这个内核了,当然如果和bsd比的话内核就差别更大了,包括用户态程序差别也大,这几就不提了连个牛马一样的东西没什么好比的,这几就是比Linux各个发行版。主要是debian 与 centos代表发行版了SUSE就不考虑了同理可推!
debian的内核比标准版的内核更保守,去除了很多非free的固件驱动代码,其他的核心功能代码基本还是标准内核的,再根据当前自身支持的用户态程序配合修改了一些bugs主要是兼容性的,当然也有少数安全性修补。本身对标准内核没有贡献自己的特有代码!
centos的内核来自于rhel强大的商业开源公司,由于rhel对于标准内核贡献了非常多的代码,在所有大型公司中贡献代码最多的,所以标准内核很多东西都是从rhel公司获取的,所以他的内核更加前卫,新功能多比如kvm就是rhel首先提出来的,不光如此,由于rhel是大型商业公司,得到了很多硬件开发商的鼎力支持支持最多,最专一的硬件,(这点比debian强)支持的硬件更多,里面还包含很多非free的驱动在里面!
不过不管是debian也好centos也好由于都是主流的开源系统,开发者都很多,也都是经过千万次测试才发布的,所以稳定性,安全性都比标准内核强,标准内核就好像是一个实验战场一样,一有新能共就往里面放,也不管有什么漏洞不漏洞了!他们使用的基础内核都是老掉牙的Linux-2.6.32系列,就是应为他们都加入了很多自己的东西在里面,所以我们编译定制的时候要千万小心,不能像标准内核那样,随心所欲的定制,裁剪,一不小心就会出错,而且找不出原因(gcc的通病,报错都是天文,期待llvm)对此我的经验是:
1,首先安装各自开发编译环境,吧/boot/config-2.6.32* 复制到他们专有的内核解压文件中去,不是上的内核,是从他们官网下载发型版的内核,怎么下也不说了,不难。
2,也是使用make menuconfig && make && make install来,不过就是在make menuconfig定制的时候,不要随便裁剪其中的选项,只动动那些非动不可的选项,比如cpu型号, io调度器 , 内存分配模式 ,内核抢占模式开关,cpu中断频率,seLinux开关,虚拟化开关,还有就是genera选项中的profilling keba等分心模块开关
其他的千万不要动,一句话,非要动的就动,可动可不动的不要动!!非常严格,比起标准内核编译来说!
3,还有就是debian默认的内核配置比起centos来说更为激进些,很多选项都比centos设置的极端些(所以很多测试默认下debian ubutun比centos强大些),新意些,可更具自身的需求,谨慎更改,
总结起来就是,发行版内核一定要知道自己需要什么,那些需要改,改了那些,最好不要一次更改完成,否则出了问题不知道哪里出的,要一个大选项,一个大选项的更改编译出了问题就知道出在哪里,一个大的选项内的改完了没问题再改另外一个大块内的内容!