4

/proc/bus/pci ディレクトリの下のユーザー空間 pci エントリの読み取りと、ドライバーでのカーネル空間 API pci_read_config_word() の呼び出しの両方を試みました。しかし、どちらも pci の基本構成スペースしか読み取れないようで、オフセットは 0x100 未満です。

読み取りたいオフセットが 0x100 を超えています。Linux でそれを行う方法を誰か教えてもらえますか? カーネル空間で行う場合は、どの API を呼び出すかを教えていただければ幸いです。どうもありがとうございました!

4

1 に答える 1

11

pci_read_config_word()は正しい API ですが、拡張構成スペースにアクセスするには、MMCONFIG を使用する必要があります。これはあなたが設定したものではありません。カーネルは、可能であれば MMCONFIG を単独で使用することを選択する必要があります。次のようなものが見えますか

e0000000-efffffff : PCI MMCONFIG 0000 [bus 00-ff]

/proc/iomem?また、カーネル ログには、ACPI MCFG テーブルと MMCONFIG に関するいくつかの行が表示されます。

ACPI: MCFG 00000000bb7fec63 0003C (v01 LENOVO TP-6U    00001410 LNVO 00000001)
...
PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)

もちろん、カーネルは でビルドする必要がありますCONFIG_PCI_MMCONFIG=y

于 2011-06-15T07:02:42.323 に答える