Kernel
有人可以解釋一下 lspci -vv 輸出嗎?
我在
lspci -vv -s 00:00
執行 Linux 的單板電腦上執行時得到以下輸出。07:05.0 RAID bus controller: Adaptec AAC-RAID (Rocket) (rev 03) Subsystem: Adaptec ASR-2230S + ASR-2230SLP PCI-X (Lancer) Control: I/O- Mem+ BusMaster+ SpecCycle+ MemWINV+ VGASnoop- ParErr- Stepping- SERR+ FastB2B- Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- SERR- Latency: 64 (250ns min, 250ns max), Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 74 Region 0: Memory at f7a00000 (64-bit, non-prefetchable) [size=2M] Region 2: Memory at f79ff000 (64-bit, non-prefetchable) [Remaining output truncated]
以上只是範例輸出,並不完全是我得到的,但它包含感興趣的項目。
我了解 lspci 命令的大部分輸出,但我希望有人向我解釋以Region開頭的行…我在這裡查看的是由 Region 行指定的記憶體類型?我如何訪問它?有了這個問題,我試圖完成通過 PCI 匯流排連接的兩台單板電腦之間的通信。我應該可以直接說話。只有一個執行匯流排的 PCI 仲裁器。這是我到目前為止所完成的……
我為出站 PCI 流量創建了一個 Linux 核心模組。基本上,它使用驅動程序 mmap 實現從使用者空間(使用使用者空間應用程序)一直向下映射。我寫到 mmap 返回的位置,我實際上用匯流排分析器看到了流量!現在在另一台單板電腦上,我嘗試讀取 PCI 設備的 sysfs 資源,但只看到所有 FF 而沒有任何變化。
任何關於所有這些記憶體映射如何發生的建議或解釋,包括 PCI,將不勝感激。
lspci顯示有關您的 PCI 設備的資訊(取決於選項),您可以查看手冊頁以獲取更多資訊。
關於輸出上的REGION標頭,這些行詳細說明了分配用於該組件的寄存器的位置。它與記憶體映射以及每個組件如何使用記憶體有關。
Region 0: Memory at f7a00000 (64-bit, non-prefetchable) [size=2M] Region 2: Memory at f79ff000 (64-bit, non-prefetchable)
在這些行中指定了所使用的寄存器地址、大小和地址大小(64 位指向一個寄存器)。
如果您想更深入地了解此地址的使用方式,請查找有關電腦體系結構的更多資訊。