什么是核心( Kernel )
·Linux Distribution:
假如您已经从前面一路走来都没有休息的话,那么问您一个问题好了,那就是『什么是 Linux distribution ?』呵呵!应该还没有忘记吧? Linux distribution 就是各个开发 Linux 这个作业系统的公司所丢出来的安装光碟啦!举个截至目前为止(2002/10)市场占有率蛮高的几个套件,例如:
Red Hat , Mandrake , OpenLinux(Caldera)
等等,这些都是开发 Linux 作业系统的公司!好了,那么怎么这么多家公司呀!那他们都是 Linux 吗?没错!他们都是相同的使用 Linux 的『核心』来进行套件的开发的!也就是说,他们『本质』上都是一样的!比较不同的地方可能是他们使用的套件不同或者是新加入的某些工具不同而已!基本上,他们都是 Linux !所以啰,认真的学习某一个 distribution 也就够了!其他的 distribution 绝大部分都是相同的耶!
·Kernel:
那么到底什么是核心呢?还记得我们在前面的 BASH shell 部分提到过:电脑真正在工作的东西其实是『硬体』,不是 Windows 、不是 Linux 也不是 Unix!其实就是 CPU 啦、记忆体啦、硬碟啦、音效卡啦、网路卡啦、、等等的硬体配备,那么如何控制这些硬体呢?那就是核心的工作了!也就是说,核心是一个『作业系统』最底层的咚咚啦!你所希望电脑帮你达成的各项工作,都需要透过『核心』的帮助才行!当然啰,假如你想要达成的工作是核心所没有办法提供的,那么你自然就没有办法透过核心来控制电脑使他工作啰!又假如你想要有网路功能(例如 NAT 服务),但是你的核心偏偏忘记加进去这项功能,那么不论你如何『卖力』的设定该网路套件,很抱歉!不来电??换句话说,你想要让电脑进行的工作,都必须要『核心有支援』才可以!!这个标准不论在 Windows 或 Linux 这几个作业系统上都相同!假如有一个人开发出来一个『全新的硬体』,目前的核心不论 Windows 获 Linux 都不支援,呵呵!那么不论你用什么系统,哈哈!这个硬体都是英雄无用武之地啦!那么是否了解了『核心』的重要了呢?没错!所以我们需要来了解一下如何编译我们的核心啦!
关于驱动程式与核心的问题:很多朋友经常感到困惑的,就是 Linux 上面针对最新硬体的驱动程式总是慢了几个脚步,所以觉得好象 Linux 的支援度不足!其实不可以这么说的,为什么呢?因为在 Windows 上面,对于最新硬体的驱动程式需求,基本上,也都是厂商提供的驱动程式才能让该硬体工作的,因此,在这个『驱动程式开发』的工作上面来说,应该是属于硬体发展厂商的问题,因为他要我们买他的硬体,自然就要提供消费者能够使用的驱动程式啦!所以,假如大家想要让某个硬体能够在 Linux 上面跑的话,那么似乎可以发起一人一信的方式,强烈要求硬体开发商发展 Linux 上面的驱动程式!这样一来,也可以促进 Linux 的发展呢!
·Linux 核心放在哪里?
好问题!那么 Linux 核心放在哪里呢?嘿嘿!还记得我们之前在安装 Red Hat 7.2 里头就提过了吧!而且在开机的流程里头也有说明过,那个开机的顺序是:
1.BIOS
2.MBR(就是 Lilo 或 Grub )取得 boot loader;
3.取得核心 kernel 的资料并载入
4.init
5.很多 scripts
6.login 与 shell
看到了吧!那个第三步骤就需要 kernel 啰!那个 kernel 其实就是 lilo.conf 里头说的 image 指到的那个档案,也就是 vmlinuz 这个档案啦!放置在 /boot 里头!我们需要的编译出来的核心档案就是这一个东西!除此之外,由于近来的核心通常是支援模组的,那个外挂模组则是放置在 /lib/modules/`uname -r` 里面啰!
我干嘛要更新核心
这个『核心』是除了 BIOS 之外,一个作业系统中最早被启动的东西,他包含了所有可以让硬体与软体工作的资讯,所以,假如没有搞定核心的话,那么你的系统肯定会有点小问题!好了,那么是不是将『所有目前核心有支援的东西都给他编译进去我的核心中,那就可以支援目前所有的硬体与可执行的工作啦!』,这话说的是没错啦,但是你是否曾经看过一个为了怕自己今天出门会口渴、会饿、会冷、会热、会被车撞、会摔跤、会被性骚扰,而在自己的大包包里面放了大瓶矿泉水、便当、厚外套、短裤、防撞钢梁、止滑垫、电击棒....等一大堆东西,结果却累死在半路上的案例吗?当然有!但是很少啦!我相信不太有人会这样做!(会这么做的人通常都已经在医院了~)取而代之的是会看一下天气,冷了就只带外套,热了就只带短衣、假如穿的漂亮一点又预计晚点回家就多带个电击棒、出远门到没有便利商店的地方才多带矿泉水....说这个干什么!对啦!就是要您了解到,核心的编译重点在于『你要你的 Linux 作什么?』,是啦!假如没有必要的工作,就干脆不要加在你的核心当中了!这样才能让你的 Linux 跑得更稳、更顺畅!这也是为什么我们要编译核心的最主要原因了!
说到这里忽然想到以前国军研究的『经国号战斗机』事件,在当时,经国号里头的配备都是『最棒的!』包括测量仪器、瞄准配备、武器系统等等,但是呢,却配上一部普普通通的客机用引擎!挖哩ㄌㄟ?最早期试飞的时候,经国号竟然只能『在跑道上滑行!』真是悲哀!同样的道理, Linux 的核心也是这样的,假如你的硬体与核心之间没有办法达到良好的配合,那么 Linux 确实可能会跑得不很顺畅!!
Linux 的核心有几个主要的特色,除了『Kernel 可以随时、随各人喜好而更动』之外,Kernel 的『版本更动次数太频繁』也是一个特点!所以啰,除非你有非凡需求,否则一次编译成功就可以啦!不需要随时保持最新的核心版本,而且也没有必要(编译一次核心要粉久的ㄋㄟ!)。
话说到这里又忽然想到今天看到的一篇文章,大意是说老板想要雇用的人会希望是 Linux 的老手,因为他们比较轻易了解问题的所在,除此之外,假如有任何问题发生,由于其使用 Linux 是可以随时修补漏洞的!但是假如是 Windows 的话,就得要将机器关闭,直到 MS 推出修补套件后才能再启用~
那么是否『我就一定需要在安装好了 Linux 之后就赶紧给他编译核心呢?』,老实说,『并不需要的』!这是因为几乎在每一个 distribution 当中,他们已经预设好了相当大量的模组了,所以几乎使用者经常或者可能会使用到的资料都已经被编译成为模组(这个『模组』的意义后面会再解释),也因此,呵呵!我们使用者确实不太需要重新来编译核心!尤其是『一般的使用者,由于系统已经将核心编译的相当的适合一般使用者使用了,因此一般入门的使用者,基本上,不太需要编译核心』。OK!那么鸟哥闲闲没事干跑来写个什么东西?既然都不需要编译核心还写编译核心的分享文章,鸟哥卖弄才学呀!?很抱歉, VBird 虽然是个『不学有术』的混混,却也不会平白无故的写东西要您来指教~当然是有需要才会来编译核心啦!编译核心的时机可以归纳为几大类:
·新功能的需求:我需要新的功能,而这个功能只有在新的核心里面才有,那么为了获得这个功能,只好来重新编译我的核心了(例如 iptables 这个防火墙机制只有在 2.4.xx 版本里面才有,而新出产的 AGP 显示卡,很多也需要新的核心推出之后,才能正常而且有效率的工作!)再举个例子,在之前的 Red Hat 7.2 的版本中,由于预设是将 CD-ROM 编译成核心的『模组』,也就是说,核心本身还没有支援 CD-ROM 的功能,必须要挂上模组之后才能使用与读取这个 CD-ROM !是否觉得很麻烦呢?呵呵!那么这个时候,假如你想要直接让 kernel 支援 CD ROM 的话,就得要重新编译核心啰;
·原本核心太过臃肿:假如您是那种对于系统『稳定性』很要求的人,那么对于核心多编译了很多莫名其妙的功能而不太喜欢的时候,那么就可以重新编译核心来取消掉该功能啰;
·与硬体的搭配稳定性:由于原本 Linux 的核心大多是针对 Intel 的 CPU 来作开发的,所以假如你的 CPU 是 AMD 的系统时,有可能(注重!只是有可能,不见得一定会如此)会让系统跑得『不太稳!』就 VBird 的经验来看,使用旧的 Pentum 系列的旧机器安装 Linux 的结果,还没有胡乱当机的经验!但是安装在 K6-2, K6-3 上面的 Linux ,通常需要重新编译一下核心会比较稳定一些!
·其他:就是你需要非凡的环境需求时,就得自行设计你的核心啰!(像是一些商业的套装软体系统,由于需要较为干净的作业系统,那么他们的核心就需要更简洁有力了!)
另外,需要注重重新编译核心虽然可以针对你的硬体作最佳化的步骤(例如刚刚提到的 CPU 的问题!),不过由于这些最佳化的步骤对于整体效能的影响可能还不到百分之五,因此假如是为了增加效能来编译核心的话,基本上,效益不大!然而,假如是针对『系统稳定性』来考量的话,那么就有绝对充分的理由来支持您重新编译核心啰!
『假如系统已经运行很久了,而且也没有什么大问题,加上我又不增加冷门的硬体设备,那么建议就不需要重新编译核心了!』,因为重新编译核心的最主要目的是『想让系统变的更稳!』既然您的 Linux 主机已经达到这个目的了,何必再编译核心?不过,就如同前面提到的,由于预设的核心不见得适合您的需要,加上预设的核心可能并无法与您的硬体配备相配合,所以 VBird 通常都是『一安装完 Linux ,第一个动作(在还没有进行任何的设定之前,也没有上网,也没有更新套件等等,反正就是安装完毕 Linux ,第一次进入 Shell 时!)马上就是以最新版本的 kernel 重新编译一个属于我这部主机的核心!』以让我的核心都能够相当的符合我的硬体配备,让系统运作的更顺畅!
然而由于『核心的主要工作是在控制硬体!』所以编译核心之前,请先了解一下您的硬体配备,与您这部主机的未来功能!由于核心是『越简