8.2. 为何要编译自定义的核心?

早期的FreeBSD的核心(Kernel)被戏称为“巨石”。因为当时的核心是一个非常大的程序,且只支持固定的硬件装置,如果您想改变核心的设定,就必须编译一个新核心并重启,才能使用。

现今,大多数在FreeBSD核心的功能已采用模块(Module)的方式包装,并可依需求动态从核心加载或卸载。这使得执行中的核心能够快速调节新硬件环境并在核心开启新的功能,这就是所谓模块化核心(Modular Kernel)。

尽管如此,还是有一些功能因使用到静态的核心设定须要编译,因为这些功能与核心紧密结合,无法将做成可动态加载的模块。且部份强调安全性的环境会尽量避免加载与卸载核心模块,且只要将需要的功能静态的编译到核心当中。

编译自定义的核心几乎是每位进阶的BSD使用者所必须经历的过程。尽管这项工作可能比较耗时,但在FreeBSD的使用上会有许多好处。跟必须支持大多数各式硬件的GENERIC核心相比的话,自定义的核心可以更『体贴』,只支持『自己硬件』的部分就好。自定义核心有许多项优点,如:

在编译自定义核心之前,请思考要这么做的原因,若是因为需要特定硬件的支持,很可能已有既有的模块可以使用。

核心模块会放在/boot/kernel并且可使用kldload(8)动态加载到执行中的核心。大部份的核心驱动程序都有可加载的模块与操作手册。例如ath(4)无线以太网络驱动程序在其操作手册有以下信息:

Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

    if_ath_load="YES"

加入if_ath_load=“YES”/boot/loader.conf会于开机期间自动加载这个模块。

部份情况在/boot/kernel会没有相关的模块,这对于某些子系统大多是真的。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.