lspci -vvv로 얻은 PCI 장치 주소가 유효하지 않습니까?

lspci -vvv로 얻은 PCI 장치 주소가 유효하지 않습니까?

PCI 장치 메모리 영역을 읽으려고 합니다. (제가 찾고 있는 것이 장치로부터의 오프셋이라는 것을 알고 있습니다.) 먼저 PCI 장치 메모리가 매핑된 시스템 메모리 주소를 얻으려고 합니다. 그러기 위해 나는 이렇게 한다lspci-vvv나는 얻다:

00:1a.8 Memory controller
Subsystem: Dell Device
Flags: bus master, fast devsel, latency 64, IRQ 139
Memory at 601d198000 (64-bit, non-prefetchable) [size=16K]
Memory at 601d000000 (64-bit, non-prefetchable) [size=1M]
Capabilities: <access denied>
Kernel driver in use: nvm-mem-drv

지금까지는 매우 좋았습니다. 이제 dd의 도움으로 그 메모리에 무엇이 있는지 확인하려고 합니다.

dd if=/dev/mem iflag=skip_bytes skip=‭412803399680 bs=512 count=1 | hexdump -C

놀랍게도 내가 얻는 것은 다음과 같습니다.

dd: '/dev/mem'을 읽는 동안 오류가 발생했습니다.잘못된 주소0+0 레코드 입력 0+0 레코드 출력 복사 0바이트, 9,3556e-05초, 0,0kB/s

이 방법이 다른 플랫폼에서도 효과가 있었기 때문에 "놀랍게도" 이 방법을 설정했습니다.

이제 질문은 왜DD주소가 잘못되었다고요? 가장 먼저 눈에 띄는 점은 이 플랫폼의 주소가 다른 플랫폼의 주소보다 길다는 것입니다(정확히 두 자리). 그래서 나는 아마도 내가 무엇을 겪고 있는지 생각했습니다.뛰어 넘다오버플로 - 512개 청크에 "건너뛰기"를 지정하여 문제를 해결하려고 했지만 해당 메서드도 반환됩니다.잘못된 주소. 그래서 나는 여기서 약간 길을 잃었습니다. lspci가 나를 속이고 있는 걸까요, 아니면 무슨 일이 일어나고 있는 걸까요? :|

추신: 또한 커널 CONFIG_STRICT_DEVMEM이 설정되지 않았음을 확인했습니다. 다른 주소는 잘 읽을 수 있어요.

관련 정보