Shell命令读取设备寄存器?


18

在运行Linux的单板计算机上,是否可以读取控制硬件的设备配置寄存器的内容?我认为这将是的包装inw()

我正在寻找与U-boot内存转储(md)命令等效的命令,以便在驱动程序调试的上下文中使用。


2
这可能会帮助,但请务必阅读整个主题:lists.arm.linux.org.uk/lurker/message/...
吉尔斯“SO-停止作恶”

有任何更新吗?

@森:负面。我还是很困惑。我读了链接的线程,这表明inw()并没有实现我的想法:“ inb()和朋友用于仿真PCI和ISA IO地址空间。” 我一直在使用示波器,并阅读很多内核驱动程序代码,这是我的下一个最佳选择。
pingsept 2011年

Answers:


14

如果您知道设备的物理地址,则可以使用devmem2。

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

3

我不知道您是否可以直接使用香草内核。

但是,编写一个简单的驱动程序应该是相当困难的,该驱动程序在/ proc中使用“文件”来导出您想要看到的内存内容。

然后,您可以使用简单的脚本读取“文件”,并可以访问该内存。


1

我对此可能是完全完全错误的,请原谅我,但是如果uboot的md命令只是读取映射到设备寄存器的内存地址并将内容返回给您,那么您不能通过巧妙的使用来读取相同的内存位置的dd if=/dev/mem ...


我认为这条路线有潜力,但似乎存在问题。此命令以root用户身份执行:“ dd if = / dev / mem bs = 1 skip = 10000 count = 512”给出此错误:“ dd:/ dev / mem:Bad address”我不确定这是什么意思。Google告诉我,这与2.6内核中引入的更改有关,但是我对此还不了解,因此无法解决。
2011年

1
也许尝试使用mtdblock驱动程序。请查看以下内容:en.gentoo-wiki.com/wiki/Using_Graphics_Card_Memory_as_Swap 但是,与其将其指向图形卡RAM,也可以尝试将其指向设备寄存器。
LawrenceC

0

/ sys / bus / pci / devices / * / config中的PCI设备配置是否有帮助?


2
这实际上是评论,而不是问题的答案。请使用“添加评论”为作者留下反馈。
雷南

@Renan“这确实是一条评论”可能是无意的,但有趣的是,无论如何。+1有助于重言重语。编辑:我只是意识到这可能会讽刺。我不是那个意思。
2013年

0

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

以下是一些很酷的测试方法devmemhttps : //stackoverflow.com/questions/12040303/accessing-physical-address-from-user-space/45127890#45127890


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.