板载硬件驱动最佳实践

板载硬件驱动最佳实践

当我开始进行计算机管理(VME 总线系统)时,驱动程序必须内置在内核中,有一些非常明智的规则,人们不应违反:

切勿插入/安装任何没有合适驱动程序的硬件。

造成这种情况的主要原因是硬件很有可能生成 IRQ,如果不生成 IRQ 或处理不当,将导致内核崩溃。


碰巧的是,在配备 Intel ICH10 南桥的主板上运行任何 -4 或 -5 linux 内核,运行 lshw 会告诉我:

*-serial UNCLAIMED
    description: SMBus
    product: 82801JI (ICH10 Family) SMBus Controller

这与我理解为专用驱动程序的 CONFIG_I2C_I801 内核选项的任何设置无关。

话虽这么说,插入 SMBus,我至少得到了一个超级 I/O 芯片(我相信它具有很强的本地中断能力,为此我得到了一个专用驱动程序,但由于 SMBus 未被驱动而没有用):

保持原样(vg 超级 I/O 芯片未驱动)是否 100% 安全(我指的是生产级)?

答案1

没关系,怪物已经走了。那是一个 PCI 总线设备。 PCI 设备是我们的朋友。

$ lspci | grep SMBus
00:1f.3 SMBus: Intel Corporation Wildcat Point-LP SMBus Controller (rev 03)

PCI 设备的地址分配由软件控制。设备不需要监听固定的 IO 端口或内存地址。

因此它不会被意外启用。该标准规定必须专门启用设备 IRQ(并且有一个标准方法可以做到这一点)。

https://en.wikipedia.org/wiki/Peripheral_Component_Interconnect#Auto_configuration

有一个警告,建议不要加载 SMBus 驱动程序。 SMBus 设备可能由 ACPI 固件控制(反洗钱)。在这种情况下,内核不应驱动它。 ACPI 应该声明 SMBus 设备资源,以便内核可以避免这种情况。我不确定 ACPI 是否可能出错。我认为内核曾经弄错了,但现在它能识别它了。

i801_smbus 0000:00:1f.3: PCI INT B -> GSI 21 (level, low) -> IRQ 21
ACPI: I/O resource 0000:00:1f.3 [0x400-0x41f] conflicts with ACPI region SMRG [0x400-0x40f]
ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver

相关内容