你需要用一个ASCII编辑器就可以进行得到一个新内核和dmesg输出。内核配置文件在 src/sys/arch/ARCH/conf 下,
这里的 ARCH 是你的构架名称 (例如, SPARC应该在 src/sys/arch/sparc/conf下面).
当你找到了你的配置文件后, 做一份拷贝并在此拷贝上删除(注释掉) 所有你不需要的选项. 这时 dmesg(8) 可以大
展身手了. 一个干净的 dmesg(8)-output 将显示内核启动时检测出的所有设备. 使用 dmesg(8) 输出, 可以检测出
你确实需要的设备。 如果您想此步骤自动化, 看看 "adjustkernel" 软件包。
18.9.2.1. 一些配置选项的实例
本例中, 重新配置一个ftp服务器的内核,启用了最少的驱动程序和选项以及一些可能提高系统性能的项目 (再说一
次, 并非一定要小一点,尽管应该这样). 首先我们先看一下主要的配置选项. 因此, 在 /usr/src/sys/arch/i386/conf
目录内,我们给GENERIC文件做一个拷贝,并将其命名为FTP, 然后编辑这个FTP文件.
在文件的开始出有很多maxusers选项, 这些选项不用动, 但是, 在有很多用户的系统中稍微调整一下这个值会对系统性能
有益。接下来是CPU支持, 我们先看一下dmesg输出:
代码: 全选
cpu0: Intel Pentium II/Celeron (Deschutes) (686-class), 400.93 MHz
是一台老式电脑。本例中PIC_DELAY选项是开启的,因为686是“相对来说比较新的.”
在最后一个区域内全是关于compat(兼容性)的选项, 在这个系统上实在没有必要调整任何选项. 但是在compat区域, 有几
个选项不需要启用, 还是因为这台机器是严格意义上的FTP服务器, 所有的兼容选项将被禁用.
下一个区域是文件系统, 还是因为它是一台服务器, 所以一般不用启用对文件系统的支持, 下面是留下的系统支持的文件系统:
代码: 全选
# File systems
file-system FFS # UFS
file-system LFS # log-structured file system
file-system MFS # memory file system
file-system CD9660 # ISO 9660 + Rock Ridge file system
file-system FDESC # /dev/fd
file-system KERNFS # /kern
file-system NULLFS # loopback file system
file-system PROCFS # /proc
file-system UMAPFS # NULLFS + uid and gid remapping
...
options SOFTDEP # FFS soft updates support.
...
代码: 全选
options INET # IP + ICMP + TCP + UDP
options INET6 # IPV6
options IPFILTER_LOG # ipmon(8) log support
下面的区域是各个子系统的详细信息, 因为这台已经运行了并且没有什么大问题, 所以我们注释掉了所有的选项。
18.9.2.2. 一些驱动程序
尽管配置文件中的可修改选项相对来说不多,并容易覆盖, 但是, 对设备驱动程序来说就是另一回事了. 在下面的这些例子
里我们分析两个设备驱动程序及其相关的裁减掉的 “区域” 。首先, 一个小例子: dmesg里的cdrom是下列行:
代码: 全选
...
cd0 at atapibus0 drive 0: <CD-540E, , 1.0A> type 5 cdrom removable
cd0: 32-bit data port
cd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 2
pciide0: secondary channel interrupting at irq 15
cd0(pciide0:1:0): using PIO mode 4, Ultra-DMA mode 2 (using DMA data transfer
...
是内核配置里的 "IDE and related devices" 区域。 到这里值得提醒一下读者, 在IDE区域及周围是也有ISA, PCMCIA的等,
这台机器的 dmesg(8) 输出显示没有PCMCIA设备, 所以,理所应当可以删除所有的PCMCIA相关选项. 但是我们先看 "cd" 驱动器.
在 IDE 区域的开始处有:
代码: 全选
...
wd* at atabus? drive ? flags 0x0000
...
atapibus* at atapi?
...
代码: 全选
...
# ATAPI devices
# flags have the same meaning as for IDE drives.
cd* at atapibus? drive ? flags 0x0000 # ATAPI CD-ROM drives
sd* at atapibus? drive ? flags 0x0000 # ATAPI disk drives
st* at atapibus? drive ? flags 0x0000 # ATAPI tape drives
uk* at atapibus? drive ? flags 0x0000 # ATAPI unknown
...
下面的例子就有些难度了, 网络接口. 这台及其有两个网络接口:
代码: 全选
...
ex0 at pci0 dev 17 function 0: 3Com 3c905B-TX 10/100 Ethernet (rev. 0x64)
ex0: interrupting at irq 10
ex0: MAC address 00:50:04:83:ff:b7
UI 0x001018 model 0x0012 rev 0 at ex0 phy 24 not configured
ex1 at pci0 dev 19 function 0: 3Com 3c905B-TX 10/100 Ethernet (rev. 0x30)
ex1: interrupting at irq 11
ex1: MAC address 00:50:da:63:91:2e
exphy0 at ex1 phy 24: 3Com internal media interface
exphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
...
exphy0 at ex1 phy 24: 3Com internal media interface
我们发现实际上只有两个物理网卡, 像这个cdrom, 简单地移除dmesg里不包含的名称就可以了. 在网络区域的开始处是:
代码: 全选
...
# Network Interfaces
# PCI network interfaces
an* at pci? dev ? function ? # Aironet PC4500/PC4800 (802.11)
bge* at pci? dev ? function ? # Broadcom 570x gigabit Ethernet
en* at pci? dev ? function ? # ENI/Adaptec ATM
ep* at pci? dev ? function ? # 3Com 3c59x
epic* at pci? dev ? function ? # SMC EPIC/100 Ethernet
esh* at pci? dev ? function ? # Essential HIPPI card
ex* at pci? dev ? function ? # 3Com 90x[BC]
...
代码: 全选
exphy* at mii? phy ? # 3Com internal PHYs
18.9.2.3. Multi Pass
当我调整一个内核时, 我喜欢从远程通过一个X window的会话来进行, 在一个窗口中显示dmesg输出, 在另一个窗口中是配置文件。
有时需要开几个通道,因为过分精简内核可能会导致删除依赖体。