Raspberry Pi 2B(v1.1)でカメラを試す
NetBSDでRaspberry Piのカメラ使えるのかなーと手元に余ってたRaspberry Pi 2B(v1.1)でちょっと試してみた。
カメラの撮影で使われる raspistill などはpkgsrcの misc/raspberrypi-userland で用意されているようなので、まずはこれをインストールする。microSDのスペックにも依存しそうだが、手持ちの環境でMAKE_JOBS=3
でビルドさせると大体10時間くらいかかる模様。なおswapなしでMAKE_JOBS=5
で走らせるとcmakeのところでメモリ不足になって死ぬので注意。
で、インストールまで行ってもそのままでは raspistill の実行に失敗する。色々調べたところ vcgencmd (これも misc/raspberrypi-userland に含まれている)でカメラの状態を確認できるらしいが、実行してみるとどうもカメラサポートが無効になっているとのこと。
armv7# vcgencmd get_camera supported=0 detected=0
じゃあどうやってカメラサポート有効にするのかとまた色々探し回ったところ、 /boot/config.txt に以下の2行を追加すれば良いらしい。
gpu_mem=128 start_x=1
前者は名前からなんとなくわかるとして、後者のstart_x=1
って何? と調べたら、通常の起動時では start.elf と fixup.dat を参照するところで start_x.elf と fixup_x.dat を参照させるようにするコマンドとのこと。なるほど、ところで/bootにそんなファイルないぞ?
ということで今度はファームのバイナリを探し回って、おそらくコイツのbootの下にあるやつだろうと見当をつける。念のため start.elf などと同じリビジョン(今回は0c01dbefba4
)をチェックアウトして start_x.elf と fixup_x.dat を/boot配下へコピー。リビジョンは src/external/broadcom/rpi-firmware/dist/start.elf のログを参照。
こんな作業が必要なあたり「……もしかして誰もカメラ動かした人いないんじゃね?」みたいな予感がしてくる。とりあえず見なかったことにしてファイルを/bootにコピーし、/boot/config.txt を書き換えたら再起動して再びvcgencmdでカメラ状態をチェック。
armv7# vcgencmd get_camera supported=1 detected=1
無事にサポートOKになったし検出もできてる。では準備も整ったのでいよいよ raspistill を実行。
armv7# raspistill -o hoge.jpg [ 122.1222268] uvm_fault(0x80b30a08, 6c533000, 2) -> e [ 122.1222268] Fatal kernel mode data abort: 'Translation Fault (S)' [ 122.1329515] trapframe: 0xb8e15de0 [ 122.1329515] FSR=00002805, FAR=6c533c80, spsr=00030013 [ 122.1426852] r0 =6c533c80, r1 =00000380, r2 =00000040, r3 =00000010 [ 122.1426852] r4 =80abb480, r5 =6c533c90, r6 =00000370, r7 =3395fc90 [ 122.1571841] r8 =913df940, r9 =00000370, r10=00000002, r11=b8e15e64 [ 122.1633485] r12=0000003f, ssp=b8e15e30, slr=8009a92c, pc =80097290 Stopped in pid 0.206 (system) at netbsd:armv7_dcache_inv_range+0x28: mcr p15, 0, r0, c7, c6, 1 db{0}>