24.3 机器无关的内核选项
原文: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 文件中。参见/boot/device.hints,config(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 中。有两种方式可以修改上述限制:
在内核编译时设置值。下面的选项是一种将该限制提高到 1GB 的方法。通过修改相关参数,还可以进一步提高这些值。
在
/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。
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)时来覆盖选项。
调度器
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下保存一些统计信息,有助于调试调度决策。
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隐式启用。
SMP 调试选项
options PREEMPTION
options FULL_PREEMPTION
options WITNESS
options WITNESS_KDB
options WITNESS_SKIPSPINCALLOUT_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_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) 的误用进行调试跟踪。
兼容性
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 SYSVMSGSYSVSHM:启用 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_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 类型隔离到哈希类别中,这样所有缓冲区溢出和释放后使用(UAF)问题通常只会影响该哈希类别中的 malloc 类型的内存。这纯粹是一款调试工具;通过改变哈希函数并追踪哪个哈希类别被破坏,每个实例的哈希类别交集将指向被滥用的单个 malloc 类型。此时可以使用检查或 memguard(9) 来捕获问题代码。
options DEBUG_MEMGUARDDEBUG_MEMGUARD 构建并启用 memguard(9),这是内核的替代分配器,用于检测释放后修改(modify-after-free)场景。有关使用的更多信息,请参见 memguard(9) 手册页。
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 指定该池的初始大小。可以在启动时/运行时通过可调参数和 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_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 传入的字符串布局必须匹配一系列位掩码,每个掩码用,分隔(例如:KTR_CPUMASK=0xAF,0xFFFFFFFFFFFFFFFF)。KTR_VERBOSE默认启用将 KTR 事件输出到控制台。此功能可以通过 sysctldebug.ktr_verbose调整,如果未定义KTR_VERBOSE,则默认关闭。
详情请参见 ktr(4) 和 ktrdump(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。该核心文件数量限制可在运行时通过 sysctl debug.ncores 进行调整。
options TSLOG
options TSLOGSIZE=262144TSLOG 选项可启用事件的时间戳记录,特别是函数的进/出,以便跟踪内核消耗的时间。尤其在早期启动过程中非常有用,因为此时还无法使用 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 支持注意
如果你使用了选项
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 是一种新型传输协议,由 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_INITOpenFabrics 企业版分发(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。
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) 的别名),用于网络栈虚拟化。
网络接口
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
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_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 依赖 bpf。
device netmapnetmap 设备可实现从用户态对网络设备的内存映射访问,即使在 10Gbit/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)。
device encIPsec 接口。
device laggLAGG 链路聚合接口。
device wgWireGuard 接口。
device dummymbufdummymbuf —— 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_PROFILINGMBUF_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 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) 和 ipfw(8)。在运行 DUMMYNET 时,HZ/kern.hz 应至少为 1000,以确保响应足够及时。
options DEBUGNETDEBUGNET 选项将启用基础调试/内核 panic 时的网络 API。NETDUMP 和 NETGDB 需要使用 DEBUGNET。
options NETDUMPNETDUMP 选项将在内核中启用对 netdump(4) 客户端支持。它可在内核 panic 时将内核转储发送到远程主机。
options NETGDBNETGDB 选项在内核中启用对 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_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 库的支持。
POSIX P1003.1B
options _KPOSIX_PRIORITY_SCHEDULING1993 年 POSIX 标准新增的实时扩展 _KPOSIX_PRIORITY_SCHEDULING 内置了对 _POSIX_PRIORITY_SCHEDULING 的支持。
options P1003_1B_SEMAPHORESp1003_1b_semaphores 功能仍处于高度实验阶段,若出现问题,用户需协助参与调试工作。
options P1003_1B_MQUEUEPOSIX 消息队列。
安全策略参数
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 技术。
时钟
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=60CAM 处理器目标(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 ptyBSD 风格兼容的伪 tty。
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)。
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 # 定义按键延迟定义键盘延迟(对于响应迅速的交互式控制台,可尝试 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 终端的颜色。
可选设备
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 ispQlogic 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。
options AHC_REG_PRETTY_PRINT在调试输出中打印寄存器位字段。会使驱动增加约 128KB 的大小。参见 ahc(4)。
options AHD_DEBUG编译 aic79xx 调试代码。
options AHD_DEBUG_OPTS=0xFFFFFFFFAic79xx 驱动调试选项。会使驱动增加约 215KB。参见 ahd(4)。
options AHD_REG_PRETTY_PRINT在调试时打印可读的寄存器定义。
options AHD_TMODE_ENABLE启用 ahd(4) target mode 操作的单元位图。
dev/isp/(Qlogic SCSI/FC 驱动)相关
dev/isp/(Qlogic SCSI/FC 驱动)相关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 控制器。
仅需添加相关行条目;代码可自动发现,配置其支持的所有控制器。
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 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、非 PnPBIOS 系统,需要添加的 hint 行。
串行接口(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 设备使用。其他情况下不需要。极不建议使用 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_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 卡。
网络接口
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 II基于通用 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 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/8110SRealtek 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/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。
使用 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 以太网 VFPCI 以太网卡
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 PCnetAMD Am7900 LANCE 和 Am79C9xx PCnet 网卡。
此网卡基于通用 MII 总线控制器代码。
device mxgeMyricom 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 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)。
音频设备
device sound通用音频驱动。
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。
用于非 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"最后更新于
这有帮助吗?