/dev/mem

编程入门 行业动态 更新时间:2024-10-25 23:32:27

/<a href=https://www.elefans.com/category/jswz/34/1771302.html style=dev/mem"/>

/dev/mem

前言

上篇文章中我们介绍了常见设备的主设备号,其中排在第一位的就是

  1 char	Memory devices1 = /dev/mem		Physical memory access

今天我们就来研究下 /dev/mem

一言不合先cat

root@ATK-IMX6U:~# cat /dev/mem
cat: /dev/mem: Bad address

提示 Bad address,说明地址不对,cat /dev/mem 是从地址 0 开始访问,我们看看地址 0 是什么

root@ATK-IMX6U:~# cat /proc/iomem
00905000-0091ffff : 905000.sram
01804000-01805fff : /soc/dma-apbh@01804000
02020000-02023fff : /soc/aips-bus@02000000/spba-bus@02000000/serial@02020000
02040000-02043fff : /soc/aips-bus@02000000/tsc@02040000
02080000-02083fff : /soc/aips-bus@02000000/pwm@02080000
02084000-02087fff : /soc/aips-bus@02000000/pwm@02084000
02088000-0208bfff : /soc/aips-bus@02000000/pwm@02088000
0208c000-0208ffff : /soc/aips-bus@02000000/pwm@0208c000
0209c000-0209ffff : /soc/aips-bus@02000000/gpio@0209c000
020a0000-020a3fff : /soc/aips-bus@02000000/gpio@020a0000
020a4000-020a7fff : /soc/aips-bus@02000000/gpio@020a4000
020a8000-020abfff : /soc/aips-bus@02000000/gpio@020a8000
020ac000-020affff : /soc/aips-bus@02000000/gpio@020ac000
020b4000-020b7fff : /soc/aips-bus@02000000/ethernet@020b4000
020bc000-020bffff : /soc/aips-bus@02000000/wdog@020bc000
020c9000-020c9fff : /soc/aips-bus@02000000/usbphy@020c9000
020ca000-020cafff : /soc/aips-bus@02000000/usbphy@020ca000
020e0000-020e3fff : /soc/aips-bus@02000000/iomuxc@020e0000
020ec000-020effff : /soc/aips-bus@02000000/sdma@020ec000
020f0000-020f3fff : /soc/aips-bus@02000000/pwm@020f0000
020f4000-020f7fff : /soc/aips-bus@02000000/pwm@020f4000
020f8000-020fbfff : /soc/aips-bus@02000000/pwm@020f8000
020fc000-020fffff : /soc/aips-bus@02000000/pwm@020fc000
02184000-021841ff : /soc/aips-bus@02100000/usb@0218400002184000-021841ff : /soc/aips-bus@02100000/usb@02184000
02184200-021843ff : /soc/aips-bus@02100000/usb@0218420002184200-021843ff : /soc/aips-bus@02100000/usb@02184200
02184800-021849ff : /soc/aips-bus@02100000/usbmisc@02184800
02188000-0218bfff : /soc/aips-bus@02100000/ethernet@02188000
02190000-02193fff : mmc0
02194000-02197fff : mmc1
0219c000-0219ffff : /soc/aips-bus@02000000/tsc@02040000
021a0000-021a3fff : /soc/aips-bus@02100000/i2c@021a0000
021a4000-021a7fff : /soc/aips-bus@02100000/i2c@021a4000
021b8000-021bbfff : /soc/aips-bus@02100000/weim@021b8000
021e8000-021ebfff : /soc/aips-bus@02100000/serial@021e8000
02290000-0229ffff : /soc/aips-bus@02200000/iomuxc-snvs@02290000
80000000-9fffffff : System RAM80008000-809d0c87 : Kernel code80a38000-80b02353 : Kernel data

发现并没有地址 0,难怪访问出错,那就找一段存在的内存访问,访问 80008000-809d0c87 : Kernel code 好了

dd | hexdump

0x80008000 = 2147516416

root@ATK-IMX6U:~# dd if=/dev/mem bs=1 count=100 skip=2147516416 | hexdump
100+0 records in
100+0 records out
100 bytes copied, 0.001063 s, 94.1 kB/s
0000000 54f6 eb00 9000 e10f 901a e229 001f e319
0000010 901f e3c9 90d3 e389 0004 1a00 9c01 e389
0000020 e00c e28f f009 e16f f30e e12e 006e e160
0000030 f009 e121 9f10 ee10 058e eb00 a005 e1b0
0000040 059e 0a00 3038 e28f 0110 e893 4004 e043
0000050 8004 e088 0072 eb00 0039 eb00 005b eb00
0000060 0009 eb00
0000064

如何验证读到的数据正确呢?该段内存存储的是内核代码,那我们读取内核镜像的前 100 字节对比一下不就行了,

liyongjun@Box:~/project/board/IMX6ULL/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ hexdump -n 100 arch/arm/boot/Image 
0000000 54f6 eb00 9000 e10f 901a e229 001f e319
0000010 901f e3c9 90d3 e389 0004 1a00 9c01 e389
0000020 e00c e28f f009 e16f f30e e12e 006e e160
0000030 f009 e121 9f10 ee10 058e eb00 a005 e1b0
0000040 059e 0a00 3038 e28f 0110 e893 4004 e043
0000050 8004 e088 0072 eb00 0039 eb00 005b eb00
0000060 0009 eb00                              
0000064

可以看到,两者读取结果一模一样,说明我们从内存中读到的数据是正确的。

devmem

root@ATK-IMX6U:~# devmem2 0x80008000
/dev/mem opened.
Memory mapped at address 0x76fa2000.
Read at address  0x80008000 (0x76fa2000): 0xEB0054F6

恍然大明白,原来 devmem 命令就是读取 /dev/mem,命令名称都是取自这里啊!

更多推荐

/dev/mem

本文发布于:2024-02-08 20:41:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674821.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:dev   mem

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!