オンボードハードウェアドライバのベストプラクティス

オンボードハードウェアドライバのベストプラクティス

私がコンピュータ管理(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が駆動されないため役に立ちません)。

そのままにしておくのは100%安全ですか(生産グレードを意味しますか)(vgスーパーI / Oチップは駆動されません)

答え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

関連情報