RaspberryPi のGPIO
RasPiは普通 Linux で動かすので、GPIOのレジスタを直接アクセスすることはない。
また、CPUはARM Cortex-A53 であり、MMUを持っている。物理アドレスを論理アドレスに変換し、ページングされたメモリ空間がOSからアプリに渡される。
GPIOやタイマ、ADCなどの他のペリフェラルは、それぞれの制御レジスタ・データレジスタを持っている。メモリマップドIOでメモリ空間にマッピングされている。
Broadcom BCM2837 のハードウェアマニュアルに記載があるらしい。
[BCM2837 ARM Peripherals]
https://web.stanford.edu/class/cs140e/docs/BCM2837-ARM-Peripherals.pdf
/dev/mem はルート権限が必要で使いにくいので、RasPi には /dev/gpiomem が追加されている。こちらはルート権限は不要で、ユーザが gpio グループに所属していれば良い。そして、デフォルトの pi ユーザは gpio グループに所属している。
これは、RasPi固有の話で、Linux 全般に通じる話ではない。
疑似ファイルシステム sysfs は、Linux全般に通じる話。/proc 以下が整理がつかずわかりにくくなったため、 /sys が設計・実装されたらしい。知らなかった。(汗
/sys/class/gpio にアクセスすれば良いらしい。
RPi GPIO Code Samples - eLinux.org