【45】busybox devmem 访问所有地址(内存+MMIO)

busybox 访问amd_iommu的BAR的0地址,可以获取device table的地址,device table的地址是内存中预留的,这个地址devmem是没有权限访问的
在这里插入图片描述
查看CONFIG_STRICT_DEVMEM为,限制用户态通过dev/mem访问所有内存
在这里插入图片描述
可以看到demem访问时被限制的,需要重新编译内核打开限制
make menuconfig,然后输入/ 搜索STRICT_DEVMEM,可以看到在kernel hacking有对应配置
在这里插入图片描述
进入 kernel hacking把
[ ] Filter access to /dev/mem
[ ] Filter I/O access to /dev/mem (NEW)
前面的*点掉(上下键选中,然后敲空格)
在这里插入图片描述
vim .config查看CONFIG_STRICT_DEVMEM是没有set的,剩下的就是编译内核了
编译内核的方式
在这里插入图片描述
起来后访问内存还是不行,但是提示从没有权限变成了invalid argument
在这里插入图片描述
对应这个问题linux/lib/Kconfig.debug有说明
在这里插入图片描述
我们需要在配置kernel时,关闭CONFIG_X86_PAT=n,同时开启CONFIG_EXPERT
或者直接在cmdline加上nopat的配置 [X86] Disable PAT (page attribute table extension of pagetables) support.
在这里插入图片描述
重启系统后,可以正常访问内存的地址了
在这里插入图片描述
我们可以看到devmem读取的和直接hexdump /dev/mem是一样的,只是大小端显示不同。
在这里插入图片描述

参考
https://lwn.net/Articles/267427/
http://blog.sina.com.cn/s/blog_6f5b220601012xbc.html
https://blog.csdn.net/anzhuangguai/article/details/54316206

发布了35 篇原创文章 · 获赞 9 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章