最終更新:2016-09-17 (土) 00:28:19 (2777d)
メモリマップドI/O
メモ
- MMIOの割り当てはBIOSがコンピュータの立ち上げ次に行う
- MMIO領域は通常4GB直下の1GB領域に割り当てられる (メモリホール)
- 32ビットのWindowsでは商売上メモリマッピングを4GBまでしかサーポートしていない
用途
- ビデオRAM
- ネットワークカード
Linuxの関数
request_mem_region
- 複数のドライバやカーネルから同時にI/Oメモリ?アドレスを使用されるとハードウェアが誤動作するかもしれないので使用するアドレス範囲を予約する
ioremap
- ドライバは仮想メモリで動作しているので、物理アドレスにアクセスしようとするとカーネルパニックになる。
- ドライバからMMIO領域にアクセスするには、ioremapを使って物理メモリアドレスをカーネル仮想アドレスにマッピングする必要がある
IOメモリへのアクセス
- ioread8?(void *addr)
- ioread16?(void *addr)
- ioread32?(void *addr)
- iowrite8?(u8 value, void *addr)
- iowrite16?(u16 value, void *addr)
- iowrite32(u32 value, void *addr)