openwrt用のPCIEデバイスドライバを開発していますが、last questionで述べたタイマ割り込みでioメモリにアクセスしようとするとデータバスエラーが発生しました。多くの研究の後、私はその理由を知ったかもしれないと思うが、私はそれを解決することができない。私の悩みは以下の通りです。PCIE領域が一貫しておらず、一貫していません
先週、私はpcie領域のサイズがシステムの起動時に変更されている可能性があることを知りました。私のドライバではbar0の領域サイズは4096(pci_resource_len
から返されます)であり、領域サイズは4097でlspci -vv
で、これはLinuxカーネルのページサイズを壊します。 pciutilのソースコードを読むと、lspci
コマンドが/sys/devices/pci0000:00/0000:00:00.0/resouce
ファイルからpcie情報を取得することが分かります。だから私はすべての私のカスタムコンポーネントを削除し、私のルータ上で元のopenwrtを実行します。 cat /sys/devices/pci0000:00/0000:00:00.0/resouce
によって、結果(BAR0)の最初の行は
0x0000000010008000 0x0000000010009000 0x0000000000040200
また、私も/proc/iomem
の内容を確認し、PCIEに関連するコンテンツが
10000000-13ffffff : mem_base
10000000-13ffffff : PCI memory space
10000000-10007fff : 0000:00:00.0
10008000-10008fff : 0000:00:00.0
それはスーパー奇妙です上記の2つのファイルが示すbar0の領域サイズは異なります。 PCIEのメカニズムによれば、領域サイズは常に2の累乗でなければなりません。領域サイズはどのようにして4097になりますか?