Linux下“用户空间修改设备寄存器或者物理内存”的实现
底层开发过程中,经常需要在终端查看或者修改设备寄存器的值,busybox有一个工具—-devmem,可用于读取或者修改物理寄存器的值,非常方便:
busybox devmem
BusyBox v1.14.3 (2014-11-05 16:48:48 CST) multi-call binary
Usage: devmem ADDRESS [WIDTH [VALUE]]
Read/write from physical address
ADDRESS Address to act upon
WIDTH Width (8/16/…)
VALUE Data to be written
但它有一个不足的地方:不能连续操作物理内存(虽然这很危险,但在显示相关的调试中,如果能向指定的物理内存加载一个图片,或者dump指定物理内存的内容,还是很方便的),因此我重新写了一些代码,实现如下功能:
利用/dev/mem,编写一个library,将物理地址访问的接口抽象出来。
基于该library,实现devmd工具,可以显示指定的某个或者某些物理地址的内容。
基于该library,实现devmcpy工具,可以将指定地址的内容,copy到另一个地址。类似memcpy。
基于该library,实现devmset工具,可以将指定地址设置为某一个value。类似memset。
基于该library,实现devmload和devmsave工具,将指定文件的内容加载到指定物理地址,以及从指定物理地址dump数据到指定的文件。
实现的过程比较简单,包括基本的文件open、read、write、mmap等操作,这里就不详细分析代码了,贴一下README文件,具体可参考github中的source code:https://github.com/wowotech/wowolib/tree/master/devmem。
Purpose:A simple library to operate physical address in usersapce,which is based on linux "/dev/mem".Also, some useful tools is provided, including:--devmd, display PA's value.--devmcpy, copy from src PA to dst PA.--devmset, set PA to special value.--devmload, load file to PA.--devmsave, save PA to file.Uasge:--devmem libraryInclude devmem.h, and put devmem.c together with your souece code,call the APIs you need, and build them.--devmd./devmd { address } [type] [count]address: Address to act uponwidth: Width (8/16/...), default is 32count: Data count to be read, default is 1--devmcpy./devmcpy {src_addr} {dst_addr} {count} [width]src_addr: source addressdst_addr: destination addresscount: copy count, default is 1width: width, 8/16/32/64..., default is 32--devmset./devmset {address} {value} {count} [width]address: Address to act uponvalue: Value to writecount: Set countswidth: width, 8/16/32/64..., default is 32--devmload./devmload {addr} {filename}addr: destination physical addressfilename: file name will load from--devmsave./devmsave {addr} {len} {filename}addr: physical address need to savelen: length in bytefilename: file save toAuthor:wowo<www.wowotech.net>Date:2015-05-15
继续讨论
新讨论请用 GitHub 账号在下方发言——评论会保存在本仓库的 Discussions 里,与站点同寿; 再下方的「历史评论」是原站的只读存档。
评论(20 条,只读存档)
以下为原站的历史评论(只读存档);继续讨论请用上方的评论区。

printk
RobinHsiang
RobinHsiang
wowo
descent
linuxer
anchen
anchen
linuxer
anchen
wowo
linuxer
wowo
linuxer
anchen
anchen
anchen
linuxer
linuxer
descent