メモリ空間にアクセスする方法/dev/mem
- アプリケーションから任意のメモリ空間をアクセスする | 組み込みLinuxのArmadilloサイト
- www.lartmaker.nl/lartware/port/devmem2.c
- (%Xのところを%lXにしないとwarning)
- Translating ANSI C to Perl
- Chapter 8: Beyond Processes
- デバイスドライバに頼らないハードウェア操作
- 玄箱ProのPCI Expressに自作拡張機器をつなぐ: なひたふJTAG日記
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 とするとメモリー空間がのぞける?