2007年12月21日金曜日

NetBSDでGPIOを使う(for ALIX) (1)

PC EnginesのALIXを使いこなすためにNetBSD kernelを触っている。ALIXのハードウェア的には実装されているけれどNetBSD-current (4.99.42: 2007/12/20)ではまだ扱えない機能がいくつかあってとりあえずそいつらを見えるようにしよう、とこの2日間ほど作業をしてみた。

まだ扱えない機能でサポートしたいなあ、と強く思ったのは、とりあえず
  • GPIO
  • Watchdog timer
  • I2C bus
の3つだ。カーネルからGPIOが使えたら外付けの回路を触る場合に大変便利だし、watchdogタイマーは組込用途のシステムでは便利だ。I2Cは普通のI2Cセンサーをつなげたり、PSOCなどのマイコンと協調して動くシステムを作る際にきっと役に立つだろう。

カーネルを触るときにはまず先人達の知恵を検索してみるところから始まる。OpenBSDのグループはAMD Geode/LXシリーズに愛があるので、とりあえずその辺で動いているものが無いかと探してみると案の定src/sys/arch/i386/glxpcib.cというファイルがあるのを発見した。中身をざっとみると、ALIXで使われているAMD CS5536のPCI-ISA host bridgeのドライバで、GPIOとWatchdog timerをサポートするコードがはいっている。OpenBSDとNetBSDは比較的カーネルのコンパチビリティが高い(部分が多い)ので、とりあえずこのコードをベースに作業を進めることにした。I2Cはそれらが動いてからでいいだろう。

具体的な作業は次のエントリーで。


0 件のコメント: