大部分的 NetBSD 使用者,不论早晚都将会编译一个个人化的核心。 这带给你许多好处:
你可以缩减核心的大小,而因此增加内存空间(例如, 从 2.5 MB 到 1.2 MB)。在 1.5 版的 NetBSD 编译一个 个人化核心可以从 4.7 MB 缩减为 1.9 MB。
你可以增进效能。
你可以转换系统。
你可以解决硬件外围侦测/冲突的问题。
你可以设定一些选项(例如,键盘配置,BIOS 时钟, ...)
你可以更加了解系统。
你可以从和得到安装系统的地方,得到核心原始码(例如, ftp://ftp.netbsd.org/.) 记得要下载和你执行的系统相同版本的原始码。 |
安装程序 Sysinst 并不会将核心原始码 复制到硬盘上,因此它们必须被手动地安装。核心原始码档案位于 source/sets 目录且命名为 syssrc.tgz。
# gzip -dc syssrc.tgz | (cd / ; tar xvf -)
请耐心等待:这个作业会花费数分钟,因为这个压缩档包含成千个档案。 原始码会位于 /usr/src/sys;会有一个 炼结 sys 指向这个目录。所以底下的作业会有 相同的效果:
# cd /usr/src/sys # cd /sys
在完成解压缩之后,你可以移除不需要的架构所在目录,以保留 硬盘空间。cd 至 /sys/arch 并且删除你不需要的目录。在 i386 平台为例,你可以只保留 i386 目录。对其他的平台而言,可能需要保留不只一个目录。
在原始码完成安装以后,你便可以建立个人化核心:这并没有 你想象中的困难。事实上,建立新的核心只需四到五个步骤, 将会在以下的段落中做描述。
在编译核心以前,意大利使用者应该考虑修改预先定义的键盘配置 来使用意大利式的键盘,这已经定义在原始码的档案 /sys/dev/pckbc/wskbdmap_mfii.c 中了。 在预先定义的键盘配置中,一些对程序设计者有用的字符被遗失了 (例如,左箭头和右箭头等)这是一个可选择的配置:
static const keysym_t pckbd_keydesc_it[] = { ... KC(8), KS_7, KS_slash, KS_braceleft, KC(9), KS_8, KS_parenleft, KS_bracketleft, KC(10), KS_9, KS_parenright, KS_bracketright, KC(11), KS_0, KS_equal, KS_braceright, KC(12), KS_apostrophe, KS_question, KS_grave, KC(13), KS_igrave, KS_asciicircum, KS_asciitilde, KC(26), KS_egrave, KS_eacute, KS_bracketleft, KS_braceleft, KC(27), KS_plus, KS_asterisk, KS_bracketright,KS_braceright, ...
预先的配置定义了这些对照表:
Keys | Character |
---|---|
Alt Gr + 7 | { |
Alt Gr + 8 | [ |
Alt Gr + 9 | ] |
Alt Gr + 0 | } |
Alt Gr + ' | ` |
Alt Gr + ì | ~ |
Alt Gr + é | [ |
Alt Gr + + | ] |
Shift + Alt Gr + è | { |
Shift + Alt Gr + + | } |
终端机驱动程序: 从版本 1.4 开始,NetBSD使用了 wscons, 跨平台的终端机驱动程序来处理屏幕,键盘和鼠标。 先前的版本则使用 pccons 或 pcvt。详细说明请看 Chapter 12。
Note: 这里描述的目录是以 i386 为例的。其它平台的使用者必须 至换成适当的目录(通常是 arch 底下 的子目录)。
核心设定文件定义了被核心支持的装置种类,数目和特性,就如同 有数个核心设定选项一样。核心设定档位于 /sys/arch/i386/conf 目录。最简单 的建立方法是复制一个现有的并编辑它:在大部分的平台上, 通常最好的选择是 GENERIC 设定档。在此设定档中,有许多的 批注来描述选项;更详尽的说明在 options(4) 在线手册中。
# cd /sys/arch/i386/conf/ # cp GENERIC MYKERNEL # vi MYKERNEL
核心名称: 基于历史,核心设定档的名称都是大写。
修改核心设定档,基本上包含三个作业:
包含/不包含在核心中支持的硬件装置(例如,如果不需要, SCSI 支持可以移除)
打开/关闭在核心中支持的特征(例如,打开 NFS client 支持, 打开 Linux 仿真功能, ...)
更改核心参数。
凡是行开头具有 "#" 符号的便是被标记的;被标记的 行表示被关闭支持,要打开支持则要移除标记字符。最好使用 标记行来关闭支持而不要删除该行;我们以后便可以利用解除 标记来打开它们。
dmesg 指令的输出可以被用来决定哪一行 应该被关闭。每一行的型态为:
<XXX> at <YYY>
XXX 和 YYY 两者都必须设定在核心设定档中。在建立最小化设定时, 你可能需要做一些试验,在不具有 SCSI 和 PCMCIA 的桌上型计算机, 可以将核心的大小减半。
你应该也检查不需要的选项是否被关闭。每一个选项都有简短的 批注描述它们,对了解该选项是很有帮助的。需多选项在 options(4) 中都有更详尽的叙述。你应该设定正确的选项来支持 各种键盘配置和区域性的时间。例如,在意大利:
options RTC_OFFSET=-60 ... options PCKBD_LAYOUT="KB_IT"
adjustkernel Perl script 可以在 被找到。 http://www.feyrer.de/Misc/adjustkernel, 分析了 dmesg 的输出并自动地产生 最小化的核心设定档。你需要在系统上安装 Perl 来执行。 要安装新的软件请参考 Chapter 8。 如果你现在要安装 Perl,下载预先编译好的 package perl-5.00404.tgz 并执行以下指令:
# pkg_add perl-5.00404.tgz
现在 Perl 被安装及设定好了,可以开始使用:真是非常简单...
你现在可以执行 script:
# cd /sys/arch/i386/conf # perl adjustkernel GENERIC > MYKERNEL
我已经试过这个 script 而且它的效果非常好,减少了我许多 手动的编辑工作。要注意的是这个 script 只设定了有效的装置: 你仍然必须手动地增加其它的选项(例如,Linux 仿真,...)
当你完成核心设定档的修改以后(我们将称它为 MYKERNEL),你可以键入以下指令:
# config MYKERNEL
如果 MYKERNEL 没有错误,则 config 程序将会建立必要的档案 来编译核心,否则,我们必须修正错误并再一次地执行 config 程序。
用以下指令来产生 Dependencies 和编译核心:
# cd ../compile/MYKERNEL # make depend # make
编译会因为发生错误而停止;会有种种的原因但是大多数发生 的错误是核心设定档没有通过 config 的 检验。有时候错误的原因是因为硬件问题(大多因为 RAM): 编译的工作比其它的应用程序的执行更加耗费硬件资源。另一个 典型的错误是:选项 B 被打开但是所需要的另一个选项 A 没有打开。
完成编译需花费几分钟到几小时,视硬件而定。 请看以下的范例:
CPU | RAM (MB) | Approx. time |
---|---|---|
486 DX2 50 | 20 | 1 hour |
P166 | 96 | 15 minutes |
PIII | 128 | 5 minutes |
68030/25 | 8 | 4 hours |
make 指令最后会在编译目录中产生 netbsd 档案:在储存原先的核心后,这个档案应该被复制到根目录底下。
# mv /netbsd /netbsd.old # mv netbsd /
个人化的设定可以缩减核心的大小。在以下的例子中, netbsd.old 是原先安装的核心而 netbsd 是新的核心。
-rwxr-xr-x 1 root wheel 1342567 Nov 13 16:47 /netbsd -rwxr-xr-x 1 root wheel 3111739 Sep 27 01:20 /netbsd.old
在重开机后将会使用新核心:
# reboot
当重开机后,可能会发生心核心并不如预期般的运作或 甚至不能开机。别担心:如果这个情况发生,只要利用之前保留的 核心来重开机并移除新的(最好重开机在"单一使用者" 模式)
将机器重开机
在开机提示倒数 5 秒之内按下空格键
boot:
键入
> boot netbsd.old -s
现在使用以下指令来还原旧版的核心:
fsck / mount / mv netbsd.old netbsd exit