Linuxを実行しているシングルボードコンピューターで、ハードウェアを制御するデバイス構成レジスターの内容を読み取る方法はありますか? inw()
のラッパーになると思います。
ドライバーのデバッグのコンテキストで使用する、Uブートメモリダンプ(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
はDebianから拒否されました: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=595805 (それでもUbuntuパッケージが作成されました) 。
あなたはUbuntuでそれを得ることができます:
Sudo apt-get install busybox
使用法:物理アドレスから4バイトを読み取る0x12345678
:
Sudo busybox devmem 0x12345678
そのアドレスに0x9abcdef0
を書き込みます。
Sudo busybox devmem 0x12345678 w 0x9abcdef0
devmem
をテストするクールな方法をいくつか紹介します: 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デバイスの読み書きに使用できます。