사용자 공간에서 PCIe SATA 브리지 용 PCI BAR (# 5)에 액세스하려하지만 mmap()
을 BAR에서 /sys/bus/pci/devices/.../resource5
을 통해 얻을 때마다 모든 오프셋에서 0xFF가됩니다. 파일. Intel SATA 컨트롤러와 같은 다른 장치는 적절한 데이터로 응답합니다.사용자 공간 PCI BAR 액세스는 모든 오프셋에서 0xFF를 반환합니다.
BAR은 Intel 컨트롤러의 경우와 동일하게 (주소 만 다를 경우) lspci -vv
으로 표시됩니다.
Region 5: Memory at f7b10000 (32-bit, non-prefetchable) [size=2K]
두 디바이스는 ahci
드라이버에 의해 일치되고, SATA 컨트롤러는 다른 작품 - 내가 첨부 된 디스크에 액세스 할 수 있습니다.
사용자 공간에서 액세스하려고하는 중입니다. 지금은 실험적으로 레지스터에서 찌르고 싶기 때문입니다. 이렇게하려면 pcimem의 수정 된 양식을 사용하여 관심있는 레지스터에 액세스하도록 변경했습니다. 그러나 어떤 너무도 일반 pcimem으로, 반환 0xFF의 오프셋 :
pcimem /sys/bus/pci/devices/0000\:01\:00.0/resource5 0 w
반환을 0xFFFFFFFF ("w"는 "단어"읽기, 따라서 4 바이트를 나타낸다).
다른 장치가있을 때이 장치가 액세스 가능하도록 BAR5를 막는 것은 무엇입니까? PCI BAR에 대한 이러한 종류의 사용자 공간 액세스를 가능하게하는 것이 맞습니까?
나는 또한 끔찍한 장치 오류에 대해 생각하고 있었지만 디스크가 보이고 마운트되어 브리지가 작동하므로 바를 읽을 수 없습니다. 몇 번이나 재부팅했지만 매번 동일한 결과가 나타납니다. – Inductiveload
그렇다면 노출 된 BAR 영역이 아닌 사용하지 않는 BAR 영역 일 수 있습니다. –
그러나 사용하려는 하드웨어 모듈 (예 : GPIO, I2C 및 SPI 인터페이스)의 레지스터는 BAR5에 있습니다. 메모리 영역 인 유일한 BAR이며 크기와 수는 데이터 시트가 알리는 것과 일치하며 데이터 시트에는 수십 개의 레지스터가 나열되어 있습니다.이 레지스터는 하드웨어와 바이올린에 액세스 할 수 있어야합니다. – Inductiveload