FreeBSD 5-CURRENT而言,配置内核是必需的
在本文针对4-STABLE的那个版本中已经讨论了削减系统功能的意义。
在某种程度上,对于FreeBSD 5-CURRENT而言,配置内核是必需的。
FreeBSD 5.x是一个充满新特性的系统。目前,5.0-RELEASE已经正式推出,但第五版本这个分支仍然是CURRENT分支,在它成为5-STABLE之前,我们可能还需要等待数个月的时间,这可能意味着一个到两个RELEASE版本。
这篇文章将主要着眼于FreeBSD 5.0-CURRENT的内核配置。据我所知,这篇文章的内容至少在2003年3月以前应该是完全适合的,而在FreeBSD 5-STABLE正式标注之后,也不应该再出现什么本质的变化。当然,保险起见,我个人建议您在进行改动,并将其应用到自己的系统上之前,首先备份内核:
cd /boot
cp -R kernel kernel.good
这样,一旦出现意外情况,您将可以通过在启动时选择/boot/kernel.good/kernel来正确地引导系统。
说到这里,我不得不指出FreeBSD 5在内核文件放置方面的一个非常显著的变化。在5.0之前,内核及模块分别在/kernel和/modules/文件夹中;5-CURRENT为了便于管理,将内核及其模块都放到了/boot/kernel/文件夹。这一变化使得旧版的loader(
程序在默认情况下不能正确加载内核文件,当然,指定正确的文件名仍然可以保证4.x的loader(
程序正确加载FreeBSD 5内核,但我依旧倾向于按照UPDATING所说的那样,把升级boot, loader这一系列初启程序作为系统升级的一部分。
在正式开始介绍FreeBSD 5的内核配置之前,我还必须介绍5.0新的device.hints配置文件。device.hints配置文件位于/boot/文件夹,对于没有ISA设备的系统,这个文件基本上是没用的。这个文件取代了FreeBSD 4.x一直沿用的user config机制。FreeBSD开发组期待将来的某个时间重新加入user config机制,以让loader更加人性化,但直到笔者撰写这篇文章的时候为止,这一机制的新实现仍然没有完成。
device.hints由一系列符合下面句法的语句组成:
hint...=
如果你熟悉4.x上的loader(
配置指令,那么只需要做少量的转换就可以解决问题:
iomem 改为 maddr iosiz 改为 msize
当然,世界是美好的,FreeBSD提供了一个awk脚本来解决问题。这个脚本位于src/sys/i386/conf/,它的名字是gethints.awk。
贫了这么多,一些读者可能已经等急了。但我还得说一个FreeBSD 5和4的重大区别,那就是LINT没了。
拿掉LINT这事儿跟device.hints有关,为了不把话题扯得太远,我不打算详细描述关于这个文件的故事;先说要紧的:首先,类似4.x风格的LINT文件现在叫NOTES;其次,如果你一定要获得LINT的话,在src/sys/i386/conf里面执行下面的指令:
make LINT
即可。下面我继续“传统上”的那个内核配置文件。这个配置文件是由GENERIC改过来的,当然,删除了一些没必要的注释。红色表示我删除的东西,而蓝色表示我添进去,或做了修改的那些设置。绿色表示我没添进去,但在NOTES中曾出现过的有用的配置。
#
# DELPHIJ -- Kernel configuration file for FreeBSD/i386
#
machine i386
cpu I686_CPU
ident DELPHIJ # 签上我的名![]()
maxusers 0
# VMWare对于这条指令的模拟有问题。加上这个选项可以大大地
# 提高系统速度;我没有选中它,因为我的系统需要SMP,而且
# 不是VMWare虚拟机
SMP和这条选项的连用结果是系统崩溃!
options CPU_DISABLE_CMPXCHG
# SCHED_4BSD是传统的、经过证明的BSD调度器。它使用全局的
# 运行队列,它与CPU关系不密切,对SMP的性能不是最好的。
# 它有非常好的交互性和优先级选择机制。
#
# SCHED_ULE是新的试验性的调度器,它是为SMP设计的,但在单
# 处理器上运行一样出色。使用这个调度器的用户需要有对出现
# 非预期的崩溃和进行反馈做好心理准备。
options SCHED_ULE #ULE scheduler,SMP上快许多options INET #IPv4协议
options FFS #必须有的FFS(Unix文件系统)
options SOFTUPDATES #SoftUpdates支持,相信我,加上没错的
options UFS_ACL #ACL(访问控制表)支持
options UFS_DIRHASH #访问大目录时,以少量内存为代价提高性能
options PROCFS #进程文件系统(需要PSEUDOFS)
options PSEUDOFS #伪文件系统框架
options COMPAT_43 #兼容 BSD 4.3 [必须保留!]
options COMPAT_FREEBSD4 #兼容FreeBSD4
options SCSI_DELAY=2000 #探测SCSI前的延时
options SYSVSHM #SYSV共享内存
options SYSVMSG #SYSV消息队列
options SYSVSEM #SYSV信号量
options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B实时扩展
options KBD_INSTALL_CDEV #/dev中安装CDEV
# SMP支持
options SMP # Symmetric MultiProcessor Kernel
options APIC_IO # Symmetric (APIC) I/O
device isa
device eisa
device pci
# DEVICE_POLLING可以让dc, fxp和sis设备更平稳地运行,不幸
# 的是它不能和SMP连用。
options DEVICE_POLLING
options AUTO_EOI_1 # 8259A自动中断结束控制方式。
# 可以提高系统性能
options AUTO_EOI_2 # 没证明过这东西能用,我的机器崩了![]()
# 将这个文件保存到内核,这样将来可以用
# strings -n 3 /boot/kernel/kernel | sed -n 's/^___//p'
# 找回
options INCLUDE_CONFIG_FILE
options IPSEC #IPSec内核级支持,与IPSec互斥
options FAST_IPSEC # 快速IPSEC实现(需要相关硬件)
options IPFILTER # ipfilter支持。
options RANDOM_IP_ID # 此选项有效阻止远程探测TCP报文生成
options TCP_DROP_SYNFIN #丢弃SYN+FIN的TCP包
options ZERO_COPY_SOCKETS # 这是对4.4BSD设计缺陷的重大改进
# 可以极大地提高网络性能
device crypto # 核心crypto(加密)支持
device cryptodev # /dev/crypto硬件访问支持
device hifn # Hifn 7951, 7781, etc.
options PANIC_REBOOT_WAIT_TIME=0 # panic时重启等待时间
# 请参考tuning(7)
options NMBCLUSTERS=4096 # 对于我的服务器合适的NMBCLUSTER
makeoptions CONF_CFLAGS=-fno-builtin #不允许使用 memcmp等
# 应用程序最大、堆栈、默认内存大小。内存2GB
options MAXDSIZ=(2047UL*1024*1024)
options MAXSSIZ=(128UL*1024*1024)
options DFLDSIZ=(2047UL*1024*1024)
# ufs1 扩展属性支持。ufs2不需要
options UFS_EXTATTR
options UFS_EXTATTR_AUTOSTART
# GEOM支持
options GEOM_AES
options GEOM_APPLE
options GEOM_BDE
options GEOM_BSD
options GEOM_GPT
options GEOM_MBR
options GEOM_PC98
options GEOM_SUNLABEL
options QUOTA # 磁盘配额支持
# 优化SMP性能,把mutex(互斥体)变为自旋锁。我不敢用……
options ADAPTIVE_MUTEXES
# ATA 和 ATAPI 设备
device ata
device atadisk # ATA 磁盘驱动器
# atkbdc0同时用于控制键盘和PS/2鼠标器
device atkbdc # AT键盘控制器
device atkbd # AT键盘
device vga # VGA显示卡
# syscons是默认的控制台驱动
device sc
device agp # AGP支持
# 浮点运算支持-必须保留
device npx
device miibus # MII bus支持
# 以下PCI以太网卡需要MII bus支持才能用
device bge # Broadcom BCM570xx 千兆以太网卡
# 伪设备
device random # 随机数采集发生器(/dev/random, /dev/urandom)
device loop # 自环网络
device ether # 以太网支持
device pty # 伪tty (telnet等等)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
粗略地说说上面的选择。COM, PPC这些东西不用我说,这台机器并不需要连接打印设备,也不需要连接COM口键盘,所以一律去掉。使用ULE调度器的原因是为了给FreeBSD的开发做点贡献,如果你不喜欢冒险的话,可以考虑使用4BSD的,当然,话说回来,如此在意稳定性的话,用4-STABLE可能是更好的选择。
上述内核配置文件需要最新的CURRENT代码。如果你没有和FreeBSD中央CVS服务器同步的话,那么你可能需要首先同步代码;如果还有问题,希望能收到你的![]()

浙公网安备 33010602011771号