beagleboneのbotic kernel
履歴
- 2017.10.05 公開
概要
lightMPDはbeaglebone(以下BBと略す)から始まりましたが、自宅では殆どBBの出番はありません。BBの場合はUSBが非力でUSB接続のDACを使う場合、特にBBである必要性は感じません。BBにはboticとよばれるkernelがあり、このkernelを使うとI2S接続のDACが使えるようになります。
私もnew_western_elecからBB用のDACであるB4-DACが出たときに、lightMPD + botic7-4.8にrtパッチを当てたkernelで
楽しんでいました。
構成は
beaglebone black + B4-DAC(bbとは別電源) + HyCAAヘッドフォンアンプ(new_western_elec製) + audio-technica CKR100
です。ネットワークはapu1(upnpgw)で分離し、NASモードで動作しています。
音はなかなかの物で、今後BBが生き残るとするとbotic7 + i2s接続DACでの使われ方が主流になると思います。
しかし、上記のBBB + B4-DACは現在ではraspi3 + SabreBerry32にとって変わってます。個人的な嗜好としてSabreBerry32の音が好ましく感じられたのとBB + B4-DACではDSDの再生が出来ない為です。(raspi3 + SabreBerry32ではDSD->PCM変換で一応DSDの再生はできます)
PCオーディオではその音を決めるのはDAC部分(DAC+IV+電源)で、そのDAC部分の性能を引き出すのがPC+kernel(playerソフトも含む)の役割だと思います。PC+kernelはケーブルの延長だと考えています。とは言ってもDAC本来の音を知ることはできないのでDACを固定してよりよいPC+kernelを選択するしか方法はありません。
boticのkernelは4.8.13をベースにしており、Raspi3の4.11.xや 4.9.x-xenomai よりは古い物です。boticのkernelをraspi3と同じにしたらどうなるか興味があったのでboticをlinux-4.9.38 + xenomai に対応してみました。
方法としては
- linux-4.8.13 と linux-botic7-4.8.13 の差分をとりpatchを作成する
- そのpatchを linux-4.9.38に適用する
- rejがでたファイルは手で修正する。
で行いました。
その他の手順もありますが、これが最も簡単です。
一部、botic7のパッチが当たりませんでしたが、一応動作する物ができました。
パッチが当たらなかったのは
0013-pm-shutdown-on-power-button-press-or-power-loss.patch
に相当する部分です。
パッチが当たらなかった
- drivers/rtc/rtc-omap.c
- drivers/mfd/tps65217.c
は4.9.38 の物を使っています。
このパッチは、電源切断時のシーケンスを変更する物のようで、これはなくすのはちょっと気持ち悪いのですが、いまのところlightMPDで電源をいきなりOFFしても壊れる事はありません。ちなみに、B4-DACはBB本体とは別な電源で動いています。
linux-4.9.38をベースにして
- normal kernel(low latency)
- preempt rt kernel
- xenomai kernel
の3通りのカーネルをを作ることができます。
この内xenomai版を気に入りましたので、暫くraspi3 + SabereBerry32に置き換える事にしました。私のB4-DACは購入したままの状態で、まだ、追加のコンデンサを実装していません。コンデンサの追加や電源を吟味することによりさらによくなりそうなので楽しみです。
意外だったのが、usb接続でもbotic7はbotic7でないkernelに比べて音がいいのです。USB接続のDACはmojoを使いました。
多分botic7のベースがNelson版(https://github.com/RobertCNelson/linux-dev)の為と思われます。lightMPDではbotic7はサポートしませんが、次バージョンではこのNelson版をベースにしていきたいと思います。(検討中)
ただし、正式にリリースするときはboticは外す事になります。
自家用なので、公開はするつもりなかったのですが、音はなかなかすばらしと思うのでパッチを公開する事にしました。また、評価用という位置づけでlightMPD用のバイナリーも公開する事にしました。
[注意]
バイナリーおよびパッチを適用したために起こった不具合(ハードが壊れる、異常動作よりこれに接続したオーディオ機器に問題が生
じる等)については責任をとれませんので、自己責任でお願いします。
テストは
- beaglebone black
- B4-DAC(new_western_elec製)
で行いました。
これ以外の機器での動作は確認できていません。
パッチ
パッチを試す方は、このパッチは不完全なものである事を理解して下さい。
ダウンロード
コンパイル方法
1. normal kernel
linux-4.8.38を展開したディレクトリで4.9.38-botic7-v3.patchを当てて下さい。
.gitignoreでエラーになりますが、retキーで先に進めて下さい。
# make menuconfig
# make
2. normal kernel
1でbotic7のパッチをあてた状態で patch-4.9.47-rt37.patch をあてて下さい。
rejがでますが、menuconfigで
kernel hacking -> Tracers のチェックをはずせば問題ありません。
# make menuconfig
# make
3. xenomai
1と同様にbotic7のパッチをあてます
xenomaiのサイト(http://xenomai.org/)から xenomai-3.0.5.tar.bz2とipipe-core-4.9.38-arm-2.patchをダウンロードします。
xenomai-3.0.5.tar.bz2をlinux-4.9.38を展開したディレクトリに展開します。ipipe-core-4.9.38-arm-2.patchは任意の場所で
構いませんが、以下の様に配置されている事を前提に説明します。
<...>----linux-4.9.38
xenomai-3.0.5
ipipe-core-4.9.38-arm-2.patch
# cd linux-4.9.38
# ../xenomai-3.0.5/scritps/prepare-kernel.sh --arch=arm --ipipe=../ipipe-core-4.9.38-arm-2.patch
# make menuconfig
# make
4. dtb
dtbはnormal,preempt-rt,xenomaiで共通に使えます。
# cp arch/arm/boot/dts/am335x-bone*.dtb <target_dir>
で所望のディレクトリ(<target_dri>)にコピーして下さい。
lightMPDの場合は
# cp arch/arm/boot/dts/am335x-bone*.dtb /mnt/boot/dtbs/
としてください。(/mntはlightMPDをインストールしたSDメモリのマウントポイント)
configについて
バイナリ版のkernelにはconfig.gzが含まれているので、kernelをbuildする時に参考にして下さい。
バイナリ版
このバイナリーはあくまでも評価用です。正式サポートではありませんので、これについての問い合わせは控えて下さい。また、先に説明したように一部のパッチがあたってません。
ダウンロード
インストール方法
1. lightMPD-botic7-4.9.38.zipをダウンロード
2. 上記アーカイブをlightMPDをインストールしたSDメモリに解凍して下さい。
アーカイブの内容は下記のようになっています。
<boot> ----+------zImage
|
+------zImage-lowlatency
|
+------zImage-rt
|
+------zImage-xenomai
|
+------<dtbs>-----
3. 使用するkernelの選択
使いたいバージョンのzImage-xxをzImageにコピーして下さい。インストール直後のzImageはzImage-xenomaiです。
4. uEnv.txtの修正
uEnv.txtを以下のように修正する。
- fdtfile=am335x-boneblack-botic.dtbを追加、追加位置はoptargsの前。
- optargsの行をoptargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=I---に変更。
上記の設定はB4-DACの設定になります。B4-DAC以外のDACを使う場合はそのボードに合わせて設定して下さい。
簡単に説明すると
ext_masterclkはクロックの指定で3は44.1,48.0のクロックが外部にあることを指定します。外部にクロックのないボードを使う場合は変更する必要があります。
serconfigは出力の形式を指定します。botic7では8CHの出力が可能で、一文字で2CH毎の出力形式を指定します。B4-DACでは先頭の2CHにDACが繋がっているので先頭以外は'I---'を指定します。IはPCM(I2S)で出力する事を指定します。
optargsのパラメータは詳しくは http://bbb.ieero.com/ を参照して下さい。
おまけ
日本ではほとんど話題になりませんでしたが、beaglebone blueというのが出てたのですね。