最終更新:2016-09-17 (土) 00:28:19 (2777d)  

メモリマップドI/O

MMIO

メモ

  • 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)

古い関数

関連