Raspberry Pi 4B(Raspbian GNU/Linux 12)でADMP441を使う話

はじめに

ADMP441はI2S接続のマイクであり、適切に接続することにより48kHz 24bitのマイクとして動作する。 Raspberry Piでのドライバーとして、 https://github.com/gtalusan/admp441-rpi にあるドライバーのファイルを使えば動作するはずであるが、私の環境では動かなかった。

その後、いくつかのトライ&エラーにより動作するようになったので、そのTIPSを忘備録とし書くことにする。

今回使用したのは、Raspberry Pi 4B(4GB)及びRaspbian GNU/Linu 12(bookwormのport)であり、 それ以外については検証していないので悪しからず。

OSのバージョンとコンパイル

最初、最新版の「Raspberry Pi OS(64-bit)」(bookwormのport)をダウンロードして使おうとしたが、 先のサイトにか書かれている通り行っても、ドライバのコンパイルが出来なかった。 もちろん、アップデートや"apt install build-essential"などは行っている。

どうも、linux-headerのv8がインストールされていないためのようである。 そこで、「Raspberry Pi OS(32-bit)」をダウンロードして使ってみた。

ここで私の失敗として、32ビット版をダウンロードしたが、 64bit版をに調整した設定ファイルを変更せずに使いまわしたため、 起動後"uname -a"をしたときにaarch64の文字列が入っているtということがあった。

そこで、/boot/firmware/config.txtに、"arm_64bit=0"という行を挿入して再起動すると、 "uname -a"したときに、"aarch64"の代わりに"armv7l"が入るようになった。

最初から普通に32ビット版をインストールし、前の調整を引き継がなければ、大丈夫だと思われる。

32ビット版として起動してあれば、makeしたときに"/lib/modules/6.6.31+rpt-rpi-***/build/"が無いと文句を言われずに、 "admp441.ko"が生成されるようになった。

ALSAからの認識

先ほど作成したadmp441.koをmake installして適切な場所に配置し、 i2s-soundcard.dtboの配置、/etc/modules及び/boot/firmware/config.txtの変更等を ドライバのサイトに書いてある通りに実施しても、 "arecord -l"の結果にADMP441の記述が入らなかった。

そこで、admp441.cの中の48行目付近にある、 「.compatible = "adi,admp441"」という記述を 「.compatible = "invensense,admp441"」に変更したことろ、 コンパイルとインストール、再起動の後、"arecord -l"に、admp441の記述が入るようになった。

おわりに

とりあえず、こちらで動作したものの変更点等を書いたが、 詳しく調べていないため、なぜそうなるのかについては不明である。

ボリューム調整については、検索して書いてある通りに/etc/asound.confの記述を設定し、 arecordとalsamixerを適切な順序で実施することで、なんとなく動作しているように見える。