web-dev-qa-db-ja.com

デバイスレジスタを読み取るシェルコマンド?

Linuxを実行しているシングルボードコンピューターで、ハードウェアを制御するデバイス構成レジスターの内容を読み取る方法はありますか? inw()のラッパーになると思います。

ドライバーのデバッグのコンテキストで使用する、Uブートメモリダンプ(md)コマンドと同等のものを探しています。

18
pingswept

デバイスの物理アドレスがわかっている場合は、devmem2を使用できます。

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

バニラカーネルで直接実行できるかどうかはわかりません。

ただし、/ proc内の「ファイル」を使用して、表示したいメモリの内容をエクスポートする単純なドライバを作成するのはかなり簡単なはずです。

次に、簡単なスクリプトで「ファイル」を読み取り、そのメモリにアクセスできます。

3
Johan

私はこれについて完全かつ完全に間違っている可能性があり、私がそうであれば許しますが、ubootのmdコマンドがデバイスレジスタにマップされたメモリアドレスを読み取って内容を返すだけの場合、賢い使い方で同じメモリ位置を読み取ることができませんでしたdd if=/dev/mem ...

1
LawrenceC

busybox devmem

busybox devmemdevmem2の推奨バージョンです。これは 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デバイス構成は役に立ちますか?

0
user3487

pcimemというユーティリティがあります( https://github.com/billfarrow/pcimem

PCIデバイスの読み書きに使用できます。

0
simba