ユーザー空間から PCIe SATA ブリッジの PCI BAR (#5) にアクセスしようとしていますが、をmmap()
介して BAR からアクセスする/sys/bus/pci/devices/.../resource5
と、ファイル内のすべてのオフセットで 0xFF が返されます。Intel SATA コントローラなどの他のデバイスは、適切なデータで応答します。
BAR はlspci -vv
Intel コントローラと同じように表示されます (アドレスのみが異なります)。
Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]
両方のデバイスはahci
ドライバーによって一致しており、SATA コントローラーは別の方法で動作します - 接続されたディスクにアクセスできます。
今のところ実験的にレジスタを突っ込みたいだけなので、ユーザー空間からアクセスしようとしています。これを行うために、気になるレジスターにアクセスするように変更されたpcimemの変更された形式を使用しています。ただし、任意のオフセットは 0xFF を返すため、単純な pcimem を使用した場合でも:
pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w
0xFFFFFFFF を返します (「w」は「ワード」読み取りを示し、したがって 4 バイトです)。
他のデバイスがアクセス可能であるのに、このデバイスの BAR5 へのアクセスを妨げているのは何ですか? この種のユーザー空間から PCI BAR にアクセスすることは理にかなっていますか?