Linux를 실행하는 단일 보드 컴퓨터에서 하드웨어를 제어하는 장치 구성 레지스터의 내용을 읽는 방법이 있습니까? inw()
의 래퍼가 될 것이라고 생각합니다.
드라이버 디버깅의 맥락에서 사용될 U-boot memory dump (md
) 명령과 동등한 것을 찾고 있습니다.
장치의 실제 주소를 알고 있으면 devmem2를 사용할 수 있습니다.
devmem2 <physical address> <size (b/h/w)> [value]
바닐라 커널로 직접 할 수 있는지 모르겠습니다.
그러나/proc에 "파일"을 사용하여보고자하는 메모리 내용을 내보내는 간단한 드라이버를 작성하는 것은 상당히 어려운 일입니다.
그런 다음 간단한 스크립트로 "파일"을 읽고 해당 메모리에 액세스 할 수 있습니다.
나는 이것에 대해 완전히 그리고 완전히 틀릴 수 있고, 내가 있다면 용서하지만, uboot의 md 명령이 장치 레지스터에 매핑 된 메모리 주소를 읽고 내용을 반환하면 현명하게 사용하여 동일한 메모리 위치를 읽을 수 없습니다 의 dd if=/dev/mem ...
?
busybox devmem
busybox devmem
는 내가 선호하는 devmem2
버전입니다. https://unix.stackexchange.com/a/134661/32558
devmem2
는 Buildroot http://free-electrons.com/pub/mirror/devmem2.c 와 같은 여러 업스트림에서 여러 버전으로 나왔습니다.
그러나 Busybox 유틸리티는보다 표준적이고 광범위하게 사용 가능하며 유지 관리됩니다.
예를 들어, devmem2
는 데비안에서 거부되었습니다 : https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (그러나 우분투 패키지는 깔끔하게 만들어졌습니다. ).
우분투에서 다음을 얻을 수 있습니다.
Sudo apt-get install busybox
사용법 : 실제 주소 0x12345678
에서 4 바이트를 읽습니다.
Sudo busybox devmem 0x12345678
해당 주소에 0x9abcdef0
를 작성하십시오.
Sudo busybox devmem 0x12345678 w 0x9abcdef0
다음은 devmem
out을 테스트하는 멋진 방법입니다. https://stackoverflow.com/questions/12040303/accessing-physical-address-from-user-space/45127890#4512789
/ sys/bus/pci/devices/*/config의 PCI 장치 구성이 도움이됩니까?
pcimem ( https://github.com/billfarrow/pcimem )이라는 유틸리티가 있습니다
Pci 장치에서 읽고 쓰는 데 사용할 수 있습니다.