【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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章