メモリ空間にアクセスする方法/dev/mem

Linuxでは、/dev/memというスペシャルファイルを経由して、メモリ空間の任意の物理アドレスにアクセスできるからです。

この方法を使うには、まずメモリ空間がどこに割り当てられたかを知る必要があります。そのためには、
cat /proc/iomemと打ちます。

ところが、Linuxのメモリ空間は仮想メモリ空間なので、*(unsigned long *)0xe0010000とやってもアクセスできません。mmapという関数を使ってマップしてやる必要があります。プログラムは次のようになりました。

  • あってるかわからないが書いておく
# cat /proc/iomem
00001000-0009dbff : System RAM
=> 4096-646143

http://www.mech.tohoku-gakuin.ac.jp/rde/contents/linux/drivers/nodriver.html
のプログラムを使って
# ./mem 4096 646143 | hexdump -C | less
とするとメモリー空間がのぞける?