28.4 机器无关的内核选项注解
机器无关选项构成内核的核心抽象层,实现跨硬件平台可移植性。本节译注 sys/conf/NOTES 中的通用配置选项,按功能类别列出原文与中文释义。
- 原文:freebsd-src/main/sys/conf/NOTES
- 版本:random: allow disabling of entropy harvesting from keyboard & mice
技巧
可直接将下面的条目剪切并粘贴到内核配置文件中。
以
device、options、machine、ident、maxusers、makeoptions、hints等开头的行应放入将要运行 config(8) 的内核配置文件中。以
envvar hint.开头的行应放入 hints 文件中。如需内核测试构建,请使用
make LINT创建旧式的 LINT 文件。此文件是机器无关的内核配置说明。
技巧
NOTES 约定和风格指南:
大段注释应以仅包含注释字符的一行开始和结束。
描述特定对象时,如果存在块注释,应先写块注释。接下来按顺序写 device、options 和 hints 条目。所有 device 和 option 行都必须有注释,且注释不能只是重复 device 或 option 名称。如可能,注释应简明并放在同一行。设备和子系统的详细说明应放在 man 页中。
options与选项名之间用一个空格加一个制表符分隔。device与设备名之间用两个空格加一个制表符分隔。option 或 device 后的注释应在注释字符后加一个空格。要注释掉禁用代码的负选项(因此不应在 LINT 构建中启用),在options前加#!。
ident LINT这是内核的“标识”,通常应与内核的名称相同。
maxusers 10参数 maxusers 通过 subr_param.c 中定义的公式控制多个内部系统表的静态大小。
省略此参数或将其设置为 0,系统将根据物理内存自动调整大小。
#hints "LINT.hints" # 查找设备的默认位置静态编译设备连接信息,而非使用 /boot/device.hints。
#env "LINT.env"使用以上方法将值编译进内核,以便内核可以通过 getenv()(或者用户空间的 kenv(1))访问。文件格式为 variable=value,详见 kenv(1)。
makeoptions CONF_CFLAGS=-fno-builtin # ①② 禁止使用 memcmp 等函数
#makeoptions DEBUG=-g # ③ 为内核构建包含 gdb(1) 调试符号的版本
#makeoptions KERNEL=foo # ④ 构建内核 "foo" 并安装到 "/foo"
#makeoptions MODULES_OVERRIDE="ext2fs sound/sound sound/driver/maestro3" # ⑤ 只构建 ext2fs 模块以及需要的声音系统部分。
makeoptions DESTDIR=/tmp # 将目标安装目录临时设置为 /tmp①:
makeoptions参数可将变量传递给构建区域生成的 Makefile。②:
CONF_CFLAGS提供了一些额外的编译程序标志,这些标志会在大多数其他标志之后添加到${CFLAGS}中。在此处,使用它以禁止使用非最优的 gcc 内建函数(例如memcmp)。③:
DEBUG是一个特殊标志。
下面的做法等同于执行 config -g KERNELNAME,会生成 kernel.debug,该内核带有调试信息 -g,同时还会生成一个普通的 kernel。使用 make install.debug 可以安装调试内核,但通常没有必要,因为内核不会加载调试符号,在内核中也没有用处。
④:重命名
KERNEL,即更改内核的默认名称。⑤:
MODULES_OVERRIDE可用于限制构建的模块列表,仅编译指定的模块。
options MAXDSIZ=(1024UL*1024*1024)
options MAXSSIZ=(128UL*1024*1024)
options DFLDSIZ=(1024UL*1024*1024)FreeBSD 进程使用系统资源时有一定限制。更多细节,请参见:getrlimit(2)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=getrlimit&sektion=2。每个资源限制都有两个值:“软限制(soft limit)”和“硬限制(hard limit)”。
可以在系统正常运行时修改软限制,而硬限制只能在启动时设定。它们的默认值定义在 sys/架构/include/vmparam.h 中。有两种方式可以修改上述限制:
- 在内核编译时设置值。下面的选项可将该限制提高到 1 GB。通过修改相关参数,还可以进一步提高这些值。
- 在 /boot/loader.conf 文件中设置可调节参数:
kern.maxswzone、kern.maxbcache、kern.maxtsiz、kern.dfldsiz、kern.maxdsiz、kern.dflssiz、kern.maxssiz和kern.sgrowsiz。
/boot/loader.conf 文件中的设置会覆盖内核配置文件中的任何值。有关更多细节,请参见 sys/kern/subr_param.c 中的函数 init_param1。建议使用 /boot/loader.conf.local 文件扩展本地配置,避免直接修改 /boot/loader.conf 文件。
options BLKDEV_IOSIZE=8192BLKDEV_IOSIZE 可设置用户块设备 I/O 使用的默认块大小。
注意
通过带有非零分区块大小的标签指定块设备时,标签会覆盖该值。默认值为
PAGE_SIZE。
options DFLTPHYS=(64*1024) # DFLTPHYS 表示原始(raw)I/O 块设备访问的安全大小,默认值 64K
options MAXPHYS=(128*1024) # MAXPHYS 表示原始(raw)I/O 块设备访问的最大大小,默认值 128K对于已知可靠的设备,读写操作将分割成 MAXPHYS 大小的块;对于其他设备,则使用 DFLTPHYS 大小的块。某些应用在使用较大原始 I/O 访问块时性能更好。
注意
某些虚拟存储器(VM)参数是从这些值推导出来的,将它们设置得过大可能会导致内核无法启动。
options INCLUDE_CONFIG_FILE # 将此文件内置进内核可将此配置文件实际存储到内核二进制文件中。详见 config(8)。
options BOOTVERBOSE=1
options BOOTHOWTO=RB_MULTIPLE各种启动参数的编译时默认值。
options BOOT_TAG=\"\"dmesg 启动标签的编译时默认值。
默认启动标签;可以使用 loader 可调参数 kern.boot_tag 以覆盖。当前启动的标签也通过 sysctl kern.boot_tag 暴露。
options BOOT_TAG_SZ=32内核静态缓冲区应容纳的最大启动标签大小。BOOT_TAG 及其相关可调参数的最大尺寸。
options GEOM_CACHE # 磁盘缓存
options GEOM_CONCAT # 磁盘串联
options GEOM_ELI # 磁盘加密
options GEOM_GATE # 用户态服务
options GEOM_JOURNAL # 日志功能
options GEOM_LABEL # 提供者标签化
options GEOM_LINUX_LVM # Linux LVM2 卷
options GEOM_MAP # 基于映射的分区
options GEOM_MIRROR # 磁盘镜像
options GEOM_MULTIPATH # 磁盘多路径
options GEOM_NOP # 测试类
options GEOM_PART_APM # Apple 分区
options GEOM_PART_BSD # BSD 磁盘标签
options GEOM_PART_BSD64 # BSD 磁盘标签 64
options GEOM_PART_EBR # 扩展启动记录
options GEOM_PART_GPT # GPT 分区
options GEOM_PART_LDM # 逻辑磁盘管理器
options GEOM_PART_MBR # MBR 分区
options GEOM_RAID # 软件 RAID 功能
options GEOM_RAID3 # RAID3 功能
options GEOM_SHSEC # 共享密钥
options GEOM_STRIPE # 磁盘条带化
options GEOM_UZIP # 只读压缩磁盘
options GEOM_VIRSTOR # 虚拟存储
options GEOM_ZERO # 性能测试辅助工具GEOM 相关选项。
options ROOTDEVNAME=\"ufs:da0s2e\"可以在编译时指定根设备和文件系统类型;如果引导程序无法正确识别根设备,此处提供了备用方案;或在启动内核时指定 RB_DFLTROOT 标志(-r)以覆盖选项。
28.4.1 调度程序
调度程序是内核中负责分配 CPU 时间给不同线程和进程的核心组件。
options SCHED_4BSD # 历史悠久、久经考验的 BSD 调度程序
options SCHED_STATS # 统计信息
#options SCHED_ULE # 默认的 ULE 调度程序SCHED_4BSD 和 SCHED_ULE 必须二选一。这些选项用于选择需编译进内核的调度程序。
说明:
SCHED_4BSD使用全局运行队列且没有 CPU 亲和性,这在 SMP 系统中性能表现相对有限。但它具有非常好的交互性和优先级选择能力。SCHED_ULE在许多 SMP 机器上的工作负载下,相比 4BSD 提供了显著的性能优势。它支持 CPU 亲和性、每 CPU 的运行队列和调度程序锁。它还对交互性有更强的支持,即使在单处理器机器上也能提供更好的响应能力。SCHED_STATS会在 sysctlkern.sched.stats下保存一些统计信息,有助于调试调度决策。
28.4.2 SMP
对称多处理器(Symmetric MultiProcessor,SMP)系统包含多个处理器核心,这些核心共享内存和其他资源。
options SMP # Symmetric MultiProcessor Kernel(SMP,对称多处理器)SMP 可构建对称多处理器内核。必须指定。
options EARLY_AP_STARTUPEARLY_AP_STARTUP 可在内核启动过程中更早地释放应用处理器(在设备探测之前),而非在启动末期。
该选项是在从晚期到早期 AP 启动过渡期间使用的临时选项。
options MAXCPU=32MAXCPU 定义了系统中能启动的最大 CPU 数量。每种架构通常已经有默认值。
options NUMANUMA 可启用内核各子系统中对非一致性内存访问(Non-Uniform Memory Access)策略的支持。
options MAXMEMDOM=2MAXMEMDOM 定义了系统中可启动的最大内存域数量。每种架构通常已有默认值。
options NO_ADAPTIVE_MUTEXESADAPTIVE_MUTEXES 可改变阻塞互斥锁的行为:如果当前持有互斥锁的线程在另一 CPU 上执行,则互斥锁会自旋。此行为默认启用,该选项可用于禁用上述行为。
options NO_ADAPTIVE_RWLOCKSADAPTIVE_RWLOCKS 会改变读写锁的行为:如果当前持有读写锁的线程在另一 CPU 上执行,则锁会自旋。此行为默认启用,该选项可用于禁用上述行为。
options NO_ADAPTIVE_SXADAPTIVE_SX 可改变 sx 锁的行为:如果当前持有 sx 锁的线程在另一 CPU 上执行,则锁会自旋。此行为默认启用,该选项可用于禁用上述行为。
options MUTEX_NOINLINEMUTEX_NOINLINE 可强制互斥操作通过调用函数以执行每个操作,而非对简单情况进行内联。可用于减小内核文本段的大小。
注意
选项
INVARIANT_SUPPORT、INVARIANTS、KTR、LOCK_PROFILING和WITNESS已隐式启用这一行为。
options RWLOCK_NOINLINERWLOCK_NOINLINE 可强制读写锁操作通过调用函数以执行每个操作,而非对简单情况进行内联。可用于减小内核文本段的大小。
注意
选项
INVARIANT_SUPPORT、INVARIANTS、KTR、LOCK_PROFILING和WITNESS已隐式启用这一行为。
options SX_NOINLINESX_NOINLINE 可强制 sx 锁操作通过调用函数以执行每个操作,而非对简单情况进行内联。这可用于减小内核文本段的大小。
注意
这种行为已被选项
INVARIANT_SUPPORT、INVARIANTS、KTR、LOCK_PROFILING和WITNESS隐式启用。
28.4.2.1 SMP 调试选项
以下是与 SMP 调试相关的内核配置选项。
options PREEMPTION
options FULL_PREEMPTION
options WITNESS
options WITNESS_KDB
options WITNESS_SKIPSPINCALLOUT_PROFILING:启用对 callout(9) 后端使用的 callwheel 数据结构的基础分析。PREEMPTION:允许优先级更高的中断线程抢占内核中的线程。提高交互性,使中断线程能更快运行,而非等待。FULL_PREEMPTION:指示内核抢占非实时内核线程。主要用于在开发阶段暴露竞态条件和其他缺陷。启用会降低性能并增加内核 panic 频率。依赖PREEMPTION选项,不建议开启。SLEEPQUEUE_PROFILING:对保存活动睡眠队列的哈希表及睡眠等待消息频率进行基础分析。TURNSTILE_PROFILING:对保存活动锁队列的哈希表进行基础分析。UMTX_PROFILING:对保存活动锁队列的哈希表进行基础分析。WITNESS:启用 witness 代码,用于检测锁操作期间的死锁和循环。- WITNESS_KDB:发生锁层次违规或线程在休眠前持锁时,进入内核调试器。
- WITNESS_SKIPSPIN:禁用对自旋互斥锁的 witness 检查。
options LOCK_PROFILINGLOCK_PROFILING —— 锁分析。详情见 LOCK_PROFILING(9)。
options MPROF_BUFFERS="1536" # 设置缓冲区数量
options MPROF_HASH_SIZE="1543"# 设置缓冲区哈希表大小MPROF_HASH_SIZE 哈希表大小必须大于缓冲区数量 MPROF_BUFFERS,且应为素数。
options CALLOUT_PROFILING为 callout(9) 后端进行分析。
options SLEEPQUEUE_PROFILING
options TURNSTILE_PROFILING
options UMTX_PROFILING对内部哈希表进行分析。
options EPOCH_TRACE针对 epoch(9) 的误用进行调试跟踪。
28.4.3 兼容性
兼容性选项允许内核支持旧版本 FreeBSD 的系统调用和接口,从而运行为旧版本编写的程序。
options COMPAT_43TTY旧式 TTY 接口。
options COMPAT_FREEBSD4启用 FreeBSD 4 兼容性系统调用。
注意
在通常情况下,
COMPAT_FREEBSD<n>依赖COMPAT_FREEBSD<n+1>、COMPAT_FREEBSD<n+2>等。
options COMPAT_FREEBSD5启用 FreeBSD 5 兼容性系统调用。
options COMPAT_FREEBSD6启用 FreeBSD 6 兼容性系统调用。
options COMPAT_FREEBSD7启用 FreeBSD 7 兼容性系统调用。
options COMPAT_FREEBSD8启用 FreeBSD 8 兼容性系统调用。
options COMPAT_FREEBSD9启用 FreeBSD 9 兼容性系统调用。
options COMPAT_FREEBSD10启用 FreeBSD 10 兼容性系统调用。
options COMPAT_FREEBSD11启用 FreeBSD 11 兼容性系统调用。
options COMPAT_FREEBSD12启用 FreeBSD 12 兼容性系统调用。
options COMPAT_FREEBSD13启用 FreeBSD 13 兼容性系统调用。
options COMPAT_FREEBSD14启用 FreeBSD 14 兼容性系统调用。
options COMPAT_LINUXKPI启用 Linux 内核编程接口。
options SYSVSHM
options SYSVSEM
options SYSVMSGSYSVSHM:启用 System V 风格的共享内存支持。SYSVSEM:启用 System V 风格的信号量支持。SYSVMSG:启用 System V 风格的消息队列支持。
28.4.4 调试
调试选项用于启用内核中的调试功能,包括内核调试器、调用栈跟踪、锁验证等功能,帮助开发者诊断和修复问题。
options KDB编译时包含内核调试器相关代码。
options KDB_TRACE在系统发生 panic 时,在控制台打印当前线程的调用栈跟踪。
options KDB_UNATTENDED在发生 panic 时不进入调试器。适用于无人值守的操作环境,如果需要通过控制台手动进入调试器,但仍希望系统能够在 panic 后自行恢复,可启用此选项。
options DDB启用 ddb 调试器后端。
options DDB_NUMSYM除了符号表示外,还打印符号的数值。
options GDB启用远程 gdb 调试器后端。
options QUEUE_MACRO_DEBUG_TRASH在列表指针变为无效时(即元素从列表中移除)将其清空。启用成本相对较低。
#options QUEUE_MACRO_DEBUG_TRACE在列表对象中存储最后一个修改列表对象的调用者的信息。需要额外的内存开销。
options SYSCTL_DEBUGSYSCTL_DEBUG 启用后将生成一棵 sysctl 调试树,可用于在控制台上转储已注册的 sysctl 节点内容。
因为它会生成过于冗长的控制台输出,可能干扰串行控制台操作,所以默认禁用。
options TEXTDUMP_PREFERRED默认启用 textdump,并禁用内核核心转储。
options TEXTDUMP_VERBOSE在执行 textdump 时启用额外的调试信息。
options NO_SYSCTL_DESCRNO_SYSCTL_DESCR 会省略 sysctl 节点描述,以节省生成内核的空间。
options MALLOC_DEBUG_MAXZONES=8MALLOC_DEBUG_MAXZONES 可为小于一页的 malloc(9) 分配启用多个 uma 区域。其目的是将不同的 malloc 类型隔离到哈希类别中,如此所有缓冲区溢出和释放后使用(use-after-free,UAF)问题通常只会影响该哈希类别中的 malloc 类型的内存。这纯粹是一种调试工具;通过改变哈希函数并追踪遭到破坏的哈希类别,各实例哈希类别的交集可指向滥用的单个 malloc 类型。此时可以使用检查或 memguard(9) 以捕获问题代码。
options DEBUG_MEMGUARDDEBUG_MEMGUARD 构建并启用 memguard(9),这是内核的替代分配器,用于检测释放后使用(use-after-free,UAF)等场景。
options DEBUG_REDZONEDEBUG_REDZONE 为 malloc(9) 启用缓冲区下溢和缓冲区上溢的检测。
#options EARLY_PRINTFEARLY_PRINTF 可在内核非常早期(在调用 cn_init() 之前)使用一种特殊的 printf(eprintf)。这通常仅用于启动早期调试。在通常情况下,它未被定义。此处将其注释掉是因为该功能通常不可用,而且所需的 eputc() 也未定义。
options KTRACE # 内核跟踪
options KTRACE_REQUEST_POOL=101KTRACE 启用系统调用跟踪功能 ktrace(2)。为了更好地支持 SMP,KTRACE 使用一个工作线程以异步处理大多数跟踪事件,而非由生成事件的线程直接处理。这需要预先分配一个用于存储跟踪事件对象的池。选项 KTRACE_REQUEST_POOL 指定该池的初始大小。
options KTR
options KTR_BOOT_ENTRIES=1024
options KTR_ENTRIES=(128*1024)
options KTR_COMPILE=(KTR_ALL)
options KTR_MASK=KTR_INTR
options KTR_CPUMASK=0x3
options KTR_VERBOSEKTR 是一款从 BSD/OS 引入的内核跟踪设施。通过选项 KTR 启用。
KTR_ENTRIES定义了循环跟踪缓冲区中的条目数量,可以是任意数字。KTR_BOOT_ENTRIES定义了早期启动期间的条目数量,在 malloc(9) 可用之前使用。KTR_COMPILE定义了要编译到内核中的事件掩码,由<sys/ktr.h>中的常量KTR_*定义。KTR_MASK定义了变量ktr_mask的初始值,该变量在运行时决定要跟踪哪些事件。KTR_CPUMASK决定了哪些 CPU 记录事件,位 X 对应 CPU X。该选项的值可以是一系列以,分隔的位掩码。(例如:KTR_CPUMASK=0xAF,0xFFFFFFFFFFFFFFFF)。KTR_VERBOSE默认启用将 KTR 事件输出到控制台。此功能可以通过 sysctldebug.ktr.verbose调整,如果未定义KTR_VERBOSE,则默认关闭。
详情请参见:ktr(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ktr&sektion=4 和 ktrdump(8)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ktrdump&sektion=8。
options ALQ
options KTR_ALQoptions INVARIANTS选项 INVARIANTS 在多个源文件中用于启用对内部结构的额外完整性检查。默认禁用,因为检查这些条件会额外消耗时间,而这些问题通常仅由编程错误引起。
options INVARIANT_SUPPORT选项 INVARIANT_SUPPORT 能在编译时加入对部分内部结构的验证支持。INVARIANT_SUPPORT 是启用 INVARIANTS 的前提,因为启用 INVARIANTS 会调用这些函数。其目的是,如果启用了 INVARIANT_SUPPORT,可以为单个源文件设置 INVARIANTS(通过修改源文件或在命令行指定)。如果希望构建带有 INVARIANTS 的内核模块,将 INVARIANT_SUPPORT 添加到内核中可以提供所有必要的基础设施,且不会增加额外开销。
options KASSERT_PANIC_OPTIONAL选项 KASSERT_PANIC_OPTIONAL 能在 kasserts 触发时不一定会引起 panic。panic 是默认行为,但运行时选项可以将其完全关闭,或者在设定限制下关闭。
options DIAGNOSTIC选项 DIAGNOSTIC 用于启用额外的调试信息和完整性检查。由于这些额外检查对 INVARIANTS 内核来说开销过大或过于冗杂,因此默认禁用。通常,配置了 DIAGNOSTIC 的内核也会启用 INVARIANTS 选项。
options REGRESSIONREGRESSION 将启用仅在回归测试中需要的可选内核接口。启用这些接口可能构成安全风险,因为它们允许进程轻易修改运行时环境的某些方面,会重现不太可能或异常(可能通常不可能出现)的场景。
options COMPILING_LINT此选项能让某些在运行系统中无法共存的驱动程序共存。它用于能够一次性编译所有内核代码以进行质量保证(例如本文件,其名称即来源于该选项)。
options STACKSTACK 将启用 stack(9) 功能,可捕获内核栈。若内核编译中包含 DDB(4),则 stack(9) 也会自动编译进内核。
options NUM_CORE_FILES=5选项 NUM_CORE_FILES 指定了特定进程生成核心文件的数量上限。核心文件格式说明符包含 %I 模式时,此选项生效。由于格式字符串中核心计数只有 1 个字符,可表示的范围为 0-9,因此该选项允许的最大值为 10(即指定该参数为 9)。可在运行时通过 sysctl debug.ncores 调整该核心文件数量限制。
options TSLOG
options TSLOGSIZE=262144TSLOG 选项可启用事件的时间戳记录,特别是函数的进/出,以便跟踪内核消耗的时间。尤其在早期启动过程中非常有用,因为此时还无法使用 DTrace 等更高级的工具。
TSLOGSIZE选项控制用于存储这些事件的(预分配、固定长度)缓冲区大小(默认:262144条记录)。TSLOG_PAGEZERO选项可启用对pmap_zero_page的 TSLOG;由于它通常会生成过多记录而不太实用,因此必须单独启用。
出于安全考虑,TSLOG 不应在用于生产的系统上启用。
28.4.5 性能监控
性能监控选项提供了测量和分析系统性能的能力,特别是利用 CPU 内置的性能监控计数器。
device hwpmc # 驱动程序(也可作为可加载模块)
options HWPMC_DEBUG
options HWPMC_HOOKS # 其他必要的内核钩子驱动程序 hwpmc 可使用 CPU 内置的性能监控计数器监控性能。基础内核需要通过 options 条目配置,可将 hwpmc 设备编译进内核或作为可加载内核模块以加载。
在特定架构上可能需要额外的配置选项,请参见:hwpmc(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=hwpmc&sektion=4。
28.4.6 网络接口
网络接口是 FreeBSD 内核中负责处理网络通信的关键部分,包括协议栈、网络设备驱动等。
28.4.6.1 协议栈
网络协议栈负责处理网络数据的传输和接收,包括 TCP/IP、UDP 等协议。
options INET # 互联网通信协议(IPv4)
options INET6 # 互联网通信协议(IPv6)options CC_CDG # CAIA Delay‑Gradient 算法
options CC_CHD # CAIA Hamilton‑Delay 算法
options CC_CUBIC # Cubic 算法
options CC_DCTCP # DCTCP 算法
options CC_HD # Hamilton Delay 算法
options CC_HTCP # H‑TCP 算法
options CC_NEWRENO # NewReno 算法
options CC_VEGAS # Vegas 算法
options CC_DEFAULT=\"cubic\" # 将 Cubic 指定为默认的拥塞控制算法
options RATELIMIT # 传输速率限制支持
options ROUTETABLES=2 # 分配的 FIB 最多可达 65536。默认值为 1,但这不是个好主意,因为它们占用空间很大
options TCP_OFFLOAD # TCP 卸载(offload)
options TCP_RFC7413 # TCP 快速打开(TCP Fast Open)
options TCPHPTS # 启用 TCP HPTS(High Precision Timer)支持
#options TCP_HPTS_KTEST # 为 HPTS 添加 KTEST 支持注意
如果使用了选项
INET、INET6或同时指定了两者:必须至少指定一个拥塞控制选项,否则将导致编译失败。GENERIC定义了CC_CUBIC。如果编译了多款拥塞控制,可能需要指定一个默认值。
default 中的字符串是 cc 模块的名称,在 sysctl 中用于设置默认值。代码将 CUBIC 定义为默认值,或者如果只编译了一个 cc_module,则使用该模块。
options IPSEC # IPsec(需要设备加密支持)IPsec(IP 安全)。要启用 IPSEC,必须 在内核配置中同时指定设备加密支持。
options IPSEC_SUPPORT
#options IPSEC_DEBUG # IPsec 调试IPSEC_SUPPORT 选项并不会直接启用 IPsec,但它能将 IPsec 作为内核模块加载。仍然 必须 在内核配置中添加设备加密支持。
options TCP_BBR # BBR(Bottleneck Bandwidth and Round-trip propagation time)
options TCP_RACK # RACK 栈,Recent ACKnowledgment可选的 TCP 栈。
options KERN_TLS # TLS 发送与接收卸载TLS 用于通过 TCP 套接字对数据进行帧封装以及加/解密。
options NETLINKNetlink 是一种内核与用户空间之间的消息传递接口。
options NETSMB # SMB/CIFS 请求器(requester)SMB/CIFS 请求器。NETSMB 启用了对 SMB 协议的支持,它需要选项 LIBMCHAIN 和 LIBICONV。
options LIBMCHAINmchain 库。它可以作为 KLD(可加载内核模块)加载,也可以编译进内核。
options LIBALIASlibalias 库,用于执行 NAT(网络地址转换)。
options SCTP
options SCTP_SUPPORTSCTP 是一种传输层协议,最初由 RFC 2960 定义,后由 RFC 3309 和 RFC 3758 更新;2007 年发布的 RFC 4960 取代了 RFC 2960 与 RFC 3309,成为新的基础规范,此后又经 RFC 6096、RFC 7053 等更新;2022 年发布的 RFC 9260 进一步取代了 RFC 4960(IETF. RFC 9260: Stream Control Transmission Protocol[EB/OL]. (2022-05). [2026-04-19]. https://datatracker.ietf.org/doc/rfc9260/)。本版本支持所有扩展,包括许多草案(大部分即将成为 RFC)。它是 SCTP 的参考实现,经过了充分测试。
注意
必须同时定义 INET 和 INET6。不必启用 IPv6,但 SCTP 是双栈协议,目前还没有拆分 IPv6 和 IPv4,因为一个关联(association)可以同时跨越 IPv6 和 IPv4 地址。
选项 SCTP_SUPPORT 并不会直接启用 SCTP,而是提供将 SCTP 作为可加载内核模块加载所需的支持。
options SCTP_DEBUG有很多选项:
这个选项可开启各种详细打印功能。它由一个位掩码控制(可以通过 socket 选项和 sysctl 设置)。包含该选项本身不会立即产生日志,必须先设置相应的位。但打印信息可能非常冗长。因此,如果没有启用该选项,代码就不会做位检测和打印,如此可提高运行速度。如果并非调试用途,请不要使用。
options SCTP_LOCK_LOGGING
options SCTP_MBUF_LOGGING
options SCTP_MBCNT_LOGGING
options SCTP_PACKET_LOGGING
options SCTP_LTRACE_CHUNKS
options SCTP_LTRACE_ERRORS上面的所有选项用于开启特定类型的日志记录。可以监控拥塞窗口(CWND)增长、飞行数据量(flight size)以及各种其他指标。可查看代码了解更多细节。
使用这些功能需启用 ktr(4),然后通过 sysctl 设置打开或关闭各种日志位。使用 ktrdump(8) 提取日志,再通过显示程序处理,就能生成图表等可视化内容。
options OFED
options OFED_DEBUG_INITOpenFabrics 企业版发行版(OFED,InfiniBand)。
options SDP
options SDP_DEBUG套接字直接协议(SDP)。
options IPOIB # InfiniBand 协议栈及其支持
options IPOIB_DEBUG
options IPOIB_CM # 使用连接模式(connected mode)的 IPoIBIP over InfiniBand (IPoIB),基于 InfiniBand 的互联网协议,参见:wiki/InfiniBand[EB/OL]. [2026-03-26]. https://wiki.freebsd.org/InfiniBand。
options ALTQ # 交错队列,Alternate Queuing
options ALTQ_CBQ # 基于类的排队
options ALTQ_RED # 随机早期检测
options ALTQ_RIO # RED 输入/输出
options ALTQ_CODEL # CoDel 主动队列管理
options ALTQ_HFSC # 分层服务曲线调度程序
options ALTQ_FAIRQ # 公平包调度程序
options ALTQ_CDNR # 流量调节器
options ALTQ_PRIQ # 优先级队列
options ALTQ_NOPCC # 当 TSC 不可用时为必需选项
options ALTQ_DEBUG # 启用 ALTQ 调试altq(9)。通过选项 ALTQ 启用钩子的基础部分。各个调度策略必须编译进基本系统,不能在此阶段作为模块加载。ALTQ 需要稳定的 TSC,如果 TSC 不稳定或在 CPU 节流时发生变化,则必须同时启用选项 ALTQ_NOPCC。
options NETGRAPH # netgraph(4) 系统 ①
options NETGRAPH_DEBUG # 启用额外调试,这会影响 netgraph(4) 及其节点。- ①:netgraph(4) 系统,是一款网络工具包。使用选项
NETGRAPH启用 netgraph 核心代码。
可以通过下列对应的选项启用各个节点类型;不过这并非严格必要,因为如果节点类型尚未编译进内核,netgraph 会自动加载对应的 KLD 模块。下面的每种类型都有对应的手册页,例如 ng_async(4)。
options NETGRAPH_ASYNC # ng_async(4)
options NETGRAPH_BLUETOOTH # ng_bluetooth(4)
options NETGRAPH_BLUETOOTH_HCI # ng_hci(4)
options NETGRAPH_BLUETOOTH_L2CAP # ng_l2cap(4)
options NETGRAPH_BLUETOOTH_SOCKET # ng_btsocket(4)
options NETGRAPH_BLUETOOTH_UBT # ng_ubt(4)
options NETGRAPH_BLUETOOTH_UBTBCMFW # ubtbcmfw(4)
options NETGRAPH_BPF # ng_bpf(4)
options NETGRAPH_BRIDGE # ng_bridge(4)
options NETGRAPH_CAR # ng_car(4)
options NETGRAPH_CHECKSUM # ng_checksum(4)
options NETGRAPH_CISCO # ng_cisco(4)
options NETGRAPH_DEFLATE # ng_deflate(4)
options NETGRAPH_DEVICE # ng_device(4)
options NETGRAPH_ECHO # ng_echo(4)
options NETGRAPH_EIFACE # ng_eiface(4)
options NETGRAPH_ETHER # ng_ether(4)
options NETGRAPH_FRAME_RELAY # ng_frame_relay(4)
options NETGRAPH_GIF # ng_gif(4)
options NETGRAPH_GIF_DEMUX # ng_gif_demux(4)
options NETGRAPH_HOLE # ng_hole(4)
options NETGRAPH_IFACE # ng_iface(4)
options NETGRAPH_IP_INPUT # ng_ip_input(4)
options NETGRAPH_IPFW # ng_ipfw(4)
options NETGRAPH_KSOCKET # ng_ksocket(4)
options NETGRAPH_L2TP # ng_l2tp(4)
options NETGRAPH_LMI # ng_lmi(4)
options NETGRAPH_MPPC_COMPRESSION # ng_mppc(4)
options NETGRAPH_MPPC_ENCRYPTION # ng_mppc(4)
options NETGRAPH_NETFLOW # ng_netflow(4)
options NETGRAPH_NAT # ng_nat(4)
options NETGRAPH_ONE2MANY # ng_one2many(4)
options NETGRAPH_PATCH # ng_patch(4)
options NETGRAPH_PIPE # ng_pipe(4)
options NETGRAPH_PPP # ng_ppp(4)
options NETGRAPH_PPPOE # ng_pppoe(4)
options NETGRAPH_PPTPGRE # ng_pptpgre(4)
options NETGRAPH_PRED1 # ng_pred1(4)
options NETGRAPH_RFC1490 # ng_rfc1490(4)
options NETGRAPH_SOCKET # ng_socket(4)
options NETGRAPH_SPLIT # ng_split(4)
options NETGRAPH_TAG # ng_tag(4)
options NETGRAPH_TCPMSS # ng_tcpmss(4)
options NETGRAPH_TEE # ng_tee(4)
options NETGRAPH_UI # ng_UI(4)
options NETGRAPH_VJC # ng_vjc(4)
options NETGRAPH_VLAN # ng_vlan(4)netgraph 节点类型:
- NETGRAPH_ASYNC —— ng_async(4)
- NETGRAPH_BLUETOOTH —— ng_bluetooth(4)
- NETGRAPH_BLUETOOTH_HCI —— ng_hci(4)
- NETGRAPH_BLUETOOTH_L2CAP —— ng_l2cap(4)
- NETGRAPH_BLUETOOTH_SOCKET —— ng_btsocket(4)
- NETGRAPH_BLUETOOTH_UBT —— ng_ubt(4)
- NETGRAPH_BLUETOOTH_UBTBCMFW —— ubtbcmfw(4)
- NETGRAPH_BPF —— ng_bpf(4)
- NETGRAPH_BRIDGE —— ng_bridge(4)
- NETGRAPH_CAR —— ng_car(4)
- NETGRAPH_CHECKSUM —— ng_checksum(4)
- NETGRAPH_CISCO —— ng_cisco(4)
- NETGRAPH_DEFLATE —— ng_deflate(4)
- NETGRAPH_DEVICE —— ng_device(4)
- NETGRAPH_ECHO —— ng_echo(4)
- NETGRAPH_EIFACE —— ng_eiface(4)
- NETGRAPH_ETHER —— ng_ether(4)
- NETGRAPH_FRAME_RELAY —— ng_frame_relay(4)
- NETGRAPH_GIF —— ng_gif(4)
- NETGRAPH_GIF_DEMUX —— ng_gif_demux(4)
- NETGRAPH_HOLE —— ng_hole(4)
- NETGRAPH_IFACE —— ng_iface(4)
- NETGRAPH_IP_INPUT —— ng_ip_input(4)
- NETGRAPH_IPFW —— ng_ipfw(4)
- NETGRAPH_KSOCKET —— ng_ksocket(4)
- NETGRAPH_L2TP —— ng_l2tp(4)
- NETGRAPH_LMI —— ng_lmi(4)
- NETGRAPH_MPPC_COMPRESSION —— ng_mppc(4)
- NETGRAPH_MPPC_ENCRYPTION —— ng_mppc(4)
- NETGRAPH_NETFLOW —— ng_netflow(4)
- NETGRAPH_NAT —— ng_nat(4)
- NETGRAPH_ONE2MANY —— ng_one2many(4)
- NETGRAPH_PATCH —— ng_patch(4)
- NETGRAPH_PIPE —— ng_pipe(4)
- NETGRAPH_PPP —— ng_ppp(4)
- NETGRAPH_PPPOE —— ng_pppoe(4)
- NETGRAPH_PPTPGRE —— ng_pptpgre(4)
- NETGRAPH_PRED1 —— ng_pred1(4)
- NETGRAPH_RFC1490 —— ng_rfc1490(4)
- NETGRAPH_SOCKET —— ng_socket(4)
- NETGRAPH_SPLIT —— ng_split(4)
- NETGRAPH_TAG —— ng_tag(4)
- NETGRAPH_TCPMSS —— ng_tcpmss(4)
- NETGRAPH_TEE —— ng_tee(4)
- NETGRAPH_UI —— ng_UI(4)
- NETGRAPH_VJC —— ng_vjc(4)
- NETGRAPH_VLAN —— ng_vlan(4)
options VIMAGE
options VNET_DEBUG # VIMAGE 供调试使用vimage(9)(即 VNET(9) 的别名),用于网络栈虚拟化。
28.4.6.2 网络接口
网络接口设备提供了系统与网络物理连接的能力。
device loop启用网络功能时,loop(4) 设备是 必需的。
device etherether 设备提供了用于处理以太网的通用代码;需要配置以太网设备驱动时,它是 必需的。
device vlanvlan(4) 设备可根据 IEEE 802.1Q 实现以太网帧的 VLAN 标记。
device vxlanvxlan(4) 设备将根据 RFC7348 实现以太网帧在 UDP 数据包中的 VXLAN 封装。
device wlan
options IEEE80211_DEBUG # 启用调试信息
options IEEE80211_DEBUG_REFCNT
options IEEE80211_SUPPORT_MESH # 启用 802.11s D3.0 / Mesh 支持
options IEEE80211_SUPPORT_TDMA # 启用 TDMAwlan(4) 设备提供了支持 802.11 驱动的通用代码,包括主机 AP 模式;对于 wi 和 ath 驱动来说,wlan 是 必需的,并且最终将成为所有 802.11 驱动的必需项。
device wlan_wep # 支持 WEP 加密协议
device wlan_tkip # 支持 TKIP 加密协议
device wlan_ccmp # 支持 AES-CCMP 加密协议
device wlan_gcmp # 支持 AES-GCMP 加密协议可选设备,依赖 802.11 wlan 模块。
device wlan_xauthwlan_xauth 设备提供了对外部(即用户态)认证器的支持,用于依赖 wlan 模块并支持 802.1x 和/或 WPA 安全协议的 802.11 驱动。
device wlan_acl
device wlan_amrrwlan_acl设备提供了基于 MAC 的访问控制机制,用于在 AP 模式下运行并使用wlan模块的 802.11 驱动。wlan_amrr设备提供了 AMRR 传输速率控制算法。
device bpfbpf 设备将启用伯克利数据包过滤器(Berkeley Packet Filter)。启用此选项时需注意相关的安全和管理影响。
DHCP 依赖该选项。
device netmapnetmap 设备可实现从用户态对网络设备的内存映射访问,即使在 10 Gbit/s 速率下,也能实现线速的数据包捕获和生成。需要设备驱动支持。支持的驱动有 ixgbe、e1000、re。
device discdisc 设备实现了一个最简网络接口,会丢弃所有发送的数据包,且永远不会接收任何数据包,用于测试和性能基准评估。
device epairepair 设备实现了一对虚拟的背靠背连接的以太网接口。
device edscedsc 设备实现了一个最简以太网接口,会丢弃所有发送的数据包,且不接收任何数据包。
device tuntaptuntap 设备实现了用户态的 PPP、nos-tun(8) 以及类似 pty 的虚拟以太网接口。
device gif
device gre
device me
options XBONEHACKgif设备实现了 IPv6 over IPv4 隧道、IPv4 over IPv6 隧道、IPv4 over IPv4 隧道以及 IPv6 over IPv6 隧道gre设备实现了 GRE(通用路由封装)隧道,遵循 RFC 2784 和 RFC 2890 规范me设备实现了 IPv4 内的最小封装(Minimal Encapsulation),遵循 RFC 2004 规范XBONEHACK选项允许在多个gif接口上配置相同的地址对
device stfstf 设备实现了 6to4 封装。
device pf
device pflog
device pfsyncPF 数据包过滤器由三款设备组成:
pf设备提供了 /dev/pf 以及防火墙代码本身。pflog设备提供了pflog0接口,用于记录数据包。pfsync设备提供了pfsync0接口,用于防火墙状态表的同步(通过网络)。
device if_bridge桥接网络接口。
device carp通用地址冗余协议(CARP)。更多详情参见:carp(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=carp&sektion=4。
device encIPsec 接口。
device laggLAGG 链路聚合接口。
device wgWireGuard 接口。
device dummymbufdummymbuf 是用于 mbuf 修改的 pfil 钩子。
28.4.6.3 互联网协议簇
互联网协议簇提供了网络通信的基础协议支持。
options MROUTING # 多播路由 ①
options IPFIREWALL # IP 防火墙 ②
options IPFIREWALL_VERBOSE # 启用日志记录到 syslogd(8) ③
options IPFIREWALL_VERBOSE_LIMIT=100 # 限制日志详细程度 ④
options IPFIREWALL_DEFAULT_TO_ACCEPT # 默认放行所有流量 ⑤
options IPFIREWALL_NAT # 为 IPFW 内核 NAT 提供支持,需要 LIBALIAS
options IPFIREWALL_NAT64 # 为 IPFW 内核 NAT64 提供支持
options IPFIREWALL_NPTV6 # 为 IPFW 内核 NPTv6 提供支持
options IPDIVERT # 转发套接字。启用 divert IP 套接字,用于 ipfw divert;如果要编译进内核,则依赖 IPFIREWALL
options IPFILTER # ipfilter 支持
options IPFILTER_LOG # ipfilter 日志
options IPFILTER_LOOKUP # ipfilter 池
options IPFILTER_DEFAULT_BLOCK # 默认阻止所有数据包
options IPSTEALTH # 支持隐形转发(即转发数据包而不修改 TTL),这对于隐藏防火墙免受 traceroute 等工具探测很有用
options PF_DEFAULT_TO_DROP # 默认丢弃所有数据包,使 pf(4) 的默认规则拒绝所有流量
options TCP_BLACKBOX # 启用增强的 TCP 事件日志功能
options TCP_HHOOK # 启用 TCP 栈的 hhook(9) 框架钩子
options SOCKET_HHOOK # 启用套接字操作的 hhook(9) 框架钩子
options ROUTE_MPATH # 提供了多路径路由支持- ①:
MROUTING将启用内核多播数据包转发功能,可与 mrouted 和 XORP 一起使用。 - ②:
IPFIREWALL需要配合程序ipfw使用。 - ③:
IPFIREWALL_VERBOSE会将记录的数据包发送到系统日志。 - ④:
IPFIREWALL_VERBOSE_LIMIT限制匹配条目的日志记录次数。
警告:
IPFIREWALL 默认策略为
deny ip from any to any,如果在启动时未添加放行访问的规则,可能导致无法远程访问系统。建议首次启用此功能时,在 /etc/rc.conf 文件中将
firewall_type设置为open,然后在确认新内核功能正常工作后,再在 /etc/rc.firewall 文件中完善防火墙规则。
- ⑤:
IPFIREWALL_DEFAULT_TO_ACCEPT会使默认规则(启动时)放行所有流量。请谨慎使用,如果攻击者能入侵防火墙机器,他们可能访问的受保护机器。但如果只是作为按需过滤特定问题的工具,这可能适合。将默认策略改为allow可以避免内核与 /sbin/ipfw 二进制不同步时无响应。
IPFIREWALL_PMOD 支持协议修改模块。目前仅支持 TCP MSS 修改。
options MBUF_STRESS_TEST
options MBUF_PROFILINGMBUF_STRESS_TEST 选项用于启用与 mbuf 函数相关的各种随机故障或极端情况测试。可参见:mbuf(9)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=mbuf&sektion=9 获取可用测试用例列表。
MBUF_PROFILING 启用用于分析系统输出 mbuf 链的代码,并通过相应接口返回监控参数的对数直方图(例如数据包大小、浪费空间以及链中 mbuf 的数量)。
options ACCEPT_FILTER_DATA # 数据连接接收过滤器
options ACCEPT_FILTER_DNS # DNS 请求接收过滤器
options ACCEPT_FILTER_HTTP # HTTP 请求接收过滤器
options ACCEPT_FILTER_TLS # TLS 握手接收过滤器这些选项用于启用静态链接的接收过滤器(accept filters)。
options TCP_SIGNATURE # 支持 RFC 2385TCP_SIGNATURE 为 RFC 2385(TCP-MD5)摘要提供了支持。这些摘要通过 TCP 选项 19 携带。该选项通常用于保护 TCP 会话(例如 BGP),适用于无法或不希望使用 IPsec 的情况。
此功能可以按套接字启用,通过 TCP_MD5SIG 套接字选项实现。
启用此功能需要使用 device crypto,并且需要启用 options IPSEC 或 options IPSEC_SUPPORT。
options DUMMYNETDUMMYNET 将启用带宽限制器“dummynet”。此功能还需要 IPFIREWALL。更多信息请参见:dummynet(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=dummynet&sektion=4 和 ipfw(8)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ipfw&sektion=8。在运行 DUMMYNET 时,HZ/kern.hz 应至少为 1000,以确保响应足够及时。
options DEBUGNETDEBUGNET 选项将启用基础调试/内核 panic 时的网络 API。NETDUMP 和 NETGDB 需要使用 DEBUGNET。
options NETDUMPNETDUMP 选项将在内核中启用对 netdump(4) 客户端支持。它可在内核 panic 时将内核转储发送到远程主机。
options NETGDBNETGDB 选项在内核中启用对 netgdb(4) 的支持。它能通过网络将 panic 的内核作为 GDB 远程调试目标。
28.4.7 文件系统
只有根文件系统需要静态编译或预先加载为模块;其他文件系统可在挂载时自动加载。不过,部分用户也倾向于静态编译其他文件系统。
注意
UNION 文件系统曾存在缺陷,现已得到积极维护,尽管仍有一些问题需要解决。
options FFS # 快速文件系统(Fast Filesystem),即 UFS
options NFSCL # 网络文件系统客户端(NFS client)以上选项中至少需要选择一项。
options AUTOFS # 自动挂载文件系统
options CD9660 # ISO 9660 文件系统
options FDESCFS # 文件描述符文件系统
options FUSEFS # FUSEFS 支持模块
options MSDOSFS # MS DOS 文件系统(FAT、FAT32)
options NFSLOCKD # 网络锁管理器
options NFSD # 网络文件系统服务器
options KGSSAPI # 内核 GSSAPI 实现
options NULLFS # NULL 文件系统
options PROCFS # 进程文件系统(需要 PSEUDOFS)
options PSEUDOFS # 虚拟文件系统框架
options PSEUDOFS_TRACE # PSEUDOFS 调试支持
options SMBFS # SMB/CIFS 文件系统
options TMPFS # 高效内存文件系统
options UDF # 通用光盘格式(Universal Disk Format)
options UNIONFS # Union 文件系统以上选项,均为可选。
options NFS_ROOT将 NFS 用作根文件系统(root device)的支持。
options SOFTUPDATES软更新(Soft Updates)可提高文件系统性能,降低因突然关机导致数据不一致的风险。
options UFS_EXTATTR # ①
options UFS_EXTATTR_AUTOSTART # ②UFS 扩展属性(Extended Attributes)可将附加数据与文件关联,用于 ACL、Capabilities 和 MAC 标签。更多信息请参见 src/sys/ufs/ufs/README.extattr。
- ①:
UFS_EXTATTR:扩展属性可将附加的任意元数据与文件和目录关联,这些元数据既可以从用户态分配和读取,也可以在内核内部操作;参见 extattrctl(8)。 - ②:如果定义了选项
UFS_EXTATTR_AUTOSTART,UFS 会在挂载操作期间搜索文件系统根目录下的.attribute子目录。如果找到了该目录,将自动为该文件系统启用扩展属性支持。
参见:ffs(7)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ffs&sektion=7。
options UFS_ACL对 UFS 文件系统的访问控制列表(ACL)的支持。当前的 ACL 实现依赖底层文件系统的扩展属性支持(UFS_EXTATTR)。更多信息请参见 src/sys/ufs/ufs/README.acls。
options UFS_DIRHASHUFS 目录哈希(Directory Hashing)可通过消耗内存以提高对非常大目录的操作速度。
options UFS_GJOURNAL基于 gjournal(8) 的 UFS 日志支持。
options MD_ROOT_SIZE=10在内核中为基于 md 设备的根文件系统预留空间。此处定义的是为文件系统预留的千字节(KB)数。
该定义现为可选项。
- 如果没有定义,通过
MFS_IMAGE编译选项传入的根文件系统将在链接阶段自动嵌入内核,其实际大小将完全占用内核空间。 - 若已定义,则会采用旧版内核嵌入文件系统的方式:即先在内核中分配
MD_ROOT_SIZE千字节(KB)的固定空间,后续若通过MFS_IMAGE编译选项传入的文件系统镜像尺寸匹配,将通过dd命令将其写入预留区域。
options MD_ROOT将 md 设备配置为潜在根设备,支持预加载的 mfs_root 和 md_root 类型镜像。
options MD_ROOT_READONLY对该 md 根设备启用写保护,以防其以可写方式挂载。
options MD_ROOT_MEM允许从外部内存区域读取 md 镜像。
options QUOTA # 启用磁盘配额启用此选项即可支持磁盘配额功能。
options SUIDDIR若设备仅作为面向 PC 和 MAC 用户的文件服务器(使用 Samba 服务),建议启用此选项,并在支持挂载选项 suiddir 的文件系统上设置用户目录。该设置会使新建文件自动继承目录的属主权限(类似于群组权限)。
注意
若允许这些用户执行程序,将存在安全风险,因此请仅限在纯文件服务器环境中使用(此举可有效避免诸多管理难题)。root 用户拥有的目录不受此限制,且执行权限位将自动清除。
注意
必须同时为目录设置权限位
suid(详见 chmod(1) 手册)。由于 PC 用户无法查看/设置文件属主,常导致权限冲突。在启用此功能后,相关文件系统会符合用户直觉:“既然是我的目录,那么创建的文件自然归我所有”,从而显著减少技术支持需求。
options NFS_MINATTRTIMO=3 # VREG 属性缓存超时时间(秒)
options NFS_MAXATTRTIMO=60
options NFS_MINDIRATTRTIMO=30 # VDIR 属性缓存超时时间(秒)
options NFS_MAXDIRATTRTIMO=60
options NFS_DEBUG # 启用 NFS 调试若干 NFS 选项。
options EXT2FS新增对 Linux 文件系统 EXT2 的支持。
使用此功能需格外谨慎,ext2 的代码往往滞后于内核更新且缺乏充分测试,因此以读写模式挂载可能存在风险(即使以只读模式挂载也可能导致系统崩溃)。
device mem系统内存设备:/dev/mem、/dev/kmem
device ksyms内核符号表设备:/dev/ksyms。
options CD9660_ICONV
options MSDOSFS_ICONV
options UDF_ICONV可选的字符编码转换支持,需配合 LIBICONV 实现。每个选项都需要其基础文件系统及 LIBICONV 库的支持。
28.4.8 POSIX P1003.1B
POSIX P1003.1B 是 POSIX 标准的实时扩展,提供了优先级调度、信号量、消息队列等功能。
options _KPOSIX_PRIORITY_SCHEDULING1993 年 POSIX 标准新增的实时扩展 _KPOSIX_PRIORITY_SCHEDULING 提供了对 _POSIX_PRIORITY_SCHEDULING 的支持。
options P1003_1B_SEMAPHORESp1003_1b_semaphores 功能仍处于高度实验阶段,若出现问题,用户需协助参与调试工作。
options P1003_1B_MQUEUEPOSIX 消息队列。
28.4.9 安全策略参数
安全策略参数提供了系统安全相关的内核配置,包括审计、强制访问控制等功能。
options AUDITBSM 审计。
options MAC
options MAC_BIBA
options MAC_BSDEXTENDED
options MAC_DDB
options MAC_DO
options MAC_IFOFF
options MAC_IPACL
options MAC_LOMAC
options MAC_MLS
options MAC_NONE
options MAC_NTPD
options MAC_PARTITION
options MAC_PORTACL
options MAC_PRIORITY
options MAC_SEEOTHERUIDS
options MAC_STUB
options MAC_TEST
options MAC_VERIEXEC
options MAC_VERIEXEC_SHA1
options MAC_VERIEXEC_SHA256
options MAC_VERIEXEC_SHA384
options MAC_VERIEXEC_SHA512
device mac_veriexec_parser强制访问控制(MAC)。
options CAPABILITIES # 文件描述符的细粒度权限控制
options CAPABILITY_MODE # 沙盒环境(无法访问全局命名空间)Capsicum 技术。
28.4.10 时钟
时钟选项用于配置内核的时钟频率和时间同步相关功能。
options HZ=100操作粒度由内核选项 HZ 控制(默认频率为 1000 Hz,即调度间隔周期为 1 毫秒)。
虚拟机客户系统通常采用数值 100。较低的数值可能会以调度精度为代价降低系统开销,但自适应定时器代码能减少这种开销。
options PPS_SYNC启用内核 PLL 以使用外部 PPS 信号的功能,该功能在 [x]ntpd(8) 的监管下运行。更多信息请参阅 ntpd 文档:http://www.eecis.udel.edu/~ntp
options FFCLOCK启用内核中对通用前馈时钟的支持。前馈时钟支持是面向反馈的 ntpd/系统时钟方法的替代方案,需与前馈同步算法(例如 RADclock)配合使用。更多信息请参阅:http://www.synclab.org/radclock
28.4.11 SCSI 设备
SCSI(Small Computer System Interface)是一种用于连接计算机和外部设备的标准接口。
envvar hint.scbus.0.at="ahc0"
envvar hint.scbus.1.at="ahc1"
envvar hint.scbus.1.bus="0"
envvar hint.scbus.3.at="ahc2"
envvar hint.scbus.3.bus="0"
envvar hint.scbus.2.at="ahc2"
envvar hint.scbus.2.bus="1"
envvar hint.da.0.at="scbus0"
envvar hint.da.0.target="0"
envvar hint.da.0.unit="0"
envvar hint.da.1.at="scbus3"
envvar hint.da.1.target="1"
envvar hint.da.2.at="scbus2"
envvar hint.da.2.target="3"
envvar hint.sa.1.at="scbus1"
envvar hint.sa.1.target="6"SCSI 设备配置。
SCSI 子系统由 SCSI 核心代码、多个高层 SCSI 设备“类型”驱动程序,以及底层主机适配器设备驱动程序组成。主机适配器列表请参阅下文中的 ISA 和 PCI 设备配置章节。
系统可固定 SCSI 设备配置,确保特定总线、目标和 LUN 始终对应同一设备单元。在早期版本中,设备单元号按照 SCSI 总线上探测到的顺序分配。这意味着如果移除某磁盘驱动器,可能需要重写文件 /etc/fstab;同时在新增磁盘时也需谨慎,因为新设备可能会被提前探测,从而改变原有设备的配置。
系统默认保持此传统行为。设备单元分配将从该设备类型首个非固定单元开始。例如,若将某磁盘固定为 da3,则首个非固定磁盘将被分配为 da4。
设备固定配置的语法如上所述。
device scbus # SCSI 核心代码
device ch # SCSI 介质转换器
device da # SCSI 直接存取(“磁盘”)与光学介质(“WORM”)设备
device sa # SCSI 磁带
device cd # SCSI 只读直接存取(“光盘”)
device ses # 机箱服务(SES 与 SAF-TE)
device pt # SCSI 处理器
device targ # SCSI 目标模式代码
device targbh # SCSI 目标模式黑洞设备
device pass # CAM 直通驱动
device sg # Linux SCSI 直通
device ctl # CAM 目标层未明确指定“单元”(SCSI 逻辑单元号)的设备将默认按 LUN 0 处理。
所有 SCSI 设备会根据实际需求分配相应数量的单元。
ch驱动程序用于驱动 SCSI 介质转换器(“自动光盘机”)设备。da驱动程序用于驱动 SCSI 直接存取(“磁盘”)与光学介质(“WORM”)设备。sa驱动程序用于驱动 SCSI 顺序存取(“磁带”)设备。cd驱动程序用于驱动 SCSI 只读直接存取(“光盘”)设备。ses驱动程序用于驱动 SCSI 环境服务(“ses”)及 SAF-TE(“SCSI 可访问容错机箱”)设备。pt驱动程序用于驱动 SCSI 处理器设备。sg驱动程序提供与 Linux SG 驱动兼容的直通 API,可与 Linux 模拟器协同运行 Linux SG 应用程序,也可独立运行,为应用移植至 FreeBSD 提供源代码级 API 兼容性。
目标模式支持在此部分实现,但仍需 SIM(SCSI 主机适配器驱动程序)提供相应支持。
targ驱动程序以处理器类型设备的形式提供了目标模式支持,其存在旨在提供响应查询命令所需的最小上下文环境。/usr/share/examples/scsi_target 目录下提供了展示其余命令支持实现方式的用户应用程序示例。targbh驱动程序提供了目标模式支持,专门用于响应未分配逻辑单元的传入命令。pass驱动程序提供了访问 CAM 子系统的直通 API。
28.4.12 CAM
CAM, Common Access Method storage subsystem(通用访问方法存储子系统),参见:cam(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=CAM&sektion=4&n=1。
28.4.12.1 CAM 调试相关
以下是与 CAM 调试相关的内核配置选项。
options CAMDEBUG启用并编译所有调试功能。
options CAM_DEBUG_COMPILE=-1指定要编译进内核的调试等级。
options CAM_DEBUG_FLAGS=(CAM_DEBUG_INFO|CAM_DEBUG_PROBE|CAM_DEBUG_PERIPH)指定在系统启动时启用的调试等级。
options CAM_DEBUG_BUS=-1将调试限制在指定的总线(bus)上。
options CAM_DEBUG_TARGET=-1将调试限制在指定的目标(target)上。
options CAM_DEBUG_LUN=-1将调试限制在指定的 LUN 上。
options CAM_DEBUG_DELAY=1在打印每一行调试信息后延迟的时间(微秒)。
options CAM_MAX_HIGHPOWER=4并发执行的高功率(START UNIT)命令的最大数量。
options SCSI_NO_SENSE_STRINGS定义该选项后将禁用 sense 描述字符串。
options SCSI_NO_OP_STRINGS定义该选项后将禁用 opcode 描述字符串。
options SCSI_DELAY=5000 # 对 Joe SCSI 设备持保守态度SCSI_DELAY: 在总线重置后冻结 SIM(SCSI 适配器)队列的毫秒数,以及在总线设备重置后冻结设备队列的毫秒数。可通过可调参数 sysctl kern.cam.scsi_delay 在启动时和运行时更改该值。
options CAM_IOSCHED_DYNAMIC根据提示和存储设备的当前性能,在 I/O 调度程序中启用动态决策功能。
options CAM_IO_STATS通过 sysctl 显示额外的 CAM 设备统计数据。
options CAM_TEST_FAILURE启用模拟 I/O 故障的功能。
28.4.12.2 CAM CD-ROM 只读直接访问(“光盘”)设备
以下是与 CD-ROM 设备相关的内核配置选项。
options CHANGER_MIN_BUSY_SECONDS=2为 changer LUN 保证的最小服务时间片。
该变量编译默认值为 2 秒。可通过 sysctl kern.cam.cd.changer.min_busy_seconds 调整。
options CHANGER_MAX_BUSY_SECONDS=10每个 changer LUN 的最大时间片,仅在有 I/O 等待其他 LUN 时生效。
该变量编译默认值为 10 秒。可通过 sysctl kern.cam.cd.changer.max_busy_seconds 调整。
28.4.12.3 CAM 顺序访问(“磁带”)设备驱动
以下是与磁带设备相关的内核配置选项。
options SA_IO_TIMEOUT=4读/写/WFM 操作的超时时间,单位为分钟。
options SA_SPACE_TIMEOUT=60空间操作的超时时间,单位为分钟。
options SA_REWIND_TIMEOUT=(2*60)回带操作的超时时间,单位为分钟。
options SA_ERASE_TIMEOUT=(4*60)擦除操作的超时时间,单位为分钟。
options SA_1FM_AT_EOD默认用于仅在磁带末端(EOT)存在单个文件标记的设备型号。
28.4.12.4 CAM 处理器目标(PT)设备
以下是与处理器目标设备相关的内核配置选项。
options SCSI_PT_DEFAULT_TIMEOUT=60CAM 处理器目标(pt)设备的超时时间(可选),单位为秒。默认值为 60 秒。
28.4.12.5 在其他设备(例如磁盘)上进行 SES 直通访问
以下是与 SES 直通访问相关的内核配置选项。
options SES_ENABLE_PASSTHROUGH通常默认禁用此功能,因为许多新型 SCSI 磁盘会报告自身具备 SES(SCSI Enclosure Services)功能,这可能在构建拓扑时与磁盘所在机箱的 SES 设备产生冲突。
28.4.12.6 iSCSI
iSCSI 是一种通过网络连接访问 SCSI 设备的协议。
device cfiscsi # CAM 目标层 iSCSI target 前端
device iscsi # iSCSI initiator 发起端
device iser # iSCSI RDMA 扩展(iSER)发起端iSCSI 可通过网络连接(例如 TCP/IP 套接字)访问 SCSI 外设。
28.4.13 杂项设备和选项
以下是其他各类杂项设备和内核配置选项。
device pty兼容 BSD 风格的伪终端(pty)。
device nmdm背靠背(back-to-back)tty 设备。
device md基于内存(通过 malloc 分配)的磁盘设备。
device snpSnoop 设备,用于监控 pty、vty 等终端设备。
device ccd级联磁盘(Concatenated Disk)驱动程序。
device firmwarefirmware(9) 支持,firmware 镜像的加载与管理。
options LIBICONV内核端 iconv 库,参见:iconv(3)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=iconv&sektion=3。
options MSGBUF_SIZE=40960内核消息缓冲区的大小。应为 N × pagesize(内存页大小)。
28.4.14 硬件总线配置
硬件总线配置用于设置系统与硬件设备之间的通信接口。
device pci
options PCI_HP # PCIe 原生热插拔
options PCI_IOV # PCI SR-IOV 支持PCI 总线及其相关选项。
28.4.15 硬件设备配置
对于 ISA 总线,所需的提示已列出。PCI、CardBus 和 SD/MMC 是自识别总线,因此不需要提示。
28.4.15.1 必需设备
以下是系统运行所需的基本设备配置选项。
options KBD_DISABLE_KEYMAP_LOAD # 拒绝加载键盘布局
options KBD_INSTALL_CDEV # 在 /dev 中生成 CDEV 条目这些选项同样适用于其他键盘驱动程序。
options KBD_DELAY1=200 # 定义初始按键延迟
options KBD_DELAY2=15 # 定义按键延迟定义键盘延迟参数(对于响应迅速的交互式控制台,可尝试 200 和 15)。
device kbdmux # 键盘多路复用器
options KBDMUX_DFLT_KEYMAP # 指定内置键盘布局
makeoptions KBDMUX_DFLT_KEYMAP=it.iso # 设置默认键盘布局为意大利语 ISO 布局options FB_DEBUG帧缓冲调试。
options TEKEN_CONS25 # cons25 风格终端仿真
options TEKEN_UTF8 # UTF-8 输出处理启用 syscons 终端仿真器(teken)的实验性功能支持。
device vt
options VT_ALT_TO_ESC_HACK=1 # 在 ALT 键前添加 ESC 序列
options VT_MAXWINDOWS=16 # 虚拟控制台数量
options VT_TWOBUTTON_MOUSE # 使用右键粘贴vt 视频控制台驱动程序。
options VT_FB_MAX_HEIGHT=480 # 高度
options VT_FB_MAX_WIDTH=640 # 宽度以上选项用于设置最大帧缓冲区大小。
options TERMINAL_NORM_ATTR=(FG_GREEN|BG_BLACK) # 设置普通终端文本的颜色:前景色为绿色,背景色为黑色
options TERMINAL_KERN_ATTR=(FG_LIGHTRED|BG_BLACK) # 设置内核消息文本的颜色:前景色为亮红色,背景色为黑色以上选项用于自定义默认 vt 终端的颜色。
28.4.15.2 可选设备
以下是各类可选的硬件设备驱动程序配置选项。
28.4.15.2.1 SCSI 主机适配器
device aacraidPMC 的 Adaptec RAID 控制器,支持第 6、7、8 系列及后续型号。该驱动使用 CAM 容器接口。
device ahcAdaptec 274x、284x、2910、293x、294x、394x、3950x、3960x、398x、4944、19160x、29160x 以及 aic7770/aic78xx 系列。
device ahdAdaptec 29320/39320 控制器
device isp- Qlogic ISP 1020、1040 和 1040B PCI SCSI 主机适配器
- ISP 1240 双 Ultra SCSI,ISP 1080 和 1280(双)Ultra2
- ISP 12160 Ultra3 SCSI
- Qlogic ISP 2100 和 ISP 2200 1Gb 光纤通道主机适配器
- Qlogic ISP 2300 和 ISP 2312 2Gb 光纤通道主机适配器
- Qlogic ISP 2322 和 ISP 6322 2Gb 光纤通道主机适配器
envvar hint.isp.0.disable="1"
envvar hint.isp.0.role="3"
envvar hint.isp.0.prefer_iomap="1"
envvar hint.isp.0.prefer_memmap="1"
envvar hint.isp.0.fwload_disable="1"
envvar hint.isp.0.ignore_nvram="1"
envvar hint.isp.0.fullduplex="1"
envvar hint.isp.0.topology="lport"
envvar hint.isp.0.topology="nport"
envvar hint.isp.0.topology="lport-only"
envvar hint.isp.0.topology="nport-only"isp 相关的 hint 参数说明。
envvar hint.isp.0.portwnn="w50000000aaaa0000"
envvar hint.isp.0.nodewnn="w50000000aaaa0001"isp 相关 hint。
由于无法获取 u_int64_t 类型的值,也无法解析以 0x 开头的字符串,因此采用了该变通方法。
device ispfwQlogic 主机适配器的固件模块。
#device mpi3mr第 4 代 LSI-Logic MPT/Fusion(仅适用于 aarch64 和 amd64)。
device mpr第 3 代 LSI-Logic MPT/Fusion(仅适用于 aarch64 和 amd64)。
device mps第 2 代 LSI-Logic MPT/Fusion(仅适用于 aarch64 和 amd64)。
device mptLSI-Logic MPT/Fusion 53c1020、53c1030 Ultra4、FC9x9 光纤通道主机适配器。
device symSymbios/Logic 53C8XX 系列 PCI-SCSI I/O 处理器(仅适用于 aarch64 和 amd64):
- 53C810
- 53C810A
- 53C815
- 53C825
- 53C825A
- 53C860
- 53C875
- 53C876
- 53C885
- 53C895
- 53C895A
- 53C896
- 53C897
- 53C1510D
- 53C1010-33
- 53C1010-66
options AHC_ALLOW_MEMIO只有在设置了此选项时,aic7xxx 驱动程序才会尝试对所有配置了内存映射 I/O 的 PCI 控制器使用内存映射 I/O。不幸的是,这在某些主板上无法工作,因此不能作为默认设置。
options AHC_DUMP_EEPROM转储 ahc 控制器配置 PROM 的内容。
options AHC_TMODE_ENABLE启用 ahc(4) 的 target mode 操作单元位图。
options AHC_DEBUG编译 Aic7xxx 调试代码。
options AHC_DEBUG_OPTSAic7xxx 驱动调试选项。参见:sys/dev/aic7xxx/aic7xxx.h[EB/OL]. [2026-03-26]. https://github.com/freebsd/freebsd-src/blob/main/sys/dev/aic7xxx/aic7xxx.h。
options AHC_REG_PRETTY_PRINT在调试输出中打印寄存器位字段。会使驱动增加约 128 KB 的大小。参见:ahc(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ahc&sektion=4。
options AHD_DEBUG编译 aic79xx 调试代码。
options AHD_DEBUG_OPTS=0xFFFFFFFFAic79xx 驱动调试选项。会使驱动增加约 215 KB。参见:ahd(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ahd&sektion=4。
options AHD_REG_PRETTY_PRINT在调试时打印可读的寄存器定义。
options AHD_TMODE_ENABLE启用 ahd(4) 的 target mode 操作单元位图。
28.4.15.2.2 dev/isp/(Qlogic SCSI/FC 驱动)相关
以下是与 Qlogic ISP 驱动相关的内核配置选项。
options ISP_TARGET_MODE=1ISP_TARGET_MODE 可启用 isp(4) target mode 操作。
options ISP_DEFAULT_ROLES=0ISP_DEFAULT_ROLES:默认角色。
- none = 0
- target = 1
- initiator = 2
- both = 3(当前不支持)
# ISP_INTERNAL_TARGET (用于测试的简单内部磁盘 target)注意
此项在原文中即如此,不确定是否为 options 选项。请读者自行核实。
#options SYM_SETUP_SCSI_DIFF对 825A、875、885 的 HVD 支持。
禁用:0(默认);启用:1。
#options SYM_SETUP_PCI_PARITYPCI 奇偶校验检查。
禁用:0;启用:1(默认)。
#options SYM_SETUP_MAX_LUN支持的 LUN 数量。
默认:8,范围:1-64。
device cissCompaq“CISS”RAID 控制器(SmartRAID 5* 系列)。
这些控制器提供类 SCSI 接口,并依赖 CAM 基础架构。
device ida # Compaq Smart RAID
device mlx # Mylex DAC960
device mfi # LSI MegaRAID SAS
device mfip # LSI MegaRAID SAS 直通,需要 CAM
options MFI_DEBUG
device mrsas # LSI/Avago MegaRAID SAS/SATA,6Gb/s 和 12Gb/sCompaq Smart RAID、Mylex DAC960 和 AMI MegaRAID 控制器。
仅需添加相关条目;代码可自动发现并配置其支持的所有控制器。
28.4.15.2.3 NVMe
NVMe 是一种专为闪存存储设计的接口协议。
device nvme # PCIe NVMe 主机驱动/主机控制器
options NVME_USE_NVD=1 # 使用 nvd(4) 而非 CAM 的 nda(4) 驱动
device nvmf # NVMeoF 主机驱动/NVMeoF 主机
device nvmft # NVMeoF ctl(4) 前端 / NVMeoF CAM 目标层前端
device nvmf_tcp # NVMeoF TCP 传输
device nda # NVMe 直接访问设备(即磁盘)
device nvd # 非 CAM 的 NVMe 磁盘驱动。将 NVMe 命名空间作为磁盘暴露,依赖 nvme28.4.15.2.4 串行 ATA(SATA)主机控制器
SATA 是一种用于连接存储设备的接口标准。
device ahci # AHCI 兼容 SATA 控制器兼容高级主机控制器接口(AHCI)。
device mvsMarvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA 控制器。
device siisSiliconImage SiI3124/SiI3132/SiI3531 SATA 控制器。
device adaATA/SATA 直接访问设备(即磁盘)。
以上驱动均为 cam(4) 子系统的一部分。
它们取代了功能较少的 ata(4) 子系统驱动,并支持相同的硬件。
device ata # 传统 ATA/SATA 控制器ATA 驱动支持所有传统的 ATA/ATAPI 控制器,包括 PC 卡设备。
在现代机器上,只需添加 device ata 这行,即可让系统发现所有 PCI 和 PC 卡 ATA/ATAPI 设备。
还可以通过使用 atacore 驱动,然后再按厂商判断各个总线和芯片组驱动以选择单独的驱动。例如,要构建一个仅支持 VIA 芯片组的系统,可以省略 ata 这行,仅包含驱动 atacore、atapci 和 atavia。
#device atacore # ATA 核心功能
#device ataisa # ISA 总线支持
#device atapci # PCI 总线支持;仅支持通用芯片组模块化 ATA 驱动。
#device ataacard # ACARD
#device ataacerlabs # Acer Labs Inc. (ALI)
#device ataamd # Advanced Micro Devices (AMD)
#device ataati # ATI
#device atacenatek # Cenatek
#device atacypress # Cypress
#device atacyrix # Cyrix
#device atahighpoint # HighPoint
#device ataintel # Intel
#device ataite # Integrated Technology Inc. (ITE)
#device atajmicron # JMicron
#device atamarvell # Marvell
#device atamicron # Micron
#device atanational # National
#device atanetcell # NetCell
#device atanvidia # nVidia
#device atapromise # Promise
#device ataserverworks # ServerWorks
#device atasiliconimage # Silicon Image Inc. (SiI)(原 CMD)
#device atasis # Silicon Integrated Systems Corp. (SiS)
#device atavia # VIA Technologies Inc.PCI ATA 芯片组。
envvar hint.ata.0.at="isa"
envvar hint.ata.0.port="0x1f0"
envvar hint.ata.0.irq="14"
envvar hint.ata.1.at="isa"
envvar hint.ata.1.port="0x170"
envvar hint.ata.1.irq="15"对于较旧的非 PCI、非 PnP BIOS 系统,需要添加这些 hint 行。
28.4.15.2.5 串行接口(uart)
串行接口提供了系统与外部设备之间的串行通信能力。
device uartuart(4) 串行接口通用驱动程序。
options UART_PPS_ON_CTS # 使用 CTS 而非 DCD 捕获时间脉冲
options UART_POLL_FREQ # 设置轮询频率,当硬件不支持中断时使用(默认 50 Hz)uart(4) 驱动选项。
envvar hint.uart.0.at="isa"该 hint 仅应对纯 ISA 设备使用,其他情况下不需要,且极不建议使用。
envvar hint.uart.0.port="0x3f8"
envvar hint.uart.0.flags="0x10"
envvar hint.uart.0.baud="115200"以上三个 hint:UART 是系统设备(例如控制台或调试端口),又仅在平台上没有其他方式将信息传递给内核时使用。hint 的单元号(即 0)仅用于将 hint 组合在一起,与探测到的 UART 的单元号无关。
flags 用于支持控制台的串行驱动,例如 uart(4):
- 0x10:为该单元启用控制台支持。其他控制台标志(如适用)在未设置此标志时会被忽略。启用控制台支持并不意味着该单元是首选控制台。可以通过启动时使用
-h,或在 loader 中设置boot_serial=YES以启用。当前最多仅一个单元可以启用控制台支持;配置文件中第一个设置了该标志的单元为首选。 0x80:在 ddb 中将该端口用于串行线路 gdb 支持,也称为调试端口。
options BREAK_TO_DEBUGGER串行驱动支持控制台的选项:
BREAK_TO_DEBUGGER:控制台上的 BREAK/DBG 会进入 ddb(如果可用)
options ALT_BREAK_TO_DEBUGGERSolaris 实现了一种新的 BREAK,由字符序列 CR ~ ^b(先按 回车键,然后按 ~,再按快捷键 Ctrl + B。以下类似)触发,类似于 Sun 服务器上远程控制台使用的常见模式。
FreeBSD 增补了此功能:CR ~ ^p 会触发强制 panic,CR ~ ^r 会触发干净重启。
device scc串行通信控制器。
支持 Freescale/NXP Quad Integrated 以及 Zilog Z8530 多通道通信控制器。
device pucPCI 通用通信驱动。
支持各种多端口 PCI I/O 卡。
28.4.15.2.6 网络接口
以下是各类网络接口设备驱动程序配置选项。
28.4.15.2.6.1 MII 总线
device mii # 最小 MII 支持
device mii_bitbang # 通用模块,用于 bit-bang 操作 MII
device miibus # 支持 MII,带 bit-bang 和所有 PHYMII 总线是许多 PCI 以太网卡所必需的,尤其是那些使用 MII 兼容收发器或实现类似 MII 的收发器控制接口的网卡。
在内核配置中添加 device miibus 可引入对通用 miibus API 的支持、对 MII 的 bit-bang 通用支持以及所有 PHY 驱动,含为未被单独驱动专门处理的 PHY 提供的通用驱动。
如果网卡驱动需要特定 PHY 的支持,可以通过添加 device mii、device mii_bitbang,然后再添加相应的 PHY 驱动以实现。
device acphy # Altima Communications AC101
device amphy # AMD AM79c873 / Davicom DM910{1,2}
device atphy # Attansic/Atheros F1
device axphy # Asix Semiconductor AX88x9x
device bmtphy # Broadcom BCM5201/BCM5202 和 3Com 3c905Cdevice bnxt # Broadcom NetXtreme-C/NetXtreme-E该驱动基于通用 MII 总线控制器代码。bnxt 支持 Broadcom NetXtreme-C 和 NetXtreme-E PCIe 10/25/50G 以太网适配器。
device brgphy # Broadcom BCM54xx/57xx 1000baseTX
device cgem # Cadence GEM 千兆以太网
device ciphy # Cicada/Vitesse CS/VSC8xxx
device e1000phy # Marvell 88E1000 1000/100/10-BT
device gentbi # 通用 10-bit 1000BASE-{LX,SX} 光纤接口
device icsphy # ICS ICS1889-1893
device ip1000phy # IC Plus IP1000A/IP1001
device jmphy # JMicron JMP211/JMP202
device lxtphy # Level One LXT-970
device nsgphy # NatSemi DP8361/DP83865/DP83891
device nsphy # NatSemi DP83840A
device nsphyter # NatSemi DP83843/DP83815
device pnaphy # HomePNA
device qsphy # Quality Semiconductor QS6612
device rdcphy # RDC Semiconductor R6040
device rgephy # Realtek 8169S/8110S/8211B/8211C
device rlphy # Realtek 8139
device rlswitch # Realtek 8305
device smcphy # SMSC LAN91C111
device tdkphy # TDK 89Q2120
device truephy # LSI TruePHY
device xmphy # XaQti XMAC II28.4.15.2.6.2 基于通用 MII 总线控制器代码的 PCI 以太网卡
提示
bxeBroadcom NetXtreme II (BCM5771X/BCM578XX) PCIe 10Gb 以太网适配器。条目位于sys/x86/conf/NOTES。该 PCI 以太网卡基于通用 MII 总线控制器代码。
device ae # Attansic/Atheros L2 快速以太网支持基于 Attansic/Atheros L2 PCI-Express FastEthernet 控制器的 10/100Mbps 快速以太网适配器。
device age # Attansic/Atheros L1 千兆以太网支持基于 Attansic/Atheros L1 PCIe 千兆以太网控制器的千兆以太网适配器。
device alc # Atheros AR8131/AR8132 以太网支持 Atheros AR8131/AR8132 PCIe 以太网控制器。
device ale # Atheros AR8121/AR8113/AR8114 以太网支持 Atheros AR8121/AR8113/AR8114 PCIe 以太网控制器。
注意
athAtheros a/b/g 无线网卡(需要ath_hal和wlan)。此条目在其他位置。
device bce # Broadcom BCM5706/BCM5708 千兆以太网Broadcom NetXtreme II(BCM5706/BCM5708)PCI/PCIe 千兆以太网适配器。
device bfe # Broadcom BCM440x 10/100 以太网Broadcom BCM4401 以太网适配器。
device bge # Broadcom BCM570xx 千兆以太网支持基于 Broadcom BCM570x 系列控制器的千兆以太网适配器,包括 3Com 3c996-T、Netgear GA302T、SysKonnect SK-9D21 和 SK-9D41,以及 Dell PowerEdge 2550 服务器上的嵌入式千兆网卡。
device cas # Sun Cassini/Cassini+ 和 NS DP83065 SaturnSun Cassini/Cassini+ 和 National Semiconductor DP83065 Saturn。
device dc # DEC/Intel 21143 及各种类似型号支持基于 DEC/Intel 21143 及类似芯片的 PCI 快速以太网适配器,包括 ADMtek AL981 Comet、AN985 Centaur、ASIX AX88140A/AX88141、Davicom DM9100/DM9102、Lite-On 82c168/82c169、Lite-On/Macronix LC82C115 PNIC II 及 Macronix 98713/98713A/98715/98715A/98725 PMAC。替代旧的 al、ax、dm、pn 和 mx 驱动。支持品牌示例:Digital DE500-BA、Kingston KNE100TX、D-Link DFE-570TX 等。
device et # Agere ET1310 10/100/千兆以太网device fxp # Intel EtherExpress PRO/100B (82557, 82558)
envvar hint.fxp.0.prefer_iomap="0"Intel EtherExpress Pro/100B(可以通过 prefer_iomap 环境变量选择 I/O 访问而非内存映射)。
device gem # Apple GMAC/Sun ERI/Sun GEMApple GMAC/Sun ERI/Sun GEM.
device jme # JMicron JMC250 千兆/JMC260 快速以太网JMicron JMC260 快速以太网/JMC250 千兆以太网适配器。
device lge # Level 1 LXT1001 千兆以太网支持基于 Level 1 LXT1001 NetCellerator 芯片的 PCI 千兆以太网适配器,包括 D-Link DGE-500SX、SMC TigerCard 1000 (SMC9462SX) 及部分 Addtron 网卡。
device lio # Cavium 23XX 以太网适配器支持lio:支持 Cavium 23XX 系列以太网适配器。
device mlxfw # Mellanox 固件更新模块mlxfw:Mellanox 固件更新模块。
device mlx5 # IB 与以太网共享代码模块Mellanox ConnectX-4 和 ConnectX-4 LX IB 与以太网共享代码模块。
device mlx5en # Mellanox ConnectX-4 和 ConnectX-4 LXMellanox ConnectX-4 和 ConnectX-4 LX PCIe 以太网适配器。
device msk # Marvell/SysKonnect Yukon II 千兆以太网msk: 支持基于 Marvell/SysKonnect Yukon II 千兆控制器的 PCI 千兆以太网适配器,包括 88E8021、88E8022、88E8061、88E8062、88E8035、88E8036、88E8038、88E8050、88E8052、88E8053、88E8055、88E8056 以及 D-Link 560T/550SX。
device myMyson 快速以太网(MTD80X、MTD89X)。
device nge # NatSemi DP83820 千兆以太网支持基于 National Semiconductor DP83820/DP83821 芯片的 PCI 千兆以太网适配器,包括 SMC EZ Card 1000 (SMC9462TX)、D-Link DGE-500T、Asante FriendlyNet GigaNIX 1000TA/1000TPC、Addtron AEG320T、Surecom EP-320G-TX 和 Netgear GA622T。
device re # Realtek 8139C+/8169/8169S/8110SRealtek 8139C+/8169/8169S/8110S/8101E PCI/PCIe 以太网适配器。
device rl # Realtek 8129/8139支持基于 Realtek 8129/8139 芯片的 PCI 快速以太网适配器。该驱动默认使用编程 I/O 访问寄存器,因为内存映射模式在 SMP 硬件上可能导致严重锁死。该驱动还支持 Accton EN1207D“Cheetah”网卡,使用 MPX 5030/5038 芯片(Realtek 或其仿制品)。D-Link DFE-530TX+ 使用 Realtek 芯片,应使用此驱动,而非 vr 驱动。
device sge # Silicon Integrated Systems SiS190/191Silicon Integrated Systems SiS190/191 快速/千兆以太网适配器。
device sis # Silicon Integrated Systems SiS 900/SiS 7016支持基于 Silicon Integrated Systems SiS 900/SiS 7016 及 NS DP83815 PCI 快速以太网控制器芯片的网卡。
device sk # SysKonnect SK-984x & SK-982x 千兆以太网支持 SysKonnect SK-984x 系列 PCI 千兆以太网适配器,包括 SK-9841/9842 单端口(单模/多模光纤)及 SK-9843/9844 双端口(单模/多模)。驱动会自动检测网卡端口数量并将每个端口作为独立网络接口。
device ste # Sundance ST201 (D-Link DFE-550TX)Sundance ST201 PCI 快速以太网控制器,包括 D-Link DFE-550TX。
device stge # Sundance/Tamarack TC9021 千兆以太网支持基于 Sundance/Tamarack TC9021 系列控制器的千兆以太网适配器,包括 Sundance ST2021/ST2023、Sundance/Tamarack TC9021、D-Link DL-4000 和 ASUS NX1101。
device vr # VIA Rhine, Rhine II支持基于 VIA VT3043“Rhine I”和 VT86C100A“Rhine II”芯片的多种快速以太网适配器。包括 D-Link DFE520TX、DFE530TX(DFE530TX+ 使用 rl 驱动)、Hawking PN102TX 和 AOpen/Acer ALN-320。
device vte # DM&P Vortex86 RDC R6040 快速以太网DM&P Vortex86 RDC R6040 快速以太网。
device xl # 3Com 3c90x(“Boomerang”,“Cyclone”)支持 3Com 3c900、3c905、3c905B 和 3c905C(快速)Etherlink XL 网卡及集成控制器,包括部分 Dell Optiplex 和 Dell Precision 台式机的 3c905B-TX 芯片,以及 Dell Latitude 笔记本扩展坞的 3c905-TX 芯片。还支持 3Com 3c980(C)-TX、3Com 3cSOHO100-TX、3Com 3c450-TX。
28.4.15.2.6.3 使用 iflib 框架的 PCI/PCI-X/PCIe 以太网卡
device iflibiflib 网络接口驱动框架。
device em # Intel Pro/1000 千兆以太网Intel PRO/1000 千兆以太网 82542/82543/82544 系列适配器。
此网卡基于通用 MII 总线控制器代码。
device ix # Intel Pro/10GbE PCIe 以太网
device ixv # Intel Pro/10GbE PCIe 以太网 VF28.4.15.2.6.4 PCI 以太网卡(Ethernet)
device cxgb # Chelsio T3 10 千兆以太网
device cxgb_t3fw # Chelsio T3 10 千兆以太网固件基于 Chelsio T3 芯片的 1 GbE / 10 GbE PCIe 以太网适配器。
此网卡基于通用 MII 总线控制器代码。
device cxgbe # Chelsio T4-T6 1/10/25/40/100 千兆以太网Chelsio T4 / T5 / T6 系列 1 / 10 / 25 / 40 / 100 GbE PCIe 以太网适配器。
此网卡基于通用 MII 总线控制器代码。
device cxgbev # Chelsio T4-T6 虚拟功能基于 Chelsio T4、T5 和 T6 的 PCIe 虚拟功能(Virtual Function)。
此网卡基于通用 MII 总线控制器代码。
device le # AMD Am7900 LANCE 和 Am79C9xx PCnetAMD Am7900 LANCE 和 Am79C9xx PCnet 网卡。
此网卡基于通用 MII 总线控制器代码。
device mxgeMyricom Myri-10G 10 GbE 以太网卡。
device oce # Emulex 10 GbE(OneConnect 以太网)Emulex 10 GbE 适配器(OneConnect Ethernet)。
此网卡基于通用 MII 总线控制器代码。
device ti # Alteon Networks Tigon I/II 千兆以太网支持基于 Alteon Tigon I / II 芯片的 PCI 千兆以太网适配器,包括 Alteon AceNIC、3Com 3C985、Netgear GA620 等。使用此驱动时建议大幅增加 kern.ipc.nmbclusters 的值。
此网卡基于通用 MII 总线控制器代码。
28.4.15.2.6.5 PCI IEEE 802.11 无线网卡(Wi-Fi)
device ath # Atheros PCI/CardBus 网卡
device ath_hal # PCI/CardBus 芯片支持
#device ath_ar5210 # AR5210 芯片
#device ath_ar5211 # AR5211 芯片
#device ath_ar5212 # AR5212 芯片
#device ath_rf2413 # AR2413 芯片
#device ath_rf2417 # AR2417 芯片
#device ath_rf2425 # AR2425 芯片
#device ath_rf5111 # AR5111 芯片
#device ath_rf5112 # AR5112 芯片
#device ath_rf5413 # AR5413 芯片
#device ath_ar5416 # AR5416 芯片Atheros 系列无线网卡。
options AH_RXCFG_SDMAMW_4BYTES所有 AR5212 芯片在与 AR71xx CPU 配合使用时都会出现问题。这些型号存在一个仅会在 AR71xx 上触发致命总线错误的漏洞。
漏洞的具体细节尚不明确,但可在 OpenWrt 论坛相关讨论帖 的第 4、5 和 6 页中找到部分信息。
启用此选项可以应用该解决方法。该解决方法会带来性能损失,但如果不启用,设备将完全无法工作。通常该网卡的 DMA 传输以 128 字节为突发长度,但在受影响的 CPU 上,仅 4 字节的突发长度是安全的。
#device ath_ar9160 # AR9160 芯片
#device ath_ar9280 # AR9280 芯片
#device ath_ar9285 # AR9285 芯片
device ath_rate_sample # ath 的 SampleRate 发送速率控制Atheros 相关无线网卡。
device bwi # Broadcom BCM430* BCM431*Broadcom BCM430* 和 BCM431* 系列无线网卡。
此网卡基于通用 MII 总线控制器代码。
device bwn # Broadcom BCM43xxBroadcom BCM43xx 系列无线网卡。
此网卡基于通用 MII 总线控制器代码。
device malo # Marvell Libertas 无线网卡此网卡基于通用 MII 总线控制器代码。
device mwl # Marvell 88W8363 802.11n 无线网卡
device mwlfw # Marvell 88W8363 固件此网卡基于通用 MII 总线控制器代码。mwl 驱动依赖固件 mwlfw。
device ral # Ralink Technology RT2500 无线网卡Ralink Technology IEEE 802.11 无线适配器。
此网卡基于通用 MII 总线控制器代码。
device rtwn # Realtek 无线网卡/Realtek 无线适配器
device rtwnfw # Realtek 无线固件此网卡基于通用 MII 总线控制器代码。
#options TI_SF_BUF_JUMBO在 ti(4) 控制器上使用 sf_buf(9) 接口处理 jumbo 缓冲区。
#options TI_JUMBO_HDRSPLIT为 ti(4) 驱动固件启用头部拆分(header splitting)选项。此功能仅适用于 Tigon II 芯片,对 Tigon I 芯片无效。该选项需要依赖上面的选项 TI_SF_BUF_JUMBO。
options MCLSHIFT=12 # mbuf 集群位移大小,12 == 4 kB;默认值为 11 == 2 kB
options MSIZE=256 # mbuf 大小(字节)这两个选项分别用于调整 mbuf 集群大小和 mbuf 大小。在将它们的默认值更改为其他值时,需要非常小心处理网卡驱动模块,因为这可能导致内核假定的 mbuf 大小与模块假定的 mbuf 大小不匹配。目前,唯一能够检测这种不匹配的驱动是 ti(4)。
28.4.15.2.7 音频设备
device sound通用音频驱动。
28.4.15.2.7.1 snd_*:设备专用驱动
device snd_als4000Avance Logic ALS4000 PCI.
device snd_atiixpATI IXP 200/300/400 PCI.
device snd_cmiCMedia CMI8338/CMI8738 PCI.
device snd_cs4281Crystal Semiconductor CS4281 PCI.
device snd_csaCrystal Semiconductor CS461x/428x PCI(不含 4281)。
device snd_emu10k1Creative EMU10K1 PCI 和 EMU10K2(Audigy)PCI。
device snd_emu10kxCreative SoundBlaster Live! 和 Audigy。
device snd_envy24VIA Envy24 及兼容设备,依赖 snd_spicds。
device snd_envy24htVIA Envy24HT 及兼容设备,依赖 snd_spicds。
device snd_es137xEnsoniq AudioPCI ES137x PCI.
device snd_fm801Forte Media FM801 PCI.
device snd_hdaIntel 高保真音频(控制器)及兼容设备。
device snd_hdspRME HDSP 9632 和 HDSP 9652。
device snd_hdspeRME HDSPe AIO 和 RayDAT。
device snd_ichIntel ICH AC’97 以及更多集成在芯片组中的音频控制器,例如 NVIDIA nForce 控制器。
device snd_maestro3ESS Technology Maestro-3/Allegro PCI.
device snd_neomagicNeomagic 256 AV/ZX PCI.
device snd_soloESS Solo-1x PCI.
device snd_spicdsSPI 编解码器驱动,Envy24/Envy24HT 驱动所需。
device snd_t4dwaveTrident 4DWave DX/NX PCI、SiS 7018 PCI 和 Acer Labs M5451 PCI。
device snd_uaudioUSB 音频。
device snd_via8233VIA VT8233x PCI.
device snd_via82c686VIA VT82C686A PCI.
device snd_vibesS3 Sonicvibes PCI.
28.4.15.2.7.2 用于非 PnP 声卡的 hint 配置
设备的标志位可向驱动提供一些额外信息,这些信息通常通过 PnP 接口自动获取。
- bit 2..0:次级 DMA 通道;
- bit 4:如果主板使用两个 DMA 通道,则设置该位;
- bit 15..8:主板类型,用于覆盖自动检测;如果不确定取值,请保持为
0(目前该功能尚未实现)。
envvar hint.pcm.0.at="isa"
envvar hint.pcm.0.irq="10"
envvar hint.pcm.0.drq="1"
envvar hint.pcm.0.flags="0x0"
envvar hint.sbc.0.at="isa"
envvar hint.sbc.0.port="0x220"
envvar hint.sbc.0.irq="5"
envvar hint.sbc.0.drq="1"
envvar hint.sbc.0.flags="0x15"
envvar hint.gusc.0.at="isa"
envvar hint.gusc.0.port="0x220"
envvar hint.gusc.0.irq="5"
envvar hint.gusc.0.drq="1"
envvar hint.gusc.0.flags="0x13"28.4.15.2.7.3 调试/测试
options SND_DEBUG启用额外调试代码,包括健全性检查和可能增加的详细输出。
options SND_DIAGNOSTICSND_DIAGNOSTIC 类似于 INVARIANTS / DIAGNOSTIC,对任何不一致情况均不予容忍。
options SND_FEEDER_MULTIFORMATSND_FEEDER_MULTIFORMAT 默认只编译 16/32 位 feeder。此选项将启用大多数 feeder 转换器(不含 8 位)。
警告
可能导致内核体积增大。
options SND_FEEDER_FULL_MULTIFORMATSND_FEEDER_FULL_MULTIFORMAT 同上(SND_FEEDER_MULTIFORMAT),但包含 8 位 feeder。
options SND_FEEDER_RATE_HPSND_FEEDER_RATE_HP(feeder_rate)将尽可能使用高精度 64 位运算(在默认情况下会尽量避免)。可能造成运算速度下降。
options SND_PCM_64SND_PCM_64(仅适用于 i386/32 位架构)通过 64 位整数/运算处理 32 位采样。可略微提升动态范围,但运算速度可能变慢。
options SND_OLDSTEREOSND_OLDSTEREO 仅允许 2 声道,相当于禁用多声道处理。
28.4.15.2.8 CardBus(PC 卡总线接口,PC Card)
device cbb实现 YENTA 接口的 PCI / CardBus 桥。
device cardbusCardBus 插槽。
28.4.15.2.9 MMC/SD
device mmcMMC / SD 总线,eMMC 芯片所需。
device mmcsdMMC/SD 内存卡。eMMC 芯片需要。
device sdhci通用 PCI SD 主机控制器。
device rtsxRealtek SD 卡读卡器(RTS5209、RTS5227 等)。
28.4.15.2.10 SMB 总线
系统管理总线(System Management Bus)支持由“smbus”设备提供。
通过 smb 设备(/dev/smb*)访问 SMBus,该设备是 smbus 的子设备。
28.4.15.2.10.1 设备支持
device smb通过 /dev/smb* 进行标准 I/O。
28.4.15.2.10.2 SMB 接口支持
device smbussmbus 总线支持,依赖上方的 smb 设备。
device intpmIntel PIIX4(82371AB, 82443MX)电源管理单元。
options ENABLE_ALART在 Intel intpm 驱动上控制报警。
device alpmAcer Aladdin-IV/V/Pro2 电源管理单元。
device ichsmbIntel ICH SMBus 控制器芯片(82801AA、82801AB、82801BA)。
device viapmVIA VT82C586B/596B/686A 及 VT8233 电源管理单元。
device amdpmAMD 756 电源管理单元。
device amdsmbAMD 8111 SMBus 2.0 控制器。
device nfpmNVIDIA nForce 电源管理单元。
device nfsmbNVIDIA nForce2/3/4 MCP SMBus 2.0 控制器。
device ismtIntel SMBus 2.0 控制器芯片(用于 Atom S1200、C2000)
28.4.15.2.10.3 SMBus 外设设备
device jedec_dimm提供 DDR3 和 DDR4 DIMM 的资产信息和温度报告。
28.4.15.2.11 I²C 总线
I²C 总线支持由 iicbus 设备提供。
device iicbus提供 I²C 总线支持,下方的 ic、iic、iicsmb 等设备均依赖于该设备。
28.4.15.2.11.1 支持的设备
device icI²C 网络接口,依赖 iicbus。
device iicI²C 标准 I/O 接口,依赖 iicbus。
通过 ioctl(2) 在用户空间访问 I²C 从设备。
device iicsmb通过 I²C 桥接的 SMB(使用任意 iicbus 接口的 I²C 到 SMB 桥)。可通过 SMB 命令进行 I²C I/O,依赖 iicbus。
device iicocOpenCores I²C 控制器支持。
OpenCores I²C 控制器的简单轮询驱动。
28.4.15.2.11.2 其他
device iicbbBitbang 驱动,在一对 GPIO 引脚上实现 I²C。提供通用 I²C 位操作(bit-banging)代码(lpbb 所需)。
28.4.15.2.11.3 I²C 总线多路复用器(mux)设备
device iicmuxI²C 多路复用器核心驱动。
device iic_gpiomux通过 GPIO 引脚控制的 I²C 多路复用器硬件。
device ltc430xLTC4305 和 LTC4306 I²C 多路复用器芯片。
28.4.15.2.11.4 I²C 外设设备
device ad7418模拟器件温度和电压传感器驱动。
device ads111x德州仪器 ADS101x 和 ADS111x ADC。
device ds1307Dallas DS1307 RTC 及兼容芯片。
device ds13rtc所有 Dallas/Maxim ds13xx 系列芯片。
device ds1672Dallas DS1672 RTC.
device ds3231Dallas DS3231 RTC 及温度传感器。
device fan53555仙童半导体 FAN53555/SYR82x 稳压器。
device iceeAT24Cxxx 及兼容 EEPROM。
device isl12xxIntersil ISL12xx RTC.
device lm75LM75 兼容温度传感器。
device nxprtcNXP RTC:PCA/PFC212x、PCA/PCF85xx 系列。
device rtc8583爱普生 RTC-8583。
device s35390aSeiko Instruments S-35390A RTC.
device sy8106a矽力杰 SY8106A 降压稳压器。
28.4.15.2.12 并行总线接口
并行总线接口由 ppbus 设备驱动。多个设备可同时连接到并行接口,在检测到设备时可自动进行探测并附加。
28.4.15.2.12.1 支持的接口
device ppcISA 总线并行端口接口。
28.4.15.2.12.2 支持的设备
options PPC_PROBE_CHIPSET启用特定芯片组检测(参见 ppc(4) 中的标志)。
options DEBUG_1284IEEE1284 信号协议调试。
options PERIPH_1284使计算机作为 IEEE 1284 兼容外设。
options DONTPROBE_1284避免启动时检测 PnP 并行设备。
options LPT_DEBUG打印机驱动调试。
options PPC_DEBUG并行芯片组级别调试。
options PLIP_DEBUG并行网络 IP 接口调试。
options PCFCLOCK_VERBOSEpcfclock 驱动详细输出。
options PCFCLOCK_MAX_RETRIES=5最大读取尝试次数(默认 10 次)。
envvar hint.ppc.0.at="isa"
envvar hint.ppc.0.irq="7"
device ppbusdevice lpt并行打印机。
device plip并行网络接口。
device ppi通用 I/O(“Geek Port”)和 IEEE 1284 I/O。
device pps每秒脉冲计时接口。
device lpbb飞利浦官方并行端口 I²C 位操作接口。
device pcfclock并行端口时钟驱动。
28.4.15.2.13 通用 I/O 引脚(GPIO)
device dwgpioSynopsys DesignWare APB GPIO 控制器。
device gpioGPIO 接口及总线支持。
device gpiobacklightsysctl 控制的背光,基于 GPIO。
device gpioiic通过 GPIO bitbang 实现 I²C。
device gpiokeys用于 GPIO 键输入的 kbd(4) 连接层。
device gpioledLED(4) GPIO 连接层。
device gpiopowerGPIO 电源关闭事件处理器。
device gpiopps来自 GPIO 引脚的每秒脉冲输入。
device gpioregulatorGPIO 引脚的 extres/稳压器连接层接口。
device gpiospi通过 GPIO bitbang 实现 SPI。
device gpioths基于 GPIO 引脚的 1-Wire(单总线协议)温湿度传感器。
28.4.15.2.14 脉宽调制(PWM)
device pwmbusPWM 接口及总线支持。
device pwmc用户空间对 PWM 输出的控制访问。
28.4.15.2.15 Etherswitch 框架与驱动
device etherswitchetherswitch(4) 以太网交换机框架。
device miiproxymiibus(4) MII 总线功能代理设备。
device arswitchAtheros 交换机。
device ip17xIC+ 17x 系列交换机。
device rtl8366rbRealtek RTL8366 交换机。
device ukswitch多物理层交换机。
28.4.15.2.16 内核 BOOTP 支持
options BOOTP使用 BOOTP 获取 IP 地址和主机名。
options BOOTP_NFSROOT通过 BOOTP 信息挂载 NFS 根文件系统,依赖 NFSCL 和 NFS_ROOT。
options BOOTP_NFSV3使用 NFS v3 协议挂载 NFS 根目录。
options BOOTP_COMPAT为了兼容有缺陷的 bootp 守护进程的变通方案。
options BOOTP_WIRED_TO=fxp0指定 fxp0 网络接口运行 BOOTP。
options BOOTP_BLOCKSIZE=8192将 NFS 块大小重写为 8192。
options SW_WATCHDOG即使存在硬件看门狗,仍启用软件看门狗例程。
在默认情况下,仅当硬件看门狗不存在时才会启用软件看门狗定时器。
options DEADLKRES添加软件死锁解析器线程。
options NSFBUFS=1024设置要分配的 sf_buf 数量。sf_buf 是 sendfile(2) 使用的虚拟缓冲区,用于映射文件虚拟存储器页,默认数量约为 16*MAXUSERS+512。通常每个并发文件传输需要约 4 个此类缓冲区。
options DEBUG_LOCKS启用锁机制的额外调试代码。此功能会将获取锁的文件名和行号信息存储在锁结构中,并修改多个函数调用以传递相关数据。
除非正在进行锁相关代码的调试,否则该功能没有实际用途。
注意
该选项会修改内核二进制接口(KBI),需要重新编译所有内核模块。
28.4.15.2.17 VirtIO
virtio 条目提供了一种通用总线供设备驱动程序使用。该总线必须与主机通信的接口结合使用。
VirtIO 规范定义了多种此类接口,包括 PCI 和 MMIO 接口。
device virtio通用 VirtIO 总线(必须启用)。
device virtio_mmioVirtIO MMIO 接口。
device virtio_pciVirtIO PCI 接口。
device vtnetVirtIO 以太网设备。
device virtio_balloonVirtIO 内存气球(Balloon)设备。
device virtio_blkVirtIO 块设备。
device virtio_consoleVirtIO 控制台设备。
device virtio_gpuVirtIO GPU 设备。
device virtio_randomVirtIO 随机数(熵)设备。
device virtio_scmiVirtIO SCMI(System Control and Management Interface)设备。
device virtio_scsiVirtIO SCSI 设备。
28.4.15.2.18 HID(人机界面设备)支持
device hid通用 HID 支持。
options HID_DEBUG启用调试信息。
device hidbusHID 总线。
device hidmapHID 到 evdev 的映射。
device hidraw裸设备访问驱动。
options HIDRAW_MAKE_UHID_ALIAS为 /dev/hidraw 安装别名 /dev/uhid。
device hconf多点触控配置表。
device hcons消费者控制设备。
device hgame通用游戏控制器。
device hkbdHID 键盘。
device hmsHID 鼠标。
device hmtHID 多点触控设备(兼容微软标准)。
device hpen通用手写笔驱动。
device hsctrl系统控制。
device ps4dshock索尼 PS4 DualShock 4 游戏手柄驱动。
device u2fFIDO/U2F 认证设备。
options U2F_DROP_UHID_ALIAS不为 /dev/u2f 安装别名 /dev/uhid,并将驱动名称从 uhid 更改为 u2f。
device xb360gpXbox 360 游戏手柄驱动。
28.4.15.3 USB 支持
device uhciUHCI 控制器。
device ohciOHCI 控制器。
device ehciEHCI 控制器。
device xhcixHCI 控制器。
#device slhciSL811 控制器。
device usb通用 USB 框架(USB 必需)。
device udbpUSB 双批量(Bulk)管道驱动。
device ugoldUSB 温度计。
device uledUSB LED 灯。
device uhidHID 人机接口设备(用于其他带有按钮和拨盘的设备)。
device ukbdUSB 键盘。
device ulptUSB 打印机。
device umassUSB 大容量存储设备驱动(依赖 scbus 和 da 设备)。
device usfs设备端模式的 USB 大容量存储驱动。
device umct对 Belkin(贝尔金)F5U109 和 Magic Control Technology(茂杰国际)串行适配器的 USB 支持。
device umodemUSB 调制解调器。
device umsUSB 鼠标。
device atp # Apple 触控板驱动
device wsp # Wellspring 触控板,Apple 笔记本用USB 触控板。
device uepeGalax USB 触摸屏。
device urioDiamond(帝盟)Rio 500 MP3 播放器。
device usbhidHID-over-USB 驱动。
28.4.15.3.1 USB 串口
device ucomUSB 串口支持。
device u3g对 Option、Novatel、华为和 Sierra 3G 调制解调器卡的 USB 支持。
device uark对基于 Technologies ARK3116 芯片的串行适配器的 USB 支持。
device ubsa对 Belkin(贝尔金)F5U103 及兼容串行适配器的 USB 支持。
device uftdi对基于 FT8U100AX 和 FT8U232AM 芯片的串行适配器的 USB 支持。
device uipaq对某些基于 Windows CE 的串行通信设备的 USB 支持。
device uplcom对 Prolific(旺玖科技)PL-2303 串行适配器的 USB 支持。
device uslcom对基于 Silicon Laboratories(芯科科技)CP2101/CP2102 芯片的 USB 串行适配器支持。
device uvisorUSB Visor 和 Palm 设备支持。
device uvscom对 DDI Pocket PHS 设备的 USB 串行支持。
28.4.15.3.2 USB 以太网
device uetherUSB 以太网支持。
device aueADMtek(上元)USB 以太网设备。支持 LinkSys USB100TX、Billionton USB100、Melco LU-ATX、D-Link DSB-650TX 和 SMC 2202USB。同时也兼容 ADMtek AN986 Pegasus 评估板。
device axeASIX Electronics(亚信电子)AX88172 USB 2.0 以太网驱动。用于 LinkSys USB200M 及各种其他适配器。
device axgeASIX Electronics(亚信电子)AX88178A/AX88179 USB 2.0/3.0 千兆以太网驱动。
device cdce使用基于 USB 的以太网通信的设备,特别是符合通信设备类(CDC)以太网规范。支持夏普 Zaurus 掌上电脑、部分 DOCSIS 有线调制解调器及移动电话等设备。
device cueCATC USB-EL1201A USB 以太网设备。支持 CATC Netmate 和 Netmate II,以及 Belkin(贝尔金)F5U111。
device kueKawasaki(川崎)LSI 以太网设备。支持以下适配器:
- LinkSys USB10T
- Entrega USB-NET-E45
- Peracom 以太网适配器
- 3Com 3c19250
- ADS Technologies USB-10BT
- ATen UC10T
- Netgear EA101
- D-Link DSB-650
- SMC 2102USB 和 2104USB
- Corega USB-T
device rueRealtek RTL8150 USB 转快速以太网设备。支持 Melco LUA-KTX 和 GREEN HOUSE GH-USB100B。
device udavDavicom(联傑国际)DM9601E USB 转快速以太网设备。支持 Corega FEther USB-TXC。
device ureRealtek RTL8152/RTL8153 USB 以太网驱动。
device mosMoschip MCS7730/MCS7840 USB 转快速以太网设备。支持 Sitecom LN030。
device uhsoOption N.V. 公司的 HSDPA 设备。
device rsuRealtek RTL8188SU/RTL8191SU/RTL8192SU 无线驱动程序。
device rumRalink Technology(雷凌科技)RT2501USB/RT2601USB 无线驱动程序。
device runRalink Technology(雷凌科技)RT2700U/RT2800U/RT3000U 无线驱动程序。
device uathAtheros AR5523 无线驱动程序。
device upgtConexant(科胜讯)/ Intersil(英特矽尔)PrismGT 无线驱动程序。
device uralRalink Technology(雷凌科技)RT2500USB 无线驱动程序。
device urndisRNDIS USB 以太网驱动程序。
device urtwRealtek RTL8187B/L 无线网卡驱动程序。
device zydZyDas ZD1211/ZD1211B 无线驱动程序。
device usieSierra USB 无线设备驱动程序。
options USB_DEBUG
options U3G_DEBUGUSB 子系统调试选项。
options UKBD_DFLT_KEYMAP # 指定内置键盘布局
makeoptions UKBD_DFLT_KEYMAP=jp.106 # 将内置键盘布局指定为日语 106 键用于 ukbd 驱动的选项。
options UPLCOM_INTR_INTERVAL=100 # 中断管道间隔(毫秒)用于 uplcom 驱动的选项。
options UVSCOM_DEFAULT_OPKTSIZE=8 # 默认输出数据包大小
options UVSCOM_INTR_INTERVAL=100 # 中断管道间隔(毫秒)用于 uvscom 驱动的选项。
28.4.15.4 火线(FireWire,总线)
device firewire火线总线代码。
device sbp基于火线的 SCSI(依赖 scbus 和 da)。
device sbp_targSBP-2 目标模式(依赖 scbus 和 targ)。
device fwe基于火线的以太网(非标准实现)。
device fwip基于火线的 IP 协议(RFC2734 和 RFC3146)。
28.4.15.5 dcons 哑终端支持(简易控制台设备)
device dcons哑终端驱动。
device dcons_crom哑终端火线附件。
options DCONS_BUF_SIZE=16384哑终端缓冲区大小。
options DCONS_POLL_HZ=100哑终端轮询速率。
options DCONS_FORCE_CONSOLE=0强制将哑终端作为主控制台。
options DCONS_FORCE_GDB=1强制将哑终端设置为 GDB 设备。
28.4.16 加密子系统
该子系统基于从 OpenBSD 移植的加密框架。配置 IPSEC 或拥有硬件加密设备时需包含此模块,可加速链接 OpenSSL 的用户应用程序。
相关驱动程序移植自 OpenBSD,其中包含一些已反馈给 OpenBSD 的简单功能增强。
device crypto核心加密子系统支持。
device cryptodev/dev/crypto:用于访问硬件加密设备的接口。
应仅在进行测试或明确知晓需要时才安装 cryptodev 设备。在大多数情况下,该设备并非必需,且可能导致系统性能下降。
device rndtestFIPS 140-2 熵测试工具。
device ccrChelsio T6 加密加速器驱动程序。
device safeSafeNet SafeXcel 1141/1741 加密加速器。
options SAFE_DEBUG启用调试支持:hw.safe.debug。
options SAFE_RNDTEST启用 rndtest(4)(FIPS 140-2 随机数生成器测试监视器)支持。
28.4.17 嵌入式系统
options INIT_PATH=/sbin/init:/rescue/init在嵌入式系统中,可能需要运行 init 以外的程序。
28.4.17.1 调试选项
options BUS_DEBUG启用 newbus 调试。
options DEBUG_VFS_LOCKS启用 VFS 锁调试。
options SOCKBUF_DEBUG启用 sockbuf 最后记录及 mbuf 尾部检查。
options IFMEDIA_DEBUG启用 net/if_media.c 中的调试功能。
28.4.17.2 SYSINIT 详细输出
options VERBOSE_SYSINIT使 mi_startup() 执行的 SYSINIT 过程输出更为详细的信息。该功能在移植新架构时非常实用。若同时启用了 DDB 调试器,将显示函数名称而非地址。若定义值为 0,则详细输出代码会被编译进内核但默认禁用,可通过可调参数 debug.verbose_sysinit=1 启用。
28.4.18 SYSV IPC 内核参数
options SEMMNI=11系统可同时使用的 System V 信号量最大数量。
options SEMMNS=61系统范围内信号量总数。
options SEMMNU=31系统中撤销结构总数。
options SEMMSL=61单个进程可同时使用的 System V 信号量最大数量。
options SEMOPM=101单个 System V 信号量可同时挂起的最大操作数。
options SEMUME=11单个 System V 信号量可同时挂起的最大撤销操作数。
options SHMALL=1025系统范围内共享内存页面的最大数量。
options SHMMAX=(SHMMAXPGS*PAGE_SIZE+1)
options SHMMAXPGS=1025单个 System V 共享内存区域的最大大小(以字节为单位)。
options SHMMIN=2单个 System V 共享内存区域的最小大小(以字节为单位)。
options SHMMNI=33系统可同时使用的共享内存区域最大数量。
options SHMSEG=9单个进程可同时附加的 System V 共享内存区域最大数量。
options PANIC_REBOOT_WAIT_TIME=16设置系统在内核发生 panic 时自动重启前的等待时间(以秒为单位)。若设置为(-1),系统将无限期等待,直至在控制台上按下任意键。
options DIRECTIO文件设置了 O_DIRECT 标志时,尝试绕过缓冲区缓存,将数据直接读取到用户空间缓冲区。
读取操作的偏移量和长度必须是物理介质扇区大小的整数倍。
options NSWBUF_MIN=120指定交换 I/O 缓冲区数量的下限。这些缓冲区在(除其他情况外)启用内核选项 DIRECTIO 且文件设置标志 O_DIRECT 时,用于绕过缓冲区缓存。
options CAM_DEBUG_DELAY
options DEBUG未提供文档说明的 lint 检查选项。
注意
为这些选项提供文档并无冒犯之意。
options LOCKF_DEBUG内核文件锁调试。
28.4.19 System V 兼容消息队列
options MSGMNB=2049队列中最大字符数。
注意
此处给出的数值仅用于测试内核构建。
源代码中的默认值提供了几乎相同的数值。MSGSSZ 必须是 8 到 1024 之间的 2 的幂的值。
options MSGMNI=41最大消息队列标识符数量。
options MSGSEG=2049最大消息段数量。
options MSGSSZ=16消息段大小。
options MSGTQL=41系统中最大消息数量。
options NBUF=512缓冲区头数量。
options SC_DEBUG_LEVEL=5syscons 调试级别。
options SC_RENDER_DEBUGsyscons 渲染调试。
options VFS_BIO_DEBUGVFS 缓冲区 I/O 调试。
options KSTACK_MAX_PAGES=32内核栈最大可分配页数。
options KSTACK_USAGE_PROF跟踪线程在内核中使用的最大栈空间。
28.4.20 Adaptec 阵列控制器驱动选项
options AAC_DEBUG调试级别:
0:静默模式,仅显示警告信息1:详细模式,显示主要功能点和已完成操作2:极端详细模式,显示循环内的跟踪项等详细信息
options RACCT资源审计。
options RCTL资源限制。
options MAXFILES=999未有文档描述的 lint 检查选项。
28.4.21 随机数生成器
options RANDOM_FENESTRASX可选算法。
#options RANDOM_LOADABLE将 CSPRNG 算法作为模块加载。
options RANDOM_ENABLE_UMA # slab 分配器选择此项能以高频率(但可能消耗资源)的方式收集 Slab 分配器的熵值。在极高频率场景下,此功能的价值存疑。
options RANDOM_ENABLE_ETHER # 以太网传入选择此项能以高频率(但可能消耗资源)的方式收集 mbuf 中 m_next 指针的熵值。
注意
除非正在接收超过 4 K 的巨型帧或通过 LRO 技术实现持续数据突发,否则
m_next指针通常为 NULL。因此在常规情况下,该操作实际是在向熵池注入零值。即使该指针非空,它也只是指向某个经过 256 字节对齐的 mbuf(其数量范围在数千至数万之间)。因此,哪怕是在最理想情况下,这也是劣质的熵源。如果没有对熵收集进行实际运行时分析,可能会误导用户认为收集到的熵量远超实际值,这将引发另一类安全风险。在高数据包速率场景下,以太网熵收集的成本极其高昂,可能导致高达 50% 的数据包接收丢失率。本选项仅为保持向后兼容性而提供,但无论如何都不建议在任何环境中使用。
options RANDOM_ENABLE_KBD通过键盘收集熵值。
options RANDOM_ENABLE_MOUSE通过鼠标收集熵值。
options RANDOM_ENABLE_TPM # 暗含依赖 TPM_HARVEST通过 TPM 收集熵值。
options IMGACT_BINMISC用于通过 QEMU 等模拟器启用应用程序执行的模块。
28.4.22 zlib 输入/输出流支持
options GZIO此选项用于支持生成经过压缩的核心转储文件。
28.4.23 zstd
options ZSTDIO此选项用于支持 Zstd 压缩的核心转储文件、GEOM_UZIP 镜像,并且在静态链接时是 ZFS 文件系统必需的组件。
28.4.24 BHND(4) 驱动
options BHND_LOGLEVEL日志记录阈值级别。
28.4.25 evdev 接口
device evdev输入事件设备支持。
options EVDEV_SUPPORT传统驱动程序中的 evdev 支持。
options EVDEV_DEBUG启用事件调试消息。
device uinput安装字符设备 /dev/uinput。
options UINPUT_DEBUG启用 uinput 调试消息。
28.4.26 加密的内核崩溃转储
options EKCD加密的内核崩溃转储功能。
28.4.27 串行外设接口(SPI)
device spibusSPI 总线支持。
device at45d
device cqspiDataFlash 驱动程序。
device mx25l
device n25qSPI flash 驱动程序。
device spigen用户空间对 SPI 设备的通用访问支持。
options SPIGEN_LEGACY_CDEVNAMEspigen 的传统设备名称:为 /dev/spigenX.Y 设备启用传统的别名 /dev/spigenN。
28.4.28 压缩支持
device zlibgzip/zlib 压缩/解压缩库。
device xzxz_embedded LZMA 解压缩库。
28.4.29 内核 stats(3) 支持
options STATS内核级 stats(3) 支持。
28.4.30 文件系统监控
device filemonmake(1) 元(meta)模式的文件监控。
28.4.31 英特尔 QuickAssist (QAT) 驱动程序
options QAT_DISABLE_SAFE_DC_MODEIntel QuickAssist (QAT),英特尔数据保护与压缩加速技术。
禁用 QAT 安全模式。