・環境
Raspberry Pi 3
Raspbian OS
mpd
Volumioでやろうかとも思ったのですが、エディタすら入ってなかったのであきらめました。
Raspbian OS を GitHub から持ってきて、カーネルを一度ビルドかけておきます。
放熱しないと、時々熱で処理速度が落ちるので、その際は息を吹きかけて、とかやってると1時間ちょっとくらいでビルドが終わります。
ビルドが終わったら、カーネル差し替えて、動くよね、と確認しておきます。
#ここらの手順は、Raspberry Pi のサイトにあります。
・ドライバの組み込み。
bcm2835-i2s と、Rpi-dac およびpcm1794a-hifiの組み合わせで利用。
/boot/config.txt にどいつを組み込むかが書いてあるので、そこに rpi-dac を記述。
参考
rebootかけて、lsmodすると、rpi-dac周りが入ってるはず。入ってなければ rmmod とかで不要なドライバを抜いて、insmod でrpi-dacとかを入れておく。
・ドライバの改造
GPIOでいろいろ情報を渡す(サンプルレートとか)ので、それができるように設定する必要がある。
カーネルビルドを行った環境で、以下を参照。
linux/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
fragment@2 {この _overlay_ の内側に、gpioの識別名-gpio = <&gpio ポート番号 値> ; とかいう形で記述しておくと、後ほどドライバからこの設定を読み込んで、指定のgpioの値の書き換えが可能となる。これが最初どこにあるかさっぱりわからなかった…
target = <&sound>;
__overlay__ {
compatible = "rpi,rpi-dac";
i2s-controller = <&i2s>;
status = "okay";
};
};
ここにgpioの設定を書き込んだ後に、linux/sound/soc/bcm/bcm2835-i2s.cを書き換える。
bcm2835_i2s_probeの中で、devm_gpiod_get を使って、上記の「gpioの識別名」に対応する情報が得られる。この情報を使って、gpiod_set_value_cansleepで値をセットすると、きちんと反映されるようになった。
後はスレーブモードになるように設定値を変えれば、大体終了。
カーネルをビルドしなおして、差し替えをしてrebootすれば、これらの設定が生きるようになるはず。
あとは、mpd入れて、適当なファイルを再生すれば、きちんと鳴ることが確認できました。
gpioの設定を理解するまでが長かった…判りやすく解説している情報がなかったので、clock44 という文字列で、カーネル中をすべて検索してよーやく…
0 件のコメント:
コメントを投稿