据我了解,FreeBSD 的内核是通过文本文件配置的。每个内核配置条目都位于一行上。许多条目还带有用散列标记分隔的注释。通用配置。文件可以在 /usr/src/sys/<'arch'>/conf/GENERIC 中找到。您可以将其复制并更改为您的自定义内核。
例子:
device ehci # EHCI PCI->USB interface (USB 2.0)
但这与实际设备有何关系?假设我插入 USB 闪存驱动器,USB 设备是否会执行握手或某种识别?此外,如果驱动程序不是核心驱动程序,而是可加载的内核模块,内核是否会查找请求的驱动程序?
作为一个附带问题。 KERNCONF='' 命令只是告诉 make(1) 内核名称?
答案1
ident
内核名称由内核conf 文件中的行定义。 KERNCONF 变量定义要使用的 kernelconf 文件。
FreeBSD 架构手册中的“Device Probe and Attach”部分描述了如何检测 USB 设备: https://www.freebsd.org/doc/en_US.ISO8859-1/books/arch-handbook/usb-devprobe.html
答案2
文本文件仅定义内核内置的内容;你不放在那里的东西通常最终会被编译为可加载的内核模块。
是的,在启动期间 - 或者在 kldloading 内核模块之后 - 驱动程序的“probe”例程运行;该例程负责确定驱动程序是否支持某些硬件。如果是,则将运行“attach”驱动程序函数;实际上将驱动程序实例附加到设备。 FreeBSD 通常不会尝试自动加载内核模块,因此如果驱动程序没有内置到内核中,则必须手动加载它(kldload),或者使用 rc 脚本加载它们(使用 kld_list rc 变量),或者使用bootloader 来预加载它们(通过编辑 /boot/loader.conf)。