24.3 机器无关的内核选项

原文:freebsd-src/main/sys/conf/NOTES,版本 random: allow disabling of entropy harvesting from keyboard & mice

技巧

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

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

envvar hint. 开头的行应放入你的 hints 文件中。参见 /boot/device.hintsconfig(8) 中的 hints 指令。

如果你想进行内核测试构建,请使用 make LINT 创建旧式 LINT 文件。

此文件是机器无关的内核配置说明。机器相关的说明,请参见 /sys/架构/conf/NOTES

技巧

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)。每个资源限制都有两个值:“软限制(soft limit)”和“硬限制(hard limit)”。

可以在系统正常运行时修改软限制,而硬限制只能在启动时设定。它们的默认值定义在 sys/架构/include/vmparam.h 中。有两种方式可以修改上述限制:

  1. 在内核编译时设置值。下面的选项是一种将该限制提高到 1GB 的方法。通过修改相关参数,还可以进一步提高这些值。

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

/boot/loader.conf 中的设置会覆盖内核配置文件中的任何值。有关更多细节,请参见 sys/kern/subr_param.c 中的函数 init_param1

options 	BLKDEV_IOSIZE=8192

BLKDEV_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)时来覆盖选项。

调度器

options 	SCHED_4BSD # 历史悠久、久经考验的 BSD 调度器
options 	SCHED_STATS # 统计信息
#options 	SCHED_ULE # 默认的 ULE 调度器

SCHED_4BSDSCHED_ULE 必选其一。这些选项用于选择要编译进内核的调度器。

说明:

  • SCHED_4BSD 使用全局运行队列且没有 CPU 亲和性,这在 SMP 系统中表现不佳。但它具有非常好的交互性和优先级选择能力。

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

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

SMP

options 	SMP			# Symmetric MultiProcessor Kernel,SMP,对称多处理器

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

options 	EARLY_AP_STARTUP

EARLY_AP_STARTUP 可在内核启动过程中更早地释放应用处理器(在设备探测之前),而不是在启动尽头。这个选项是从晚期到早期 AP 启动过渡期间的临时选项。

options 	MAXCPU=32

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

options 	NUMA

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

options 	MAXMEMDOM=2

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

options 	NO_ADAPTIVE_MUTEXES

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

options 	NO_ADAPTIVE_RWLOCKS

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

options 	NO_ADAPTIVE_SX

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

options 	MUTEX_NOINLINE

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

注意

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

options 	RWLOCK_NOINLINE

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

注意

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

options 	SX_NOINLINE

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

注意

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

SMP 调试选项

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

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

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

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

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

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

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

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

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

options 	LOCK_PROFILING

LOCK_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) 的误用进行调试跟踪。

兼容性

options 	COMPAT_43TTY

旧款 TTY 接口

options 	COMPAT_FREEBSD4

启用 FreeBSD4 兼容性系统调用。

注意

在通常情况下,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 	SYSVMSG
  • SYSVSHM:启用 System V 风格的共享内存支持。

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

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

调试

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_DEBUG

SYSCTL_DEBUG 启用将启用一 sysctl 调试树,可用于在控制台上转储已注册 sysctl 节点的内容。因为它会生成过于冗长的控制台输出,可能干扰串行控制台操作,所以默认情况下禁用。

options 	TEXTDUMP_PREFERRED

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

options 	TEXTDUMP_VERBOSE

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

options 	NO_SYSCTL_DESCR

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

options 	MALLOC_DEBUG_MAXZONES=8

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

options 	DEBUG_MEMGUARD

DEBUG_MEMGUARD 构建并启用 memguard(9),这是内核的替代分配器,用于检测释放后修改(modify-after-free)场景。有关使用的更多信息,请参见 memguard(9) 手册页。

options 	DEBUG_REDZONE

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

#options 	EARLY_PRINTF

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

options 	KTRACE			# 内核跟踪
options 	KTRACE_REQUEST_POOL=101

KTRACE 启用系统调用跟踪功能 ktrace(2)。为了更好地支持 SMP,KTRACE 使用一个工作线程来异步处理大多数跟踪事件,而不是由生成事件的线程直接处理。这需要预先分配一个用于存储跟踪事件对象的池。选项KTRACE_REQUEST_POOL 指定该池的初始大小。可以在启动时/运行时通过可调参数和 sysctl kern.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_VERBOSE

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 传入的字符串布局必须匹配一系列位掩码,每个掩码用 , 分隔(例如:KTR_CPUMASK=0xAF,0xFFFFFFFFFFFFFFFF)。

  • KTR_VERBOSE 默认启用将 KTR 事件输出到控制台。此功能可以通过 sysctl debug.ktr_verbose 调整,如果未定义 KTR_VERBOSE,则默认关闭。

详情请参见 ktr(4)ktrdump(8)

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

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

options 	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 	REGRESSION

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

options 	COMPILING_LINT

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

options 	STACK

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

options 	NUM_CORE_FILES=5

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

options 	TSLOG
options 	TSLOGSIZE=262144

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

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

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

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

性能监控

device		hwpmc			# 驱动程序(也可作为可加载模块)
options 	HWPMC_DEBUG
options 	HWPMC_HOOKS		# 其他必要的内核钩子

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

在特定架构上可能需要额外的配置选项,请参见 hwpmc(4)

网络接口

协议栈

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 堆栈作为模块加载
#options 	TCP_HPTS_KTEST		# 为 HPTS 添加 KTEST 支持

注意

如果你使用了选项 INETINET6 或同时指定了两者,必须至少指定一个拥塞控制选项,否则将编译失败。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 	NETLINK

Netlink 内核/用户 <-> 内核/用户 消息传递接口

options 	NETSMB			# SMB/CIFS 请求器(requester)

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

options 	LIBMCHAIN

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

options 	LIBALIAS

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

options 	SCTP
options 	SCTP_SUPPORT

SCTP 是一种新型传输协议,由 RFC2960 定义,并由 RFC3309 和 RFC3758 更新,很快还会有新的基础 RFC 和更多扩展。本版本支持所有扩展,包括许多草案(大部分即将成为 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)以及各种其他指标。可以查看代码了解更多。我曾用这些日志生成过有趣的图表和曲线 :->

我还没有提交获取和打印日志的工具,但最终会完成。在那之前,如果你需要日志,可以发邮件给我 [email protected]

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

options 	OFED
options 	OFED_DEBUG_INIT

OpenFabrics 企业版分发(InfiniBand)。

options 	SDP
options 	SDP_DEBUG

套接字直接协议(SDP)。

options 	IPOIB # Infiniband 协议栈及其支持
options 	IPOIB_DEBUG
options 	IPOIB_CM # 使用连接模式(connected mode)的 IPoIB

IP over Infiniband (IPoIB),基于 InfiniBand 的互联网协议,参见 wiki/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 节点类型:

options 	VIMAGE
options 	VNET_DEBUG	# VIMAGE 调试用

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

网络接口

device		loop

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

device		ether

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

device		vlan

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

device		vxlan

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

device		wlan
options 	IEEE80211_DEBUG		# 启用调试信息
options 	IEEE80211_DEBUG_REFCNT
options 	IEEE80211_SUPPORT_MESH	# 启用 802.11s D3.0
options 	IEEE80211_SUPPORT_TDMA	# 启用 TDMA 

wlan(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_xauth

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

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

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

device		bpf

bpf 设备将启用伯克利数据包过滤器(Berkeley Packet Filter)。启用此选项时需注意法律和管理上的相关后果。DHCP 依赖 bpf。

device		netmap

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

device		disc

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

device		epair

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

device		edsc

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

device		tuntap

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

device		gif
device		gre
device		me
options 	XBONEHACK
  • 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 接口上配置相同的地址对。

device		stf

stf 设备实现了 6to4 封装。

device		pf
device		pflog
device		pfsync

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

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

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

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

device		if_bridge

桥接接口。

device		carp

通用地址冗余协议(CARP)。更多详情参见 carp(4)

device		enc

IPsec 接口。

device		lagg

LAGG 链路聚合接口。

device		wg

WireGuard 接口。

device		dummymbuf

dummymbuf —— mbuf 修改的 pfil 钩子。

互联网协议簇

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 修改。

注意

IPFIREWALL_PMOD 这里有问题。原文缺失此条目,应为上游文档缺失。

思考题

读者可能希望进一步研究这里的缺失条目 IPFIREWALL_PMOD,请仔细查阅源代码及 Add ipfw protocol modification module ipfw_pmod 等相关提及,并提交 PR 到 FreeBSD src。

options 	MBUF_STRESS_TEST
options 	MBUF_PROFILING

MBUF_STRESS_TEST 选项用于启用与 mbuf 函数相关的各种随机故障或极端情况测试。可参见 mbuf(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 2385

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

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

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

options 	DUMMYNET

DUMMYNET 将启用带宽限制器 “dummynet”。此功能还需要 IPFIREWALL。更多信息请参见 dummynet(4)ipfw(8)。在运行 DUMMYNET 时,HZ/kern.hz 应至少为 1000,以确保响应足够及时。

options 	DEBUGNET

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

options 	NETDUMP

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

options 	NETGDB

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

文件系统

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

注意

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)

options 	UFS_ACL

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

options 	UFS_DIRHASH

UFS 目录哈希(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 库的支持。

POSIX P1003.1B

options 	_KPOSIX_PRIORITY_SCHEDULING

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

options 	P1003_1B_SEMAPHORES

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

options 	P1003_1B_MQUEUE

POSIX 消息队列。

安全策略参数

options 	AUDIT

BSM 审计。

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 技术。

时钟

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

SCSI 设备

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。

CAM

CAM, Common Access Method storage subsystem(通用访问方法存储子系统),参见 cam(4)

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 故障的功能。

CAM CDROM 只读直接存取(“光盘”)设备

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 进行调整。

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)存在单个文件标记的型号。

CAM 处理器目标(pt)设备

options 	SCSI_PT_DEFAULT_TIMEOUT=60

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

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

options 	SES_ENABLE_PASSTHROUGH

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

iSCSI

device		cfiscsi		# CAM 目标层 iSCSI target 前端
device		iscsi		# iSCSI initiator 发起端
device		iser		# iSCSI RDMA 扩展(iSER)发起端

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

杂项设备和选项

device		pty

BSD 风格兼容的伪 tty。

device		nmdm

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

device		md

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

device		snp

Snoop 设备 —— 用于查看 pty / vty 等等。

device		ccd

级联磁盘(Concatenated disk)驱动程序

device		firmware

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

options 	LIBICONV

内核端 iconv 库,参见 iconv(3)

options 	MSGBUF_SIZE=40960

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

硬件总线配置

device		pci
options 	PCI_HP			# PCIe 原生热插拔
options 	PCI_IOV			# PCI SR-IOV 支持

PCI 总线与 PCI 相关选项。

硬件设备配置

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

必需设备

options 	KBD_DISABLE_KEYMAP_LOAD	# 拒绝加载键盘布局
options 	KBD_INSTALL_CDEV	# 在 /dev 中生成 CDEV 条目

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

options 	KBD_DELAY1=200		# 定义初始按键延迟
options 	KBD_DELAY2=15		# 定义按键延迟

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

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 终端的颜色。

可选设备

SCSI 主机适配器

device		aacraid

PMC 的 Adaptec RAID 控制器,第 6/7/8 系列及即将推出的型号。容器接口,需要 CAM。

device		ahc

Adaptec 274x/284x/2910/293x/294x/394x/3950x/3960x/398X/4944/19160x/29160x,aic7770/aic78xx 系列

device		ahd

Adaptec 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		ispfw

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

#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		mpt

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

device		sym

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

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_OPTS

Aic7xxx 驱动调试选项。参见 sys/dev/aic7xxx/aic7xxx.h

options 	AHC_REG_PRETTY_PRINT

在调试输出中打印寄存器位字段。会使驱动增加约 128KB 的大小。参见 ahc(4)

options 	AHD_DEBUG

编译 aic79xx 调试代码。

options 	AHD_DEBUG_OPTS=0xFFFFFFFF

Aic79xx 驱动调试选项。会使驱动增加约 215KB。参见 ahd(4)

options 	AHD_REG_PRETTY_PRINT

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

options 	AHD_TMODE_ENABLE

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

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

options 	ISP_TARGET_MODE=1

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

options 	ISP_DEFAULT_ROLES=0

ISP_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_PARITY

PCI 奇偶校验检查.

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

#options 	SYM_SETUP_MAX_LUN

支持的 LUN 数量。

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

device		ciss

Compaq “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/s

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

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

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 命名空间作为磁盘暴露,依赖 nvme

串行 ATA(SATA)主机控制器

device		ahci		# AHCI 兼容 SATA 控制器

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

device		mvs

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

device		siis

SiliconImage SiI3124/SiI3132/SiI3531 SATA 控制器。

device		ada

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

以上驱动是 cam(4) 子系统的一部分。它们取代了功能较少的 ata(4) 子系统驱动,且支持相同的硬件。


device		ata		# 传统 ATA/SATA 控制器

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

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

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

#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、非 PnPBIOS 系统,需要添加的 hint 行。

串行接口(uart)

device		uart

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

options 	UART_PPS_ON_CTS		# 使用 CTS 而非 DCD 捕获时间脉冲
options 	UART_POLL_FREQ		# 设置轮询频率,当硬件不支持中断时使用(默认 50 Hz)

uart(4) 驱动选项。

envvar		hint.uart.0.at="isa"

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

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_DEBUGGER

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

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

device		scc

串行通信控制器。

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

device		puc

PCI 通用通信驱动。

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

网络接口

MII 总线

device  	mii		# 最小 MII 支持
device  	mii_bitbang	# 通用模块,用于 bit-bang 操作 MII
device  	miibus		# 支持 MII,带 bit-bang 和所有 PHY

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

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

如果网卡驱动需要特定 PHY 的支持,可以通过添加 device miidevice 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 3c905C
device		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 II

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

技巧

bxe Broadcom 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 以太网控制器。

注意

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

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 Saturn

Sun 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 GEM

Apple 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 LX

Mellanox 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		my		# Myson 快速以太网 (MTD80X, MTD89X)

Myson 快速以太网 (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/8110S

Realtek 8139C+/8169/816xS/811xS/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/191

Silicon 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。

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

device          iflib

iflib 网络接口驱动框架。

device          em      # Intel Pro/1000 千兆以太网

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

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

device          ix      # Intel Pro/10GbE PCIe 以太网
device          ixv     # Intel Pro/10GbE PCIe 以太网 VF

PCI 以太网卡

device          cxgb        # Chelsio T3 10 千兆以太网
device          cxgb_t3fw   # Chelsio T3 10 千兆以太网固件

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

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

device          cxgbe       # Chelsio T4-T6 1/10/25/40/100 千兆以太网

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

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

device          cxgbev      # Chelsio T4-T6 虚拟功能

基于 Chelsio T4、T5 和 T6 的 PCIe 虚拟功能。

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

device          le          # AMD Am7900 LANCE 和 Am79C9xx PCnet

AMD Am7900 LANCE 和 Am79C9xx PCnet 网卡。

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

device          mxge

Myricom Myri-10G 10GbE 网卡。

device          oce         # Emulex 10 GbE(OneConnect 以太网)

Emulex 10G 适配器(OneConnect Ethernet)。

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

device          ti          # Alteon Networks Tigon I/II 千兆以太网

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

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

PCI IEEE 802.11 无线网卡

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 上触发致命总线错误的漏洞。漏洞的具体细节不太清楚,但可以在 https://forum.openwrt.org/viewtopic.php?pid=70060 的第 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 BCM43xx

Broadcom 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)

音频设备

device		sound

通用音频驱动。

snd_*:设备专用驱动

device		snd_als4000

Avance Logic ALS4000 PCI。

device		snd_atiixp

ATI IXP 200/300/400 PCI。

device		snd_cmi

CMedia CMI8338/CMI8738 PCI。

device		snd_cs4281

Crystal Semiconductor CS4281 PCI。

device		snd_csa

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

device		snd_emu10k1

Creative EMU10K1 PCI 和 EMU10K2(Audigy)PCI。

device		snd_emu10kx

Creative SoundBlaster Live! 和 Audigy。

device		snd_envy24

VIA Envy24 及兼容设备,依赖 snd_spicds

device		snd_envy24ht

VIA Envy24HT 及兼容设备,依赖 snd_spicds

device		snd_es137x

Ensoniq AudioPCI ES137x PCI。

device		snd_fm801

Forte Media FM801 PCI。

device		snd_hda

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

device		snd_hdsp

RME HDSP 9632 和 HDSP 9652。

device		snd_hdspe

RME HDSPe AIO 和 RayDAT。

device		snd_ich

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

device		snd_maestro3

ESS Technology Maestro-3/Allegro PCI。

device		snd_neomagic

Neomagic 256 AV/ZX PCI。

device		snd_solo

ESS Solo-1x PCI。

device		snd_spicds

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

device		snd_t4dwave

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

device		snd_uaudio

USB 音频。

device		snd_via8233

VIA VT8233x PCI。

device		snd_via82c686

VIA VT82C686A PCI。

device		snd_vibes

S3 Sonicvibes PCI。

用于非 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"

最后更新于

这有帮助吗?