장치 레지스터를 읽는 쉘 명령?


18

Linux를 실행하는 단일 보드 컴퓨터에서 하드웨어를 제어하는 ​​장치 구성 레지스터의 내용을 읽는 방법이 있습니까? 나는 그것이 래퍼 일 것이라고 생각한다 inw().

md드라이버 디버깅 컨텍스트에서 사용할 U-boot memory dump ( ) 명령 과 동등한 것을 찾고 있습니다.


2
이것은 도움이 될 수 있지만 전체 스레드를 읽으십시오. lists.arm.linux.org.uk/lurker/message/…
Gilles 'SO-stop

이것에 대한 모든 업데이트 ??
Sen

@ 센 : 부정적. 나는 여전히 충격을 받았다. 링크 된 스레드를 읽습니다. 이것은 inw ()가 내가 생각한 것을하지 않는다는 것을 암시합니다 : "inb ()와 친구들은 PCI와 ISA IO 주소 공간의 에뮬레이션 만을 위한 것입니다." 오실로스코프를 사용하고 다음 최고의 옵션으로 많은 커널 드라이버 코드를 읽었습니다.
pingswept December

답변:


14

장치의 실제 주소를 알고 있으면 devmem2를 사용할 수 있습니다.

devmem2 <physical address> <size (b/h/w)> [value]

3

바닐라 커널로 직접 할 수 있는지 모르겠습니다.

그러나 / proc에 "파일"을 사용하여보고자하는 메모리 내용을 내보내는 간단한 드라이버를 작성하는 것은 상당히 어려운 일입니다.

그런 다음 간단한 스크립트로 "파일"을 읽고 해당 메모리에 액세스 할 수 있습니다.


1

나는 이것에 대해 완전히 그리고 완전히 틀릴 수 있고, 내가 있다면 용서하지만, uboot의 md 명령이 장치 레지스터에 매핑 된 메모리 주소를 읽고 내용을 반환하면 현명하게 사용하여 동일한 메모리 위치를 읽을 수 없습니다 의 dd if=/dev/mem ...?


이 경로에는 잠재력이 있다고 생각하지만 문제가있는 것 같습니다. 이 명령은 루트로 실행되었습니다. "dd if = / dev / mem bs = 1 skip = 10000 count = 512"오류 : "dd : / dev / mem : 잘못된 주소"그 의미가 무엇인지 잘 모르겠습니다. Google은 2.6 커널에 도입 된 변경 사항과 관련이 있다고 말했지만 아직 해결하기에는 충분하지 않습니다.
pingswept

1
mtdblock 드라이버를 사용해보십시오. 이것을 확인하십시오 : en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap 그러나 그래픽 카드 RAM을 가리키는 대신 장치 레지스터를 가리켜보십시오.
LawrenceC

0

/ sys / bus / pci / devices / * / config의 PCI 장치 구성이 도움이됩니까?


2
이것은 실제로 의견이며 질문에 대한 답변이 아닙니다. 저자에 대한 의견을 남기려면 "댓글 추가"를 사용하십시오.
Renan

@Renan "이것은 정말 댓글입니다"아마 의도하지 않았지만, 웃긴 일이 있습니다. 타우 톨 로지로 하루를 밝게 해주는 +1 편집 : 나는 이것이 비꼬는 것으로 나올 수 있음을 깨달았습니다. 나는 그런 식으로 의미하지 않습니다.
root

0

busybox devmem

busybox devmem/unix//a/134661/32558devmem2 에서 내가 선호하는 버전입니다 .

devmem2Buildroot 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

사용법 : 실제 주소에서 4 바이트를 읽습니다 0x12345678.

sudo busybox devmem 0x12345678

0x9abcdef0그 주소에 쓰십시오 :

sudo busybox devmem 0x12345678 w 0x9abcdef0

다음은 멋진 테스트 방법입니다 devmem. /programming/12040303/accessing-physical-address-from-user-space/45127890#45127890


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.