For the complete documentation index, see llms.txt. This page is also available as Markdown.

43.4 机器无关的内核选项注解

机器无关选项构成内核的核心抽象层,实现跨硬件平台可移植性。本节译注 sys/conf/NOTES 中的通用配置选项,按功能类别列出原文与中文释义。

技巧

可直接将下面的条目剪切并粘贴到内核配置文件中。

deviceoptionsmachineidentmaxusersmakeoptionshints 等开头的行应放入将要运行 config(8) 的内核配置文件中。

envvar hint. 开头的行应放入 hints 文件中。

如需内核测试构建,请使用 make LINT 创建旧式的 LINT 文件。

此文件是机器无关的内核配置说明。

技巧

NOTES 约定和风格指南:

大段注释应以仅包含注释字符的一行开始和结束。

描述特定对象时,如果存在块注释,应先写块注释。接下来按顺序写 device、options 和 hints 条目。所有 device 和 option 行都必须有注释,且注释不能只是重复 device 或 option 名称。如可能,注释应简明并放在同一行。设备和子系统的详细说明应放在手册页中。

options 与选项名之间用一个空格加一个制表符分隔。device 与设备名之间用两个空格加一个制表符分隔。option 或 device 后的注释应在注释字符后加一个空格。要注释掉禁用代码的负选项(因此不应在 LINT 构建中启用),在 options 前加 #!

ident		LINT

这是内核的“标识”,通常应与内核的名称相同。

maxusers	10

参数 maxusers 通过 subr_param.c 中定义的公式控制多个内部系统表的静态大小。

省略此参数或将其设置为 0,系统将根据物理内存自动调整大小。

静态编译设备连接信息,而非使用 /boot/device.hints

使用以上方法将值编译进内核,以便内核可以通过 getenv()(或者用户空间的 kenv(1))访问。文件格式为 variable=value,详见 kenv(1)

  • ①:makeoptions 参数可将变量传递给构建区域生成的 Makefile。

  • ②:CONF_CFLAGS 提供了一些额外的编译程序标志,这些标志会在大多数其他标志之后添加到 ${CFLAGS} 中。此处用它来禁止使用非最优的 gcc 内建函数(例如 memcmp)。

  • ③:DEBUG 是一个特殊标志。

下面的做法等同于执行 config -g KERNELNAME,会生成 kernel.debug,该内核带有调试信息 -g,同时还会生成一个普通的 kernel。使用 make install.debug 可以安装调试内核,但因为内核不会加载调试符号,通常没有必要。

  • ④:重命名 KERNEL,即更改内核的默认名称。

  • ⑤:MODULES_OVERRIDE 可用于限制构建的模块列表,仅编译指定的模块。

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. 在内核编译时设置值。下面的选项可将该限制提高到 1 GB。通过修改相关参数,还可以进一步提高这些值。

  2. /boot/loader.conf 文件中设置可调节参数:kern.maxswzonekern.maxbcachekern.maxtsizkern.dfldsizkern.maxdsizkern.dflssizkern.maxssizkern.sgrowsiz

/boot/loader.conf 文件中的设置会覆盖内核配置文件中的任何值。有关更多细节,请参见 sys/kern/subr_param.c 中的函数 init_param1。建议使用 /boot/loader.conf.local 文件扩展本地配置,避免直接修改 /boot/loader.conf 文件。

BLKDEV_IOSIZE 可设置用户块设备 I/O 使用的默认块大小。

注意

通过带有非零分区块大小的标签指定块设备时,标签会覆盖该值。默认值为 PAGE_SIZE

对于已知可靠的设备,读写操作将分割成 MAXPHYS 大小的块;对于其他设备,则使用 DFLTPHYS 大小的块。某些应用在使用较大原始 I/O 访问块时性能更好。

注意

某些虚拟存储器(VM)参数是从这些值推导出来的,将它们设置得过大可能会导致内核无法启动。

可将此配置文件实际存储到内核二进制文件中。详见 config(8)。

各种启动参数的编译时默认值。

dmesg 启动标签的编译时默认值。

默认启动标签;可使用 loader 可调参数 kern.boot_tag 以覆盖。当前启动的标签也通过 sysctl kern.boot_tag 暴露。

内核静态缓冲区应容纳的最大启动标签大小。BOOT_TAG 及其相关可调参数的最大尺寸。

GEOM 相关选项。

可以在编译时指定根设备和文件系统类型;如果引导程序无法正确识别根设备,此处提供了备用方案;或在启动内核时指定 RB_DFLTROOT 标志(-r)以覆盖选项。

调度程序

调度程序是内核中负责分配 CPU 时间给不同线程和进程的核心组件。

SCHED_4BSDSCHED_ULE 必须二选一。这些选项用于选择需编译进内核的调度程序。

说明:

  • SCHED_4BSD 使用全局运行队列且没有 CPU 亲和性,这在 SMP 系统中性能表现相对有限。但它具有非常好的交互性和优先级选择能力。自 FreeBSD 7.1 起,SCHED_ULE 已取代 SCHED_4BSD 成为默认调度程序。SCHED_4BSD 仅在单处理器系统或特定调试场景下仍有意义,在现代 SMP 系统上建议使用 SCHED_ULE

  • SCHED_ULE 在许多 SMP 机器上的工作负载下,相比 4BSD 提供了显著的性能优势。它支持 CPU 亲和性、每 CPU 的运行队列和调度程序锁。它还对交互性有更强的支持,即使在单处理器机器上也能提供更好的响应能力。

  • SCHED_STATS 会在 sysctl kern.sched.stats 下保存一些统计信息,有助于调试调度决策。

SMP

对称多处理器(Symmetric MultiProcessor,SMP)系统包含多个处理器核心,这些核心共享内存和其他资源。

SMP 可构建对称多处理器内核。必须指定。

EARLY_AP_STARTUP 可在内核启动过程中更早地释放应用处理器(在设备探测之前),而非在启动末期。

该选项是在从晚期到早期 AP 启动过渡期间使用的临时选项。

MAXCPU 定义了系统中能启动的最大 CPU 数量。每种架构通常已经有默认值。

NUMA 可启用内核各子系统中对非一致性内存访问(Non-Uniform Memory Access)策略的支持。

MAXMEMDOM 定义了系统中可启动的最大内存域数量。每种架构通常已有默认值。

ADAPTIVE_MUTEXES 可改变阻塞互斥锁的行为:如果当前持有互斥锁的线程在另一 CPU 上执行,则互斥锁会自旋。此行为默认启用,该选项可用于禁用上述行为。

ADAPTIVE_RWLOCKS 会改变读写锁的行为:如果当前持有读写锁的线程在另一 CPU 上执行,则锁会自旋。此行为默认启用,该选项可用于禁用上述行为。

ADAPTIVE_SX 可改变 sx 锁的行为:如果当前持有 sx 锁的线程在另一 CPU 上执行,则锁会自旋。此行为默认启用,该选项可用于禁用上述行为。

MUTEX_NOINLINE 可强制互斥操作通过调用函数来执行每个操作,而非对简单情况进行内联。可用于减小内核文本段的大小。

注意

选项 INVARIANT_SUPPORTINVARIANTSKTRLOCK_PROFILINGWITNESS 已隐式启用这一行为。

RWLOCK_NOINLINE 可强制读写锁操作通过调用函数来执行每个操作,而非对简单情况进行内联。可用于减小内核文本段的大小。

注意

选项 INVARIANT_SUPPORTINVARIANTSKTRLOCK_PROFILINGWITNESS 已隐式启用这一行为。

SX_NOINLINE 可强制 sx 锁操作通过调用函数来执行每个操作,而非对简单情况进行内联。这可用于减小内核文本段的大小。

注意

这种行为已被选项 INVARIANT_SUPPORTINVARIANTSKTRLOCK_PROFILINGWITNESS 隐式启用。

SMP 调试选项

以下是与 SMP 调试相关的内核配置选项。

  • CALLOUT_PROFILING:启用对 callout(9) 后端使用的 callwheel 数据结构的基础分析。

  • PREEMPTION:允许优先级更高的中断线程抢占内核中的线程。提高交互性,使中断线程能更快运行,而非等待。

  • FULL_PREEMPTION:指示内核抢占非实时内核线程。主要用于在开发阶段暴露竞态条件和其他缺陷。启用会降低性能并增加内核 panic 频率。依赖 PREEMPTION 选项,不建议开启。

  • SLEEPQUEUE_PROFILING:基础分析保存活动睡眠队列的哈希表及睡眠等待消息频率。

  • TURNSTILE_PROFILING:基础分析保存活动锁队列的哈希表。

  • UMTX_PROFILING:基础分析保存活动锁队列的哈希表。

  • WITNESS:启用 witness 代码,用于检测锁操作期间的死锁和循环。

  • WITNESS_KDB:发生锁层次违规或线程在休眠前持锁时,进入内核调试器。

  • WITNESS_SKIPSPIN:禁用对自旋互斥锁的 witness 检查。

LOCK_PROFILING —— 锁分析。详情见 LOCK_PROFILING(9)

MPROF_HASH_SIZE 哈希表大小必须大于缓冲区数量 MPROF_BUFFERS,且应为素数。

callout(9) 后端进行分析。

对内部哈希表进行分析。

针对 epoch(9) 的误用进行调试跟踪。

兼容性

兼容性选项允许内核支持旧版本 FreeBSD 的系统调用和接口,从而运行为旧版本编写的程序。

旧式 TTY 接口。

启用 FreeBSD 4 兼容性系统调用。FreeBSD 4 发布于 2000 年,距今已超过 20 年,实际需要此兼容层的应用程序极为罕见。该选项已从 MINIMAL 等精简内核配置中移除,建议仅在确有旧版二进制程序需求时启用。

注意

在通常情况下,COMPAT_FREEBSD<n> 依赖 COMPAT_FREEBSD<n+1>COMPAT_FREEBSD<n+2> 等。

启用 FreeBSD 5 兼容性系统调用。FreeBSD 5 发布于 2003 年,距今已超过 20 年,实际需求极低。

启用 FreeBSD 6 兼容性系统调用。FreeBSD 6 发布于 2005 年,距今已超过 20 年,实际需求极低。

启用 FreeBSD 7 兼容性系统调用。FreeBSD 7 发布于 2008 年,距今已超过 15 年,实际需求极低。该选项已从 MINIMAL 等精简内核配置中移除。

启用 FreeBSD 8 兼容性系统调用。

启用 FreeBSD 9 兼容性系统调用。

启用 FreeBSD 10 兼容性系统调用。

启用 FreeBSD 11 兼容性系统调用。

启用 FreeBSD 12 兼容性系统调用。

启用 FreeBSD 13 兼容性系统调用。

启用 FreeBSD 14 兼容性系统调用。

启用 Linux 内核编程接口。

  • SYSVSHM:启用 System V 风格的共享内存支持。

  • SYSVSEM:启用 System V 风格的信号量支持。

  • SYSVMSG:启用 System V 风格的消息队列支持。

调试

调试选项用于启用内核中的调试功能,包括内核调试器、调用栈跟踪、锁验证等功能,帮助开发者诊断和修复问题。

编译时包含内核调试器相关代码。

在系统发生 panic 时,在控制台打印当前线程的调用栈跟踪。

在发生 panic 时不进入调试器。适用于无人值守的操作环境,如果需要通过控制台手动进入调试器,但仍希望系统能够在 panic 后自行恢复,可启用此选项。

启用 ddb 调试器后端。

除了符号表示外,还打印符号的数值。

启用远程 gdb 调试器后端。

在列表指针变为无效时(即元素从列表中移除)将其清空。启用成本相对较低。

在列表对象中存储最后一个修改列表对象的调用者的信息。需要额外的内存开销。

SYSCTL_DEBUG 启用后将生成一棵 sysctl 调试树,可用于在控制台上转储已注册的 sysctl 节点内容。

因为它会生成过于冗长的控制台输出,可能干扰串行控制台操作,所以默认禁用。

默认启用 textdump,并禁用内核核心转储。

在执行 textdump 时启用额外的调试信息。

NO_SYSCTL_DESCR 会省略 sysctl 节点描述,以节省生成内核的空间。

MALLOC_DEBUG_MAXZONES 可为小于一页的 malloc(9) 分配启用多个 uma 区域。其目的是将不同的 malloc 类型隔离到哈希类别中,这样所有缓冲区溢出和释放后使用(use-after-free,UAF)问题通常只会影响该哈希类别中的 malloc 类型的内存。这纯粹是一种调试工具;通过改变哈希函数并追踪遭到破坏的哈希类别,各实例哈希类别的交集可指向滥用的单个 malloc 类型。此时可以使用检查或 memguard(9) 以捕获问题代码。

DEBUG_MEMGUARD 构建并启用 memguard(9),这是内核的替代分配器,用于检测释放后使用(use-after-free,UAF)等场景。

DEBUG_REDZONEmalloc(9) 启用缓冲区下溢和缓冲区上溢的检测。

EARLY_PRINTF 可在内核非常早期(在调用 cn_init() 之前)使用一种特殊的 printfeprintf)。这通常仅用于启动早期调试。由于该功能通常不可用,且所需的 eputc() 也未定义,因此一般情况下它未被定义,此处也将其注释掉。

KTRACE 启用系统调用跟踪功能 ktrace(2)。为更好地支持 SMP,KTRACE 使用一个工作线程来异步处理大多数跟踪事件,而非由生成事件的线程直接处理。这需要预先分配一个用于存储跟踪事件对象的池。选项 KTRACE_REQUEST_POOL 指定该池的初始大小。

KTR 是一款从 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 事件输出到控制台。此功能可以通过 sysctl debug.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

  • ALQ(9) 是一款用于将内核记录异步排队到 vnode 的机制。

  • ktr(4) 等服务使用它根据内核事件流生成跟踪文件。记录由工作线程异步写入。

选项 INVARIANTS 在多个源文件中用于启用对内部结构的额外完整性检查。由于检查这些条件会额外消耗时间,且相关问题通常仅由编程错误引起,因此该选项默认禁用。

选项 INVARIANT_SUPPORT 能在编译时加入对部分内部结构的验证支持。由于启用 INVARIANTS 会调用这些验证函数,因此 INVARIANT_SUPPORT 是启用 INVARIANTS 的前提。这样做的目的是允许在启用 INVARIANT_SUPPORT 后为单个源文件设置 INVARIANTS(通过修改源文件或在命令行指定)。如果希望构建带有 INVARIANTS 的内核模块,将 INVARIANT_SUPPORT 添加到内核中可以提供所有必要的基础设施,且不会增加额外开销。

选项 KASSERT_PANIC_OPTIONAL 能在 kasserts 触发时不一定会引起 panic。panic 是默认行为,但运行时选项可以将其完全关闭,或者在设定限制下关闭。

选项 DIAGNOSTIC 用于启用额外的调试信息和完整性检查。由于这些额外检查对 INVARIANTS 内核来说开销过大或过于冗杂,因此默认禁用。通常,配置了 DIAGNOSTIC 的内核也会启用 INVARIANTS 选项。

REGRESSION 将启用仅在回归测试中需要的可选内核接口。启用这些接口可能构成安全风险,因为它们允许进程轻易修改运行时环境的某些方面,会重现不太可能或异常(可能通常不可能出现)的场景。

此选项能让某些在运行系统中无法共存的驱动程序共存。它用于能够一次性编译所有内核代码以进行质量保证(例如本文件,其名称即来源于该选项)。

STACK 将启用 stack(9) 功能,可捕获内核栈。如果内核编译中包含 DDB(4),则 stack(9) 也会自动编译进内核。

选项 NUM_CORE_FILES 指定了特定进程生成核心文件的数量上限。核心文件格式说明符包含 %I 模式时,此选项生效。由于格式字符串中核心计数只有 1 个字符,可表示的范围为 0-9,因此该选项允许的最大值为 10(即指定该参数为 9)。可在运行时通过 sysctl debug.ncores 调整该核心文件数量限制。

TSLOG 选项可启用事件的时间戳记录,特别是函数的进/出,以便跟踪内核消耗的时间。由于此时还无法使用 DTrace 等更高级的工具,该选项尤其在早期启动过程中非常有用。

  • TSLOGSIZE 选项控制用于存储这些事件的(预分配、固定长度)缓冲区大小(默认:262144 条记录)。

  • TSLOG_PAGEZERO 选项可启用对 pmap_zero_page 的 TSLOG;由于它通常会生成过多记录而不太实用,因此必须单独启用。

出于安全考虑,TSLOG 不应在用于生产的系统上启用。

性能监控

性能监控选项提供了测量和分析系统性能的能力,特别是利用 CPU 内置的性能监控计数器。

驱动程序 hwpmc 可使用 CPU 内置的性能监控计数器监控性能。基础内核需要通过 options 条目配置,可将 hwpmc 设备编译进内核或作为可加载内核模块以加载。

在特定架构上可能需要额外的配置选项,请参见:hwpmc(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=hwpmc&sektion=4

网络接口

网络接口是 FreeBSD 内核中负责处理网络通信的关键部分,包括协议栈、网络设备驱动等。

协议栈

网络协议栈负责处理网络数据的传输和接收,包括 TCP/IP、UDP 等协议。

注意

如果使用了选项 INETINET6 或同时指定了两者:必须至少指定一个拥塞控制选项,否则将导致编译失败。GENERIC 定义了 CC_CUBIC。如果编译了多款拥塞控制,可能需要指定一个默认值。

default 中的字符串是 cc 模块的名称,在 sysctl 中用于设置默认值。代码将 CUBIC 定义为默认值,或者如果只编译了一个 cc_module,则使用该模块。

IPsec(IP 安全)。要启用 IPSEC必须 在内核配置中同时指定设备加密支持。

IPSEC_SUPPORT 选项并不会直接启用 IPsec,但它能将 IPsec 作为内核模块加载。仍然 必须 在内核配置中添加设备加密支持。

可选的 TCP 栈。

TLS 用于通过 TCP 套接字对数据进行帧封装以及加/解密。

Netlink 是一种内核与用户空间之间的消息传递接口。

SMB/CIFS 请求器。NETSMB 启用了对 SMB 协议的支持,它需要选项 LIBMCHAINLIBICONV

mchain 库。它可以作为 KLD(可加载内核模块)加载,也可以编译进内核。

libalias 库,用于执行 NAT(网络地址转换)。

SCTP 是一种传输层协议,最初由 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 是双栈协议,因为一个关联(association)可以同时跨越 IPv6 和 IPv4 地址,目前尚未拆分 IPv6 和 IPv4。

选项 SCTP_SUPPORT 并不会直接启用 SCTP,而是提供将 SCTP 作为可加载内核模块加载所需的支持。

以下是 SCTP 调试选项:

SCTP_DEBUG 可开启各种详细打印功能。它由一个位掩码控制(可通过 socket 选项和 sysctl 设置)。包含该选项本身不会立即产生日志,必须先设置相应的位。但打印信息可能非常冗长。因此,如果没有启用该选项,代码就不会做位检测和打印,这样可提高运行速度。如果并非调试用途,请勿使用。

上面的所有选项用于开启特定类型的日志记录。可以监控拥塞窗口(CWND)增长、飞行数据量(flight size)以及各种其他指标。可查看代码了解更多细节。

使用这些功能需启用 ktr(4),随后通过 sysctl 设置打开或关闭各种日志位。使用 ktrdump(8) 提取日志,再通过显示程序处理,就能生成图表等可视化内容。

OpenFabrics 企业版发行版(OFED,InfiniBand)。

套接字直接协议(SDP)。

IP over InfiniBand (IPoIB),基于 InfiniBand 的互联网协议,参见:wiki/InfiniBand[EB/OL]. [2026-03-26]. https://wiki.freebsd.org/InfiniBand

altq(9)。通过选项 ALTQ 启用钩子的基础部分。各个调度策略必须编译进基本系统,不能在此阶段作为模块加载。ALTQ 需要稳定的 TSC,如果 TSC 不稳定或在 CPU 节流时发生变化,则必须同时启用选项 ALTQ_NOPCC

  • ①:netgraph(4) 系统,是一款网络工具包。使用选项 NETGRAPH 启用 netgraph 核心代码。

可通过下列对应的选项启用各个节点类型;不过这并非严格必要,因为如果节点类型尚未编译进内核,netgraph 会自动加载对应的 KLD 模块。下面的每种类型都有对应的手册页,例如 ng_async(4)

netgraph 节点类型:

vimage(9)(即 VNET(9) 的别名),用于网络栈虚拟化。

网络接口

网络接口设备提供了系统与网络物理连接的能力。

启用网络功能时,loop(4) 设备是 必需的

ether 设备提供了用于处理以太网的通用代码;需要配置以太网设备驱动时,它是 必需的

vlan(4) 设备可根据 IEEE 802.1Q 实现以太网帧的 VLAN 标记。

vxlan(4) 设备将根据 RFC7348 实现以太网帧在 UDP 数据包中的 VXLAN 封装。

wlan(4) 设备提供了支持 802.11 驱动的通用代码,包括主机 AP 模式;wi 和 ath 驱动需要 wlan,并且最终将成为所有 802.11 驱动的必需项。

可选设备,依赖 802.11 wlan 模块。

wlan_xauth 设备提供了对外部(即用户态)认证器的支持,用于依赖 wlan 模块并支持 802.1x 和/或 WPA 安全协议的 802.11 驱动。

  • wlan_acl 设备提供了基于 MAC 的访问控制机制,用于在 AP 模式下运行并使用 wlan 模块的 802.11 驱动。

  • wlan_amrr 设备提供了 AMRR 传输速率控制算法。

bpf 设备将启用伯克利数据包过滤器(Berkeley Packet Filter)。启用此选项时需注意相关的安全和管理影响。

DHCP 依赖该选项。

netmap 设备可实现从用户态对网络设备的内存映射访问,即使在 10 Gbit/s 速率下,也能实现线速的数据包捕获和生成。需要设备驱动支持。支持的驱动有 ixgbe、ixl、iflib(提供 igb 和 em)、re、vtnet、cxgbe。

disc 设备实现了一个最简网络接口,会丢弃所有发送的数据包,且永远不会接收任何数据包,用于测试和性能基准评估。

epair 设备实现了一对虚拟的背靠背连接的以太网接口。

edsc 设备实现了一个最简以太网接口,会丢弃所有发送的数据包,且不接收任何数据包。

tuntap 设备实现了用户态的 PPP、nos-tun(8) 以及类似 pty 的虚拟以太网接口。

  • gif 设备实现了 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 接口上配置相同的地址对

stf 设备实现了 6to4 封装。

PF 数据包过滤器由三款设备组成:

  • pf 设备提供了 /dev/pf 以及防火墙代码本身。

  • pflog 设备提供了 pflog0 接口,用于记录数据包。

  • pfsync 设备提供了 pfsync0 接口,用于防火墙状态表的同步(通过网络)。

桥接网络接口。

通用地址冗余协议(CARP)。更多详情参见:carp(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=carp&sektion=4

IPsec 接口。

LAGG 链路聚合接口。

WireGuard 接口。

dummymbuf 是用于 mbuf 修改的 pfil 钩子。

互联网协议簇

互联网协议簇提供了网络通信的基础协议支持。

  • ①: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 修改。

MBUF_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 的数量)。

这些选项用于启用静态链接的接收过滤器(accept filters)。

TCP_SIGNATURE 为 RFC 2385(TCP-MD5)摘要提供了支持。这些摘要通过 TCP 选项 19 携带。该选项通常用于保护 TCP 会话(例如 BGP),适用于无法或不希望使用 IPsec 的情况。

此功能可以按套接字启用,通过 TCP_MD5SIG 套接字选项实现。

启用此功能需要使用 device crypto,并且需要启用 options IPSECoptions IPSEC_SUPPORT

DUMMYNET 将启用带宽限制器“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,以确保响应足够及时。

DEBUGNET 选项将启用基础调试/内核 panic 时的网络 API。NETDUMP 和 NETGDB 需要使用 DEBUGNET

NETDUMP 选项将在内核中启用对 netdump(4) 客户端支持。它可在内核 panic 时将内核转储发送到远程主机。

NETGDB 选项在内核中启用对 netgdb(4) 的支持。它能通过网络将 panic 的内核作为 GDB 远程调试目标。

文件系统

只有根文件系统需要静态编译或预先加载为模块;其他文件系统可在挂载时自动加载。不过,部分用户也倾向于静态编译其他文件系统。

注意

UNION 文件系统曾存在缺陷,现已得到积极维护,尽管仍有一些问题需要解决。

以上选项中至少需要选择一项。

以上选项,均为可选。

将 NFS 用作根文件系统(root device)的支持。

软更新(Soft Updates)可提高文件系统性能,降低因突然关机导致数据不一致的风险。

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

对 UFS 文件系统的访问控制列表(ACL)的支持。当前的 ACL 实现依赖底层文件系统的扩展属性支持(UFS_EXTATTR)。更多信息请参见 src/sys/ufs/ufs/README.acls

UFS 目录哈希(Directory Hashing)可通过消耗内存以提高对非常大目录的操作速度。

基于 gjournal(8) 的 UFS 日志支持。

在内核中为基于 md 设备的根文件系统预留空间。此处定义的是为文件系统预留的千字节(KB)数。

该定义现为可选项。

  • 如果没有定义,通过 MFS_IMAGE 编译选项传入的根文件系统将在链接阶段自动嵌入内核,其实际大小将完全占用内核空间。

  • 如果已定义,则会采用旧版内核嵌入文件系统的方式:即先在内核中分配 MD_ROOT_SIZE 千字节(KB)的固定空间,后续如果通过 MFS_IMAGE 编译选项传入的文件系统镜像尺寸匹配,将通过 dd 命令将其写入预留区域。

将 md 设备配置为潜在根设备,支持预加载的 mfs_root 和 md_root 类型镜像。

对该 md 根设备启用写保护,以防其以可写方式挂载。

允许从外部内存区域读取 md 镜像。

启用此选项即可支持磁盘配额功能。

如果设备仅作为面向 PC 和 MAC 用户的文件服务器(使用 Samba 服务),建议启用此选项,并在支持挂载选项 suiddir 的文件系统上设置用户目录。该设置会使新建文件自动继承目录的属主权限(类似于群组权限)。

注意

如果允许这些用户执行程序,将存在安全风险,因此请仅限在纯文件服务器环境中使用(此举可有效避免诸多管理难题)。root 用户拥有的目录不受此限制,且执行权限位将自动清除。

注意

必须同时为目录设置权限位 suid(详见 chmod(1) 手册)。由于 PC 用户无法查看/设置文件属主,常导致权限冲突。在启用此功能后,相关文件系统会符合用户直觉:“既然是我的目录,那么创建的文件自然归我所有”,从而显著减少技术支持需求。

若干 NFS 选项。

提供对 Linux 文件系统 EXT2 的支持。

使用此功能需格外谨慎,ext2 的代码往往滞后于内核更新且缺乏充分测试,因此以读写模式挂载可能存在风险(即使以只读模式挂载也可能导致系统崩溃)。

系统内存设备:/dev/mem/dev/kmem

内核符号表设备:/dev/ksyms

可选的字符编码转换支持,需配合 LIBICONV 实现。每个选项都需要其基础文件系统及 LIBICONV 库的支持。

POSIX P1003.1B

POSIX P1003.1B 是 POSIX 标准的实时扩展,提供了优先级调度、信号量、消息队列等功能。

1993 年 POSIX 标准新增的实时扩展 _KPOSIX_PRIORITY_SCHEDULING 提供了对 _POSIX_PRIORITY_SCHEDULING 的支持。

p1003_1b_semaphores 功能仍处于高度实验阶段,如果出现问题,用户需协助参与调试工作。

POSIX 消息队列。

安全策略参数

安全策略参数提供了系统安全相关的内核配置,包括审计、强制访问控制等功能。

BSM 审计。

强制访问控制(MAC)。

Capsicum 技术。

时钟

时钟选项用于配置内核的时钟频率和时间同步相关功能。

操作粒度由内核选项 HZ 控制(默认频率为 1000 Hz,即调度间隔周期为 1 毫秒)。

虚拟机客户系统通常采用数值 100。较低的数值可能会以调度精度为代价降低系统开销,但自适应定时器代码能减少这种开销。

启用内核 PLL 以使用外部 PPS 信号的功能,该功能在 [x]ntpd(8) 的监管下运行。更多信息请参阅 ntpd 文档:https://www.ntp.org

启用内核中对通用前馈时钟的支持。前馈时钟支持是面向反馈的 ntpd/系统时钟方法的替代方案,需与前馈同步算法(例如 RADclock)配合使用。更多信息请参阅:https://www.synclab.org/radclock

SCSI 设备

SCSI(Small Computer System Interface)是一种用于连接计算机和外部设备的标准接口。

SCSI 设备配置。

SCSI 子系统由 SCSI 核心代码、多个高层 SCSI 设备“类型”驱动程序,以及底层主机适配器设备驱动程序组成。主机适配器列表请参阅下文中的 ISA 和 PCI 设备配置章节。

系统可固定 SCSI 设备配置,确保特定总线、目标和 LUN 始终对应同一设备单元。在早期版本中,设备单元号按照 SCSI 总线上探测到的顺序分配。这意味着如果移除某磁盘驱动器,可能需要重写文件 /etc/fstab;同时在新增磁盘时也需谨慎,因为新设备可能会被提前探测,从而改变原有设备的配置。

系统默认保持此传统行为。设备单元分配将从该设备类型首个非固定单元开始。例如,如果将某磁盘固定为 da3,则首个非固定磁盘将被分配为 da4

设备固定配置的语法如上所述。

未明确指定“单元”(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。

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

CAM 调试相关

以下是与 CAM 调试相关的内核配置选项。

启用并编译所有调试功能。

指定要编译进内核的调试等级。

指定在系统启动时启用的调试等级。

将调试限制在指定的总线(bus)上。

将调试限制在指定的目标(target)上。

将调试限制在指定的 LUN 上。

在打印每一行调试信息后延迟的时间(微秒)。

并发执行的高功率(START UNIT)命令的最大数量。

定义该选项后将禁用 sense 描述字符串。

定义该选项后将禁用 opcode 描述字符串。

SCSI_DELAY: 在总线重置后冻结 SIM(SCSI 适配器)队列的毫秒数,以及在总线设备重置后冻结设备队列的毫秒数。可通过可调参数 sysctl kern.cam.scsi_delay 在启动时和运行时更改该值。

根据提示和存储设备的当前性能,在 I/O 调度程序中启用动态决策功能。

通过 sysctl 显示额外的 CAM 设备统计数据。

启用模拟 I/O 故障的功能。

CAM CD-ROM 只读直接访问(“光盘”)设备

以下是与 CD-ROM 设备相关的内核配置选项。

为 changer LUN 保证的最小服务时间片。

该变量编译默认值为 2 秒。可通过 sysctl kern.cam.cd.changer.min_busy_seconds 调整。

每个 changer LUN 的最大时间片,仅在有 I/O 等待其他 LUN 时生效。

该变量编译默认值为 10 秒。可通过 sysctl kern.cam.cd.changer.max_busy_seconds 调整。

CAM 顺序访问(“磁带”)设备驱动

以下是与磁带设备相关的内核配置选项。

读/写/WFM 操作的超时时间,单位为分钟。

空间操作的超时时间,单位为分钟。

回带操作的超时时间,单位为分钟。

擦除操作的超时时间,单位为分钟。

默认用于仅在磁带末端(EOT)存在单个文件标记的设备型号。

CAM 处理器目标(PT)设备

以下是与处理器目标设备相关的内核配置选项。

CAM 处理器目标(pt)设备的超时时间(可选),单位为秒。默认值为 60 秒。

在其他设备(例如磁盘)上进行 SES 直通访问

以下是与 SES 直通访问相关的内核配置选项。

由于许多新型 SCSI 磁盘会报告自身具备 SES(SCSI Enclosure Services)功能,可能在构建拓扑时与磁盘所在机箱的 SES 设备产生冲突,因此该功能通常默认禁用。

iSCSI

iSCSI 是一种通过网络连接访问 SCSI 设备的协议。

iSCSI 可通过网络连接(例如 TCP/IP 套接字)访问 SCSI 外设。

杂项设备和选项

以下是其他各类杂项设备和内核配置选项。

兼容 BSD 风格的伪终端(pty)。

背靠背(back-to-back)tty 设备。

基于内存(通过 malloc 分配)的磁盘设备。

Snoop 设备,用于监控 pty、vty 等终端设备。

级联磁盘(Concatenated Disk)驱动程序。该驱动功能已被 GEOM 框架下的 gconcat(8)(磁盘串联)、gstripe(8)(磁盘条带化)、gmirror(8)(磁盘镜像)和 graid(8)(软件 RAID)所取代,建议新部署使用对应的 GEOM 模块。

firmware(9) 支持,firmware 镜像的加载与管理。

内核端 iconv 库,参见:iconv(3)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=iconv&sektion=3

内核消息缓冲区的大小。应为 N × pagesize(内存页大小)

硬件总线配置

硬件总线配置用于设置系统与硬件设备之间的通信接口。

PCI 总线及其相关选项。

硬件设备配置

对于 ISA 总线,所需的提示已列出。PCI、CardBus 和 SD/MMC 是自识别总线,因此不需要提示。

必需设备

以下是系统运行所需的基本设备配置选项。

这些选项同样适用于其他键盘驱动程序。

定义键盘延迟参数(对于响应迅速的交互式控制台,可尝试 20015)。

帧缓冲调试。

启用 syscons 终端仿真器(teken)的实验性功能支持。

vt 视频控制台驱动程序。

以上选项用于设置最大帧缓冲区大小。

以上选项用于自定义默认 vt 终端的颜色。

可选设备

以下是各类可选的硬件设备驱动程序配置选项。

SCSI 主机适配器

PMC 的 Adaptec RAID 控制器,支持第 6、7、8 系列及后续型号。该驱动使用 CAM 容器接口。

Adaptec 274x、284x、2910、293x、294x、394x、3950x、3960x、398x、4944、19160x、29160x 以及 aic7770/aic78xx 系列。

Adaptec 29320/39320 控制器

  • 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 光纤通道主机适配器

isp 相关的 hint 参数说明。

isp 相关 hint。

由于无法获取 u_int64_t 类型的值,也无法解析以 0x 开头的字符串,因此采用了该变通方法。

Qlogic 主机适配器的固件模块。

Broadcom MPIMR 3.0 IT/IR 24Gb/s SAS Tri-Mode RAID 控制器(仅适用于 aarch64 和 amd64)。

第 3 代 LSI-Logic MPT/Fusion(仅适用于 aarch64 和 amd64)。

第 2 代 LSI-Logic MPT/Fusion(仅适用于 aarch64 和 amd64)。

LSI-Logic MPT/Fusion 53c1020、53c1030 Ultra4、FC9x9 光纤通道主机适配器。

Symbios/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

只有在设置了此选项时,aic7xxx 驱动程序才会尝试对所有配置了内存映射 I/O 的 PCI 控制器使用内存映射 I/O。但此方式在某些主板上无法正常工作,因此不能作为默认设置。

转储 ahc 控制器配置 PROM 的内容。

启用 ahc(4) 的 target mode 操作单元位图。

编译 Aic7xxx 调试代码。

Aic7xxx 驱动调试选项。参见:sys/dev/aic7xxx/aic7xxx.h[EB/OL]. [2026-03-26]. https://github.com/freebsd/freebsd-src/blob/main/sys/dev/aic7xxx/aic7xxx.h

在调试输出中打印寄存器位字段。会使驱动增加约 128 KB 的大小。参见:ahc(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ahc&sektion=4

编译 aic79xx 调试代码。

Aic79xx 驱动调试选项。会使驱动增加约 215 KB。参见:ahd(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?query=ahd&sektion=4

在调试时打印可读的寄存器定义。

启用 ahd(4) 的 target mode 操作单元位图。

dev/isp/(Qlogic SCSI/FC 驱动)相关

以下是与 Qlogic ISP 驱动相关的内核配置选项。

ISP_TARGET_MODE 可启用 isp(4) target mode 操作。

ISP_DEFAULT_ROLES:默认角色。

  • none = 0

  • target = 1

  • initiator = 2

  • both = 3(当前不支持)

注意

此项在原文中即如此,不确定是否为 options 选项。请读者自行核实。

对 825A、875、885 的 HVD 支持。

禁用:0(默认);启用:1。

PCI 奇偶校验检查。

禁用:0;启用:1(默认)。

支持的 LUN 数量。

默认:8,范围:1-64。

Compaq“CISS”RAID 控制器(Smart Array 5*/6* 系列)。

这些控制器提供类 SCSI 接口,并依赖 CAM 基础架构。

Compaq Smart RAID、Mylex DAC960 和 AMI MegaRAID 控制器。

仅需添加相关条目;代码可自动发现并配置其支持的所有控制器。

NVMe

NVMe 是一种专为闪存存储设计的接口协议。

串行 ATA(SATA)主机控制器

SATA 是一种用于连接存储设备的接口标准。

兼容高级主机控制器接口(AHCI)。

Marvell 88SX50XX/88SX60XX/88SX70XX/SoC SATA 控制器。

SiliconImage SiI3124/SiI3132/SiI3531 SATA 控制器。

ATA/SATA 直接访问设备(即磁盘)。

以上驱动均为 cam(4) 子系统的一部分。

它们取代了功能较少的 ata(4) 子系统驱动,并支持相同的硬件。


ATA 驱动支持所有传统的 ATA/ATAPI 控制器,包括 PC 卡设备。

在现代主机上,只需添加 device ata 这行,即可让系统发现所有 PCI 和 PC 卡 ATA/ATAPI 设备。

还可通过 atacore 驱动,此后再按厂商判断各个总线和芯片组驱动以选择单独的驱动。例如,要构建一个仅支持 VIA 芯片组的系统,可以省略 ata 这行,仅包含驱动 atacoreatapciatavia

模块化 ATA 驱动。

PCI ATA 芯片组。

对于较旧的非 PCI、非 PnP BIOS 系统,需要添加这些 hint 行。

串行接口(uart)

串行接口提供了系统与外部设备之间的串行通信能力。

uart(4) 串行接口通用驱动程序。

uart(4) 驱动选项。

该 hint 仅应对纯 ISA 设备使用,其他情况下不需要,且极不建议使用。

以上三个 hint:UART 是系统设备(例如控制台或调试端口),且仅在平台上没有其他方式将信息传递给内核时使用。hint 的单元号(即 0)仅用于将 hint 组合在一起,与探测到的 UART 的单元号无关。

flags 用于支持控制台的串行驱动,例如 uart(4)

  • 0x10:为该单元启用控制台支持。其他控制台标志(如适用)在未设置此标志时会被忽略。启用控制台支持并不意味着该单元是首选控制台。可以通过启动时使用 -h,或在 loader 中设置 boot_serial=YES 以启用。当前最多仅一个单元可以启用控制台支持;配置文件中第一个设置了该标志的单元为首选。

  • 0x80:在 ddb 中将该端口用于串行线路 gdb 支持,也称为调试端口。

串行驱动支持控制台的选项:

BREAK_TO_DEBUGGER:控制台上的 BREAK/DBG 会进入 ddb(如果可用)

Solaris 实现了一种新的 BREAK,由字符序列 CR ~ ^b(先按 回车键,随后按 ~,再按快捷键 Ctrl + B。以下类似)触发,类似于 Sun 服务器上远程控制台使用的常见模式。

FreeBSD 增补了此功能:CR ~ ^p 会触发强制 panic,CR ~ ^r 会触发干净重启。

串行通信控制器。

支持 Freescale/NXP Quad Integrated 以及 Zilog Z8530 多通道通信控制器。

PCI 通用通信驱动。

支持各种多端口 PCI I/O 卡。

网络接口

以下是各类网络接口设备驱动程序配置选项。

MII 总线

MII 总线是许多 PCI 以太网卡所必需的,尤其是那些使用 MII 兼容收发器或实现类似 MII 的收发器控制接口的网卡。

在内核配置中添加 device miibus 可引入对通用 miibus API 的支持、对 MII 的 bit-bang 通用支持以及所有 PHY 驱动,包括为未被单独驱动专门处理的 PHY 提供的通用驱动。

如果网卡驱动需要特定 PHY 的支持,可以通过添加 device miidevice mii_bitbang,随后再添加相应的 PHY 驱动以实现。

该驱动基于通用 MII 总线控制器代码。bnxt 支持 Broadcom NetXtreme-C 和 NetXtreme-E PCIe 10/25/50G 以太网适配器。

基于通用 MII 总线控制器代码的 PCI 以太网卡

提示

bxe Broadcom NetXtreme II (BCM5771X/BCM578XX) PCIe 10Gb 以太网适配器。条目位于 sys/x86/conf/NOTES。该 PCI 以太网卡基于通用 MII 总线控制器代码。

支持基于 Attansic/Atheros L2 PCI-Express FastEthernet 控制器的 10/100Mbps 快速以太网适配器。

支持基于 Attansic/Atheros L1 PCIe 千兆以太网控制器的千兆以太网适配器。

支持 Atheros AR8131/AR8132 PCIe 以太网控制器。

支持 Atheros AR8121/AR8113/AR8114 PCIe 以太网控制器。

注意

ath Atheros a/b/g 无线网卡(需要 ath_halwlan)。此条目在其他位置。

Broadcom NetXtreme II(BCM5706/BCM5708)PCI/PCIe 千兆以太网适配器。

Broadcom BCM4401 以太网适配器。

支持基于 Broadcom BCM570x 系列控制器的千兆以太网适配器,包括 3Com 3c996-T、Netgear GA302T、SysKonnect SK-9D21 和 SK-9D41,以及 Dell PowerEdge 2550 服务器上的嵌入式千兆网卡。

Sun Cassini/Cassini+ 和 National Semiconductor DP83065 Saturn。

支持基于 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 等。

Intel EtherExpress Pro/100B(可以通过 prefer_iomap 环境变量选择 I/O 访问而非内存映射)。

Apple GMAC/Sun ERI/Sun GEM.

JMicron JMC260 快速以太网/JMC250 千兆以太网适配器。

支持基于 Level 1 LXT1001 NetCellerator 芯片的 PCI 千兆以太网适配器,包括 D-Link DGE-500SX、SMC TigerCard 1000 (SMC9462SX) 及部分 Addtron 网卡。

lio:支持 Marvell 23XX 系列以太网适配器。

mlxfw:Mellanox 固件更新模块。

Mellanox ConnectX-4 和 ConnectX-4 LX IB 与以太网共享代码模块。

Mellanox ConnectX-4 和 ConnectX-4 LX PCIe 以太网适配器。

msk: 支持基于 Marvell/SysKonnect Yukon II 千兆控制器的 PCI 千兆以太网适配器,包括 88E8021、88E8022、88E8061、88E8062、88E8035、88E8036、88E8038、88E8050、88E8052、88E8053、88E8055、88E8056 以及 D-Link 560T/550SX。

Myson 快速以太网(MTD80X、MTD89X)。

支持基于 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。

Realtek 8139C+/8169/8169S/8110S/8101E PCI/PCIe 以太网适配器。

支持基于 Realtek 8129/8139 芯片的 PCI 快速以太网适配器。由于内存映射模式在 SMP 硬件上可能导致严重锁死,因此该驱动默认使用编程 I/O 访问寄存器。该驱动还支持 Accton EN1207D“Cheetah”网卡,使用 MPX 5030/5038 芯片(Realtek 或其仿制品)。D-Link DFE-530TX+ 使用 Realtek 芯片,应使用此驱动,而非 vr 驱动。

Silicon Integrated Systems SiS190/191 快速/千兆以太网适配器。

支持基于 Silicon Integrated Systems SiS 900/SiS 7016 及 NS DP83815 PCI 快速以太网控制器芯片的网卡。

支持 SysKonnect SK-984x 系列 PCI 千兆以太网适配器,包括 SK-9841/9842 单端口(单模/多模光纤)及 SK-9843/9844 双端口(单模/多模)。驱动会自动检测网卡端口数量并将每个端口作为独立网络接口。

Sundance ST201 PCI 快速以太网控制器,包括 D-Link DFE-550TX。

支持基于 Sundance/Tamarack TC9021 系列控制器的千兆以太网适配器,包括 Sundance ST2021/ST2023、Sundance/Tamarack TC9021、D-Link DL-4000 和 ASUS NX1101。

支持基于 VIA VT3043“Rhine I”和 VT86C100A“Rhine II”芯片的多种快速以太网适配器。包括 D-Link DFE520TX、DFE530TX(DFE530TX+ 使用 rl 驱动)、Hawking PN102TX 和 AOpen/Acer ALN-320。

DM&P Vortex86 RDC R6040 快速以太网。

支持 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。

使用 iflib 框架的 PCI/PCI-X/PCIe 以太网卡

iflib 网络接口驱动框架。

Intel PRO/1000 千兆以太网 82542/82543/82544 系列适配器。

此网卡基于通用 MII 总线控制器代码。

PCI 以太网卡(Ethernet)

基于 Chelsio T3 芯片的 1 GbE / 10 GbE PCIe 以太网适配器。

此网卡基于通用 MII 总线控制器代码。

Chelsio T4 / T5 / T6 系列 1 / 10 / 25 / 40 / 100 GbE PCIe 以太网适配器。

此网卡基于通用 MII 总线控制器代码。

基于 Chelsio T4、T5 和 T6 的 PCIe 虚拟功能(Virtual Function)。

此网卡基于通用 MII 总线控制器代码。

AMD Am7900 LANCE 和 Am79C9xx PCnet 网卡。

此网卡基于通用 MII 总线控制器代码。

Myricom Myri-10G 10 GbE 以太网卡。

Emulex 10 GbE 适配器(OneConnect Ethernet)。

此网卡基于通用 MII 总线控制器代码。

支持基于 Alteon Tigon I / II 芯片的 PCI 千兆以太网适配器,包括 Alteon AceNIC、3Com 3C985、Netgear GA620 等。使用此驱动时建议大幅增加 kern.ipc.nmbclusters 的值。

此网卡基于通用 MII 总线控制器代码。

PCI IEEE 802.11 无线网卡(Wi-Fi)

Atheros 系列无线网卡。

所有 AR5212 芯片在与 AR71xx CPU 配合使用时都会出现问题。这些型号存在一个仅会在 AR71xx 上触发致命总线错误的漏洞。

漏洞的具体细节尚不明确,但可在 OpenWrt 论坛相关讨论帖 的第 4、5 和 6 页中找到部分信息。

启用此选项可以应用该解决方法。该解决方法会带来性能损失,但如果不启用,设备将完全无法工作。通常该网卡的 DMA 传输以 128 字节为突发长度,但在受影响的 CPU 上,仅 4 字节的突发长度是安全的。

Atheros 相关无线网卡。

Broadcom BCM430*BCM431* 系列无线网卡。

此网卡基于通用 MII 总线控制器代码。

Broadcom BCM43xx 系列无线网卡。

此网卡基于通用 MII 总线控制器代码。

此网卡基于通用 MII 总线控制器代码。

此网卡基于通用 MII 总线控制器代码。mwl 驱动依赖固件 mwlfw

Ralink Technology IEEE 802.11 无线适配器。

此网卡基于通用 MII 总线控制器代码。

此网卡基于通用 MII 总线控制器代码。

ti(4) 控制器上使用 sf_buf(9) 接口处理 jumbo 缓冲区。

ti(4) 驱动固件启用头部拆分(header splitting)选项。此功能仅适用于 Tigon II 芯片,对 Tigon I 芯片无效。该选项需要依赖上面的选项 TI_SF_BUF_JUMBO

这两个选项分别用于调整 mbuf 集群大小和 mbuf 大小。由于更改默认值可能导致内核假定的 mbuf 大小与模块假定的 mbuf 大小不匹配,因此在将它们的默认值更改为其他值时,必须格外谨慎处理网卡驱动模块。目前,唯一能够检测这种不匹配的驱动是 ti(4)

音频设备

通用音频驱动。

snd_*:设备专用驱动

Avance Logic ALS4000 PCI.

ATI IXP 200/300/400 PCI.

CMedia CMI8338/CMI8738 PCI.

Crystal Semiconductor CS4281 PCI.

Crystal Semiconductor CS461x/428x PCI(不含 4281)。

Creative EMU10K1 PCI 和 EMU10K2(Audigy)PCI。

Creative SoundBlaster Live! 和 Audigy。

VIA Envy24 及兼容设备,依赖 snd_spicds

VIA Envy24HT 及兼容设备,依赖 snd_spicds

Ensoniq AudioPCI ES137x PCI.

Forte Media FM801 PCI.

Intel 高保真音频(控制器)及兼容设备。

RME HDSP 9632 和 HDSP 9652。

RME HDSPe AIO 和 RayDAT。

Intel ICH AC’97 以及更多集成在芯片组中的音频控制器,例如 NVIDIA nForce 控制器。

ESS Technology Maestro-3/Allegro PCI.

Neomagic 256 AV/ZX PCI.

ESS Solo-1x PCI.

SPI 编解码器驱动,Envy24/Envy24HT 驱动所需。

Trident 4DWave DX/NX PCI、SiS 7018 PCI 和 Acer Labs M5451 PCI。

USB 音频。

VIA VT8233x PCI.

VIA VT82C686A PCI.

S3 Sonicvibes PCI.