《NetBSD指南-18.9.2.配置内核》

NetBSD用户指南中文版、NetBSD pkgsrc指南中文版...

版主: lionux

主题已锁定
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

《NetBSD指南-18.9.2.配置内核》

帖子 leo » 2010-03-05 14:29

在NetBSD内配置内核有些艰巨。 这是因为在配置文件里很多行之间存在依赖性。无论怎样, 这样的做法是有好处的,
你需要用一个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
这个信息说明仅有I686_CPU选项需要设置. 在下一小节中, 所有的选项全不动除了PIC_DELAY选项,我们推荐这样做除非这
是一台老式电脑。本例中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
IPFILTER_LOG是应该保留的选项,因为这台服务器上将运行ipf.
下面的区域是各个子系统的详细信息, 因为这台已经运行了并且没有什么大问题, 所以我们注释掉了所有的选项。
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
...
现在我们需要在配置文件里找到它的位置. 注意 "cd"-drive 在一个atapibus上,并且需要pciide支持。 本例中与其相关的
是内核配置里的 "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
...
dmesg(8) 输出列出的唯一的设备类型是cd, 其它的可以被注释掉.
下面的例子就有些难度了, 网络接口. 这台及其有两个网络接口:

代码: 全选

...
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]
...
这里有 ex 设备. 所以在这个PCI区域里所有剩下的全可以移除。 此外, 剩下:

代码: 全选

exphy*  at mii? phy ?                   # 3Com internal PHYs
下的每个单独的行同样也可以被注释掉。
18.9.2.3. Multi Pass
当我调整一个内核时, 我喜欢从远程通过一个X window的会话来进行, 在一个窗口中显示dmesg输出, 在另一个窗口中是配置文件。
有时需要开几个通道,因为过分精简内核可能会导致删除依赖体。

主题已锁定

在线用户

正浏览此版面之用户: 没有注册用户 和 1 访客