BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版の設定方法


BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版を使ったインタネット分離接続の方法について解説します。
インタネット分離接続は音が良くなる接続方法です。BB二台をタンデム方式(タンデムの意味をご存じない方はここをご覧ください)で対向接続し、動作させるものです。この時、二回線を使い、対向接続するため、様々な接続方法が可能です。またタンデム方式のフロント側にインタネット、バックエンド側にDACを繋ぐことになりますが、この繋ぎ方もいろいろな方法をとることができます。

Tandem Connection

         Backend(player)                  Front(adaptor)
        +----------------------+         +----------------+
        |  mpd(upnp mode)      +--line1--+ upmpdcli       |
DAC <===|                      |         |                |--line0--+ Internet
        | polipo(cache server) +--line2--+ polipo         |             dlna control point
        +----------------------+         +----------------+             dlna server

本題に入る前にちょっと雑談。

上記のようなタンデム構成はlightMPD upnpgw版で提案され、実現されました。
digififanさんがこのような提案をされた背景にはインタネット回線での無駄なパケットのやりとりによる音質の悪化があります。この指摘は随分古く、ここにあります。2014年6月の論文です。当時、インタネットに繋ぐと音が悪くなるという現象はあっちこっちで言われていましたが、その理屈を明快に解説したのはこの指摘が初めてだったと思います。リンク先のページを初めて読んだ時は鮮やかな分析に感心しました。
digififanさんがこの問題に対策として考案され、昨年公開されたのがlightMPD upnpgw版です。最初の分析から2年かかったということになります。この対策で興味深いのはdlnaネットワークとapu2台によるタンデム方式の採用です。実はupnpgw版の一年前にヨーロッパ製ですが Jplay というソフトがWindowsの世界で同じような対応をして大幅な音質アップを実現しています。
僕は最初Jplayを使っていたのですが、Jplayはマイクロソフトの秘密主義とintelマシン二台を必要とする構成に限界があると感じてて、lightMPD upnpgw版を発見した時、Jplayとはサヨナラしました。その後、Jplayの二台構成(こちらはデュアル構成と呼んでいるようですが、コンピュータ用語としてはタンデムが正しいと思います)が結構メイジャーになりつつあるようですね。まあ、LinuxとWindows、どちらが初心者にやさしいかといったら、Windowsですから、lightMPD upnp版は難しすぎるという方はさっさとWindows/Jplayの世界に転向されることをお勧めします。なんといってもこちらの方がグローバル。多数派ですから。
あと、「ネットワークオーディオをネットワークへ接続してはいけない」という過激なタイトルのこのサイトの記事もなかなか面白いです。対策の一部はちょっとオカルト気味だとも思いますが、指摘そのものは正しいように見えます。
さて、二台構成のJplayとlightMPDの最大の違いは対向接続の回線数です。Jplayは一回線のシンプルな方式であるのに対し、lightMPDは二回線使い、dlnaを通るコントロール情報と音楽データ情報を回線を分けて送受信出来るという点です。lightMPDがこの二回線方式をとった理由はapuというハードを前提に開発されたためだと思います。apuはネッワーク機器の素材として使われるため、lan回線を3つ使えるハード構成となっています。これを利用して、lightMPDはデータ情報とコントロール情報の分離を可能としています。しかし、この三回線使うという方式はタンデム方式の二台構成に対向接続の二回線を繋ぐことになります。それでなくても複雑な構成がますます複雑になることになります。apu二台であれば、三回線全てハード標準のものを使えますので、まだ話は単純なのですが、BBを対向接続する場合は標準のeth以外の二回線をusbを使って捻出することになります。これが話をますます複雑にすることになるんですね。

という次第で本題に戻ります。以降は難問があれば、一番難しいやつから解くのが主義という方のために、解説します。BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版を使って、どう設定するか。音質面では最高峰となるBB二台を使った構成にチャレンジしてみましょう。

ここでまた脱線します。「音質面では最高峰となるBB二台を使った構成」と書きましたが、これはi2s接続に限定した話です。usb接続の場合はBB二台よりapu二台の方が音質面では上です。これはハード性能の差に起因すると思います。BB二台の構成はDACとusb接続の場合の安定度では問題ありです。これはBB二台でタンデム構成をとるためには、DACとやりとりするためのusb接続とusb-lan変換やusb-otgのusb接続がバッティングして、音質面で悪影響を与えるためだと思います。DACとi2s接続の場合はgpio経由となるので、usbとは無関係となりますから、この悪影響を発生させないようです。僕がBoticizedにこだわってUPnP版を公開している理由はこれです。
さてこれで雑談は封印して、本題に戻ります。

ハード構成

BB二台のタンデム構成をBBB(BeagleBone Black)とBBG(BeagleBone Green)でどう構成するかですが、特に制約はありません。
この点に関して過去のこのサイトの記事や掲示板での書き込みでBBBに関して誤った書き込みをしていたので訂正します。「BBBはusb-otgの子機能に対応していないので、三回線必要なadapterにすることが出来ない」と書き込んだのですが、誤りでした。BBBは mini b タイプのusb端子を使い、usb-otgの子機能に対応していますので、これを使って、adapter になることができます。BBGは micro b 端子、BBBはmini b 端子と端子のタイプが異なるので、間違えましたが、機能は同じです。
というわけで、BBB/BBG二台あれば、特に制約なく対向接続二回線のタンデム構成をとることが出来ます。

ネットワーク構成

BBB/BBGが使えるネットワーク回線機能は以下の三つです。

  • eth0 標準のイーサネット端子
  • eth1 標準のUSB端子に接続されたusb-lan変換アダプタ
  • usb0 usb-otg回線

これを組み合わせて図「Tandem Connection」にある line0、line1、line2 にどれを使うか決めることになります。この時、usb0 usb-otg回線は対向接続のline1/line2 として使うことになります(line0用には使えません)。

eth1 のusb-lan変換アダプタにはカーネルがサポートしているチップを使って下さい。サポートされているかどうかの確認はconfigでチェックすることができます。

zcat /proc/config.gz > /mnt/config-bb-h
nano /mnt/config-bb-h

cctrl+w でキーワード「CONFIG_USB_NET_DRIVERS」で検索

CONFIG_USB_NET_DRIVERS=y
# CONFIG_USB_CATC is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_PEGASUS is not set
CONFIG_USB_RTL8150=y
CONFIG_USB_RTL8152=y
CONFIG_USB_LAN78XX=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y

となります。僕が使っているアダプタはamazonアフィリエートリンクを参照して下さい。

ネットワーク構成として以下の4パターンが可能です。

Tandem Connection 1 (eth0=Internet polipo=usb)
~~~~~~~~~~~~~~~~~~~~
         player(BBB/BBG)          adaptor(BBB/BBG)
        +--------------+         +------------------+
        |  mpd    eth0 +--line1--+eth1  upmpdcli    |
DAC <===|              |         |              eth0+--line0--+ Internet
        | polipo  usb0P+--line2--+usb0C  polipo     |             dlna control point
        +--------------+         +------------------+             dlna server


Tandem Connection 2 (eth0=Internet polipo=eth)
~~~~~~~~~~~~~~~~~~~~
         player(BBB/BBG)          adaptor(BBB/BBG)
        +--------------+         +------------------+
        | polipo  eth0 +--line1--+eth1   polipo     |
DAC <===|              |         |              eth0+--line0--+ Internet
        |  mpd    usb0P+--line2--+usb0C upmpdcli    |             dlna control point
        +--------------+         +------------------+             dlna server


Tandem Connection 3 (eth0=counter polipo=usb)
~~~~~~~~~~~~~~~~~~~~
         player(BBB/BBG)          adaptor(BBB/BBG)
        +--------------+         +------------------+
        |  mpd    eth0 +--line1--+eth0  upmpdcli    |
DAC <===|              |         |              eth1+--line0--+ Internet
        | polipo  usb0P+--line2--+usb0C  polipo     |             dlna control point
        +--------------+         +------------------+             dlna server


Tandem Connection 4 (eth0=counter polipo=eth)
~~~~~~~~~~~~~~~~~~~~
         player(BBB/BBG)          adaptor(BBB/BBG)
        +--------------+         +------------------+
        | polipo  eth0 +--line1--+eth0   polipo     |
DAC <===|              |         |              eth1+--line0--+ Internet
        |  mpd    usb0P+--line2--+usb0C upmpdcli    |             dlna control point
        +--------------+         +------------------+             dlna server


Connection 1/2 はadapter側のインタネットに出る線をeth0とする方式、Connection 3/4 はadapter側のインタネットに出る線をeth1とする方式 となります。eth0とeth1の違いは性能で、eth0がeth1の倍以上の性能差があります。
1/2と3/4の違いは図の通りで、polipo用の回線をeth側にするかusb-otg側にするかです。eth0、eth1、usb0の性能は

eth0 > usb-otg > eth1

となります。
音質と安定度でどれか一つに固定することが出来ればいいのですが、残念ながら結果は環境により様々という感じなので、この四つのパターンの設定方法を紹介し、環境に合わせて使って頂くしかなさそうです。

設定方法

具体的な設定方法の解説に入る前に Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版の内容を説明します。lightMPD UPnP-Adapter版はBoticized lightMPD UPnP版からmpdを削除し、アダプターとしての動作をするよう設定したものです。lightMPD の upnpgw版も同じような作り方がされているのではないかと思います。タンデム構成のフロント側はupmpdcliとpolipoのみで動くようにし、バックエンド(player)側にmpdとpolipo機能を分離させることによりインタネット分離させるという方法です。lightMPDとBoticized lightMPDの違いはこの設定方法です。lightMPDは全てlightmpd.confで行うというスマートな方法をとっていますが、Boticized lightMPD UPnPとlightMPD UPnP-Adapterでは
Boticized lightMPD UPnP(player側)

  • lightmpd.conf(line1の設定)
  • myscipt.sh(line2の設定)
  • polipo.conf(polipoの設定)

lightMPD UPnP-Adapter(adapter側)

  • lightmpd.conf(line0の設定)
  • myscipt.sh(line1、line2の設定)
  • polipo-adapter.conf(polipoの設定)
  • upmpdcli-adapter.conf(upmpdcliの設定)

となっています。lightmpdのupnpgw用のgoshe初期設定プログラムを移植するという手をとればlightmpdと同じに出来るとは分かっているのですが、面倒なので、自力で設定する方法をとっています。 上記の設定方法の方が、シェルスクリプトと設定ファイルそのものの変更になるので、linuxを知っている人には分かりやすいと思います。

それでは、それぞれの設定方法について解説します。

line0の設定 /mnt/lightmpd/lightmpd.conf

adapter側のインタネット回線に何を使うか指定します。adapter側のlightmpd.confの[network]で指定します。

### for standalne from here^M

から

### to here^M

までの行が
までの行が有効になっているはずですので、そこで設定します。設定する行は

        interface=eth0^M
        address=192.168.0.20^M

の二行です(内容は標準(eth0=Internet)接続の場合)。 標準(eth0=Internet)接続であれば、interface=eth0を
対向(eth0=counter)接続であれば、interface=eth1を
設定すればいいです。「address=」は環境に合わせて適当に設定して下さい。

line1、line2の設定 /mnt/scripts/myscript.sh と /mnt/lightmpd/lightmpd.conf

対向回線に何を使うか指定します。adapter側はmyscript.shのネットワークの開設処理で設定します。player側はlightmpd.confの[network]とmyscript.shのネットワークの開設処理で設定します。この設定はusb-otg対応させる前に設計したのですが、usb-otg対応させる時にそのままとしたのは失敗でしたね。以下、その内容を理由します。

adapter側のmyscript.shはディフォルトで以下の通りとなっています。

ETH=eth1
IPADD=10.0.0.1
NETMASK=255.255.255.252

### To activate second line for player mode, comment in from here
                ifconfig $ETH up
                ifconfig $ETH $IPADD
                ifconfig $ETH netmask $NETMASK
### to here

# s-otg to activate usb-otg line for single line player, comment in from here
#               ifconfig usb0 up
#               ifconfig usb0 $IPADD
#               ifconfig usb0 netmask $NETMASK
# to here and comment out lightmpd.conf network

# d-otg to activate usb-otg line for double lines player, comment in from here
                ifconfig usb0 up
                ifconfig usb0 10.0.1.1
                ifconfig usb0 netmask $NETMASK
# to here and comment out $ETH 3 lines above

実は、これ、典型的温泉旅館型の設計でした。最後のusb0の設定部分はusb-otg機能を追加した時、ここに機能追加するのが一番簡単なので、付け焼き刃で追加したのですよね。結果としてどこにボロがでたか。ディフォルトのplayer側の設定を見ると分かります。

ETH=eth1
IPADD=10.0.1.2
NETMASK=255.255.255.252

### To activate second line for player mode, comment in from here
                ifconfig $ETH up
                ifconfig $ETH $IPADD
                ifconfig $ETH netmask $NETMASK
### to here

# s-otg to activate usb-otg line for single line player, comment in from here
#               ifconfig usb0 up
#               ifconfig usb0 10.0.0.2
#               ifconfig usb0 netmask $NETMASK
# to here and comment out lightmpd.conf network

# d-otg to activate usb-otg line for double lines player, comment in from here
                ifconfig usb0 up
                ifconfig usb0 $IPADD
                ifconfig usb0 netmask $NETMASK
# to here and comment out $ETH 3 lines above

バグですね。同じアドレスでethとusbを設定しているのだから。usb-otg回線が使われることになるので、結果オーライではあるのですが、まずいです。
adapter側は以下の通り修正すべきでしょうね。

LINE1=eth1
IPADD=10.0.0.1
NETMASK=255.255.255.252

LINE2=usb0
IPADD=10.0.1.1
NETMASK=255.255.255.252

### To activate second line1 for player mode, comment in from here
                ifconfig $LINE1 up
                ifconfig $LINE1 $IPADD
                ifconfig $LINE1 netmask $NETMASK
### to here
### To activate second line2 for player mode, comment in from here
                ifconfig $LINE2 up
                ifconfig $LINE2 $IPADD
                ifconfig $LINE2 netmask $NETMASK
### to here

player側はline1は/mnt/lightmpd/lightmpd.confで設定されますので、myconfig.shはline2側だけ有効にします。

#LINE1=eth1
#IPADD=10.0.0.2
#NETMASK=255.255.255.252

LINE2=usb0
IPADD=10.0.1.2
NETMASK=255.255.255.252

### To activate second line1 for player mode, comment in from here
#                ifconfig $LINE1 up
#                ifconfig $LINE1 $IPADD
#                ifconfig $LINE1 netmask $NETMASK
### to here
### To activate second line2 for player mode, comment in from here
                ifconfig $LINE2 up
                ifconfig $LINE2 $IPADD
                ifconfig $LINE2 netmask $NETMASK
### to here

しかし、これも折衷案で本来はmyconfig.shを使ってadapter、player共同じ設定にするべきでしょうね。upnpset.shと関連するスクリプトの変更になりそうなので、パスしますが、失敗でした。

polipoの設定 /mnt/lightmpd/polipo-adapter.conf

コメント通りです。

adapter側

### for single line player from here
#       proxyAddress = 0.0.0.0
#       allowedClients = 10.0.0.2
### to here

### for double line player from here
        proxyAddress = 0.0.0.0
        allowedClients = 10.0.1.2
### to here

allowedClientsに対向する相手側のipアドレスを指定します。
従って、polipo=ethにするには、eth側のアドレス(10.0.0.2)にすればいいです。
player側

### for standalone from here
#proxyAddress=0.0.0.0
#       proxyAddress=127.0.0.1
#       allowedClients=127.0.0.1
### to here

### for single line player from here
#       proxyAddress = 127.0.0.1
#       allowedClients = 127.0.0.1
#               parentProxy = 10.0.0.1:8123
### to here

### for double line player from here
        proxyAddress = 127.0.0.1
        allowedClients = 127.0.0.1
                parentProxy = 10.0.1.1:8123
### to here

parentProxyに対向する相手側のipアドレスを指定します。
従って、polipo=ethにするには、eth側のアドレス(10.0.0.1:8123)にすればいいです。

upmpdcliの設定 /mnt/lightmpd/upmpdcli-adapter.conf

adapter側のみですね。

#enable=yes
upnpiface = eth0
mpdhost=10.0.0.2
mpdport=6600

upnpifaceでインタネット側の回線を、mpdhostでplayer側のipアドレスを指定すればいいです。
ディフォルトは上記の通りです。polipo=eth時は以下の通りとなります。

#enable=yes
upnpiface = eth1
mpdhost=10.0.1.2
mpdport=6600


uEnv.txtの設定 /mnt/uEnv.txt

これは修正の必要はありません。

(adapter)
kernel_file=/boot/zImage-botic-103-v03-d
initrd_file=/boot/uInitrd-br-upnp-adapter
fdtfile=am335x-boneblack-botic-103-v02.dtb
console=ttyO0,115200n8


(player)
kernel_file=/boot/zImage-botic-103-v03-h
#initrd_file=/boot/uInitrd-br-upnp-stand
#initrd_file=/boot/uInitrd-br-upnp-stand-arch
initrd_file=/boot/uInitrd-br-upnp-player
#initrd_file=/boot/uInitrd-br-upnp-player-arch

となっているはずです。

(PC_Audio)   2017/06/11

コメントする

BB用 Boticized lightMPD UPnP版とlightMPD UPnP-Adapter版を改版しました


boticized-lightmpd-upnp-v3.zip と lightmpd-upnp-adapter-v3.zip を公開します。v2に対する改版内容は以下の通りです。

  • digififan さんが公開された buildroot の polipoビルドデータの修正(buildroot-polipo-v2-3.tgz)を適用しました。
  • inthedark さんが提案された usb-otg 回線を使い、BBG-BBB 構成で double lines plyer を可能にしました。

というわけで、人頼みの改版でありますが、音質の面での効果は絶大です。v2 と比較して音質は大幅にアップしていると思います。特に BB を二台使ったインタネット分離構成での効果は大きいです。

digififan さんの polipo の改修は大規模データでの再生中断障害に対するものです。詳細についてはリンク先のdigififanさんの紹介記事を参照して下さい(全部で3つのスレッドがあります)。この修正は再生中断に対する対応だけでなく、polipoを使った再生能力を向上させ、結果として、大幅な音質アップに貢献していると思います。

inthedark さんの usb-otg 回線提案は、apuのみで可能だった double lines plyer をBBG-BBB 構成で可能にするものです。インタネットから切り離された対向接続の2本の回線をそれぞれ upmpdcli/polipo専用に使い、音質向上を狙う方式です。BBG-BBB 構成で usb-otg 回線を使うことにより、回線性能の向上も図れますので、大変効果的だと思います。詳しい情報は上記リンク先(このサイトの掲示板)にあります。

今回の開発については digififan さんと inthedark さんに頼りっばなしで、素晴らしい成果を得ることが出来ました。改めお二人に感謝します。

Boticized lightMPD UPnP v3 のダウンロード

lightMPD UPnP-Adapter v3 のダウンロード

それぞれのアーカイブの内容は以下の通りです。

Boticized lightMPD UPnP版

  adding: MLO (deflated 43%)
  adding: u-boot.img (deflated 51%)
  adding: uEnv.txt (deflated 59%)
  adding: lightmpd/upmpdcli.conf (deflated 26%)
  adding: lightmpd/minidlna.conf (deflated 55%)
  adding: lightmpd/polipo.conf (deflated 61%)
  adding: lightmpd/lightmpd.conf (deflated 72%)
  adding: lightmpd/mpd.conf (deflated 68%)
  adding: lightmpd/mpd-0.19.21rt-arch-dsd (deflated 58%)
  adding: lightmpd/mpd-0.20.2rt-arch (deflated 60%)
  adding: lightmpd/mpd-br-01921 (deflated 38%)
  adding: lightmpd/mpd-br-02004 (deflated 40%)
  adding: boot/zImage-botic-103-v03-h (deflated 1%)
  adding: boot/zImage-botic-103-v03-d (deflated 1%)
  adding: boot/dtbs/am335x-boneblack-botic-103-v02.dtb (deflated 77%)
  adding: boot/dtbs/am335x-boneblack-botic-sabre32-103-v02.dtb (deflated 77%)
  adding: boot/uInitrd-br-upnp-stand (deflated 1%)
  adding: boot/uInitrd-br-upnp-stand-arch (deflated 1%)
  adding: boot/uInitrd-br-upnp-player (deflated 1%)
  adding: boot/uInitrd-br-upnp-player-arch (deflated 1%)
  adding: scripts/myscript.sh (deflated 72%)
  adding: scripts/upnpset.sh (deflated 86%)
  adding: scripts/myscript-play.scr (deflated 41%)
  adding: scripts/myscript-stand.scr (deflated 45%)
  adding: scripts/myscript-splayo.scr (deflated 39%)
  adding: scripts/myscript-dplayo.scr (deflated 39%)
  adding: scripts/lightmpd-play.scr (deflated 30%)
  adding: scripts/lightmpd-playo.scr (deflated 35%)
  adding: scripts/lightmpd-stand.scr (deflated 30%)
  adding: scripts/uEnv.scr (deflated 32%)
  adding: scripts/uEnv-arch.scr (deflated 46%)
  adding: scripts/mpdset.sh (deflated 74%)
  adding: scripts/polipo-stand.scr (deflated 49%)
  adding: scripts/polipo-splay.scr (deflated 46%)
  adding: scripts/polipo-dplay.scr (deflated 48%)
  adding: icon/miero.png (stored 0%)
  adding: music/GlennGould/001_Italian-Concerto_BWV971_I.Allegro.flac (deflated 0%)
以下略

lightMPD UPnP-Adapter版

  adding: MLO (deflated 43%)
  adding: u-boot.img (deflated 51%)
  adding: uEnv.txt (deflated 55%)
  adding: lightmpd/lightmpd.conf (deflated 71%)
  adding: lightmpd/polipo-adapter.conf (deflated 47%)
  adding: lightmpd/upmpdcli-adapter.conf (deflated 27%)
  adding: lightmpd/minidlna.conf (deflated 55%)
  adding: boot/zImage-botic-103-v03-d (deflated 1%)
  adding: boot/zImage-botic-103-v03-h (deflated 1%)
  adding: boot/uInitrd-br-upnp-adapter (deflated 1%)
  adding: boot/dtbs/am335x-boneblack-botic-103-v02.dtb (deflated 77%)
  adding: boot/dtbs/am335x-boneblack-botic-sabre32-103-v02.dtb (deflated 77%)
  adding: scripts/myscript-dplayo.scr (deflated 39%)
  adding: scripts/polipo-splay.scr (deflated 34%)
  adding: scripts/myscript-splayo.scr (deflated 39%)
  adding: scripts/polipo-dplay.scr (deflated 34%)
  adding: scripts/upnpset.sh (deflated 70%)
  adding: scripts/myscript.sh (deflated 72%)
  adding: music/GlennGould/001_Italian-Concerto_BWV971_I.Allegro.flac (deflated 0%)
以下略


今までの版と異なり、アーカイブはMLO、u-boot.img、を含みますので、ブートフラグオンのフォーマット済のSDに、このまま解凍すれば、インストールできます。linux環境でのインストール操作例は以下の通りです。

sudo fdisk /dev/sdb1
o -> n -> (defaults) -> t -> c -> a -> w
sudo mkfs.vfat -v -F 32 /dev/sdb1
sudo mount /dev/sdb1 /mnt
cd /mnt
sudo wget -O boticized-lightmpd.zip http://mimizukobo.sakura.ne.jp/cgi-bin/downlog.cgi?upload/boticized-lightmpd.zip
sudo unzip boticized-lightmpd.zip
sudo umount /mnt


usb-otg回線を使った時の設定ですが、/mnt/scripts/myconfig.sh /mnt/lightmpd/polipo.conf /mnt/lightmpd/polipo-adapter.conf にコメントしてあります。
ディフォルトの設定は以下の構成を前提としています。

Double lines player mode
~~~~~~~~~~~~~~~~~~~~~~~~
BBB(lightMPD UPnP-Adapter v3)             BBG(Boticized lightmpd UPnP v3)
 +----------------------+ eth1   eth1(usb) +--------------------+ eth0(192.168.x.y)
 |  mpd(upnp mode)      +------------------+ upmpdcli    <------|----> dlna control point
 |    myscript.sh       |10.0.0.2  10.0.0.1|   myscript.sh      |          (UPnPlay LUMIN etc)
 |    lightmpd.conf     |  USB-LAN adapter |   lightmpd         |
 |    polipo.conf       |                  |   polipo           |
 |                      | usb0        usb0 |      -adapter.conf |
 | polipo(cache server) +------------------+ polipo      <------|---> dlna server
 +----------------------+10.0.1.2  10.0.1.1+--------------------+          (MinimServer Minidlna etc)

* Single line player mode の場合はusb0だけになります。


upnpset.sh は上記のusb-otg構成に対応させてありますので、これを使って設定して下さい。

adapter側
~~~~~~~~
# /mnt/scripts/upnpset.sh
Welcome to Boticized lightMPD
Usage: /mnt/scripts/upnpset.sh {s|d}

player側
~~~~~~~~
# /mnt/scripts/upnpset.sh
Welcome to Boticized lightMPD
Usage: /mnt/scripts/upnpset.sh {stand|splayl|dplayl|splayo|dplayo}

splayl|dplayl は従来のapu接続のためのものです(splay|dplayをotg接続と区別するためにsplayl|dplaylに変更しました)。
usb-otg構成での使い方は以下の通りです。

otg single line adapter
~~~~~~~~~~~~~~~~~~~~~~~
# /mnt/scripts/upnpset.sh s
Welcome to Boticized lightMPD
polipo-adapter.conf myscript.sh modified

otg single line player
~~~~~~~~~~~~~~~~~~~~~~
# /mnt/scripts/upnpset.sh splayo
Welcome to Boticized lightMPD
lightmpd.conf polipo.conf myscript.sh uEnv.txt modified

otg double lines adapter
~~~~~~~~~~~~~~~~~~~~~~
# /mnt/scripts/upnpset.sh d
Welcome to Boticized lightMPD
polipo-adapter.conf myscript.sh modified

otg double lines player
~~~~~~~~~~~~~~~~~~~~~~
# /mnt/scripts/upnpset.sh dplayo
Welcome to Boticized lightMPD
lightmpd.conf polipo.conf myscript.sh uEnv.txt modified

アーカイブを解凍した初期状態で、lightMPD UPnP-Adapter 版はs(ingle)が、Boticized lightMPD UPnP 版はstand(alone)が設定されています。従って、BBG(adapter)-BBB/G(player) を使ってインタネット分離接続する場合は BBB/G(player) 側を対向接続させる前にインタネットに繋いで、

/mnt/scripts/upnpset.sh dplayo

を実行して下さい。
usb-otgに関するディフォルトの設定は BBG(adapter)-BBB(player) で BBB(player) がホストとなる接続に対応するものです。BBG(adapter)-BBG(player) であれば、uEnv.txt の kernel_file= を入れ換えることで、BBG(adapter) をホストにすることも可能です(ハードの制限で single line player での動作となりますが)。
詳しくはそのうちこちらに書き込みするつもりです。

トラブル報告については、みみず工房掲示板のこのスレッドで受け付けます。よろしくお願いします。

このソフトは無保証です。自由にご利用いただいて結構ですが、内容については、digififanさんも、mieroさんも、僕も一切の責任はもたないという条件でご利用ください。

p.s. テストにはここここのサイズの大きいハイレソデータを使いました。前者はja7jtzさんが公開されている生録のハイレソデータです。第9の第4楽章などはこういう確認には最適です。後者はさまざまのフォーマットのハイレソデータがあり重宝しました。
また、掲示板でさまざまの方から動作確認のメッセージを頂戴しました。ありがとうございました。

(PC_Audio)   2017/05/13

コメントする

I2Sの世界(7)


前回に続き、arch linuxのbotic化の方法を解説します。

まず初めに

yo@ubuntu:~$ cd linux-dev-botic7-v48/
yo@ubuntu:~/linux-dev-botic7-v48$ ls deploy/
4.8.13-botic7-rc3-dtbs.tar.gz          4.8.13-rt6-botic7-rc3-modules.tar.gz
4.8.13-botic7-rc3-firmware.tar.gz      4.8.13-rt6-botic7-rc3.zImage
4.8.13-botic7-rc3-modules.tar.gz       config-4.8.13-botic7-rc3
4.8.13-botic7-rc3.zImage               config-4.8.13-rt6-botic7-rc3
4.8.13-rt6-botic7-rc3-dtbs.tar.gz      disk
4.8.13-rt6-botic7-rc3-firmware.tar.gz

これは僕の開発環境で linux-dev-botic7-v48/deploy/ ディレクトリの内容です。前回、解説したmieroさんのgithubのzipファイルを使った方法でカーネルをビルドした結果です。
このディレクトリにビルドしたdtbs、firmware、modules、zImageが残されます。rt版とnone-rt版の結果が保存されています。diskというのはディレクトリで、install_kernel.shがここを使って、カーネルのインストール作業を行っています。

「arch linuxのboticized化」のためには、このlinux-dev-botic7-v48/deploy/を使い、手作業でカーネル(zImage)、構成ファイル(dtbs)、ライブラリ(modules、firmware)を入れ換えることになります。
やり方は簡単で、arch linuxのシステムファイルの置き方に合わせて、手作業で前記のファイルを解凍、入れ換えるということになります。やり方については掲示板のこのページに書き込んでありますが、再録します。

以下は僕の VmWare Player Ubuntu12.04 環境での操作です。
マイクロSDをセット。VmWare Player に取り込みます。通常は/dev/sdbに取り込まれますので、以下の操作方法はその場合のものです。他のデバイス名になった場合は適当に読み替えてください。
最新版のArchLinuxをマイクロSDカードにインストールします。ホームディレクトリで操作しています。

sudo dd if=/dev/zero of=/dev/sdb bs=1M count=8
sudo fdisk /dev/sdb
n -> default... -> p -> w
sudo mkfs.ext4 /dev/sdb1
mkdir mnt
sudo mount /dev/sdb1 mnt
wget http://os.archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
sudo bsdtar -xpf ArchLinuxARM-am33x-latest.tar.gz -C mnt
sync
sudo dd if=mnt/boot/MLO of=/dev/sdb count=1 seek=1 conv=notrunc bs=128k
sudo dd if=mnt/boot/u-boot.img of=/dev/sdb count=2 seek=1 conv=notrunc bs=384k
sync

以上の内容については以前このページで紹介しました。詳しくはそちらを参照してください。

次に、「カーネルをboticize」(コンパイル)する必要があります。これについては、前回、タヌキでも分かるレベルで(^^;;;ご紹介しましたので、そちらを参照してください。

次にBoticの最新版カーネルをrt化したディレクトリの下のワークディレクトリ(linux-dev-botic7-v48/deploy/disk/)に移動し、手作業でboticize化します。deployにはビルドしたアーカイブが作成されています。deploy/disk/はインストール用のワークディレクトリです(Nelsonさんスクリプトで自動的に作成されています)。

mkdir mnt
cd linux-dev-botic7-v48/deploy/disk/
sudo cp ../../../mnt/boot/zImage ../../../mnt/boot/zImage.org
sudo cp ../4.8.13-rt6-botic7-rc3.zImage ../../../mnt/boot/zImage
tar -zxvf ../4.8.13-rt6-botic7-rc3-modules.tar.gz
sudo cp -av lib/modules/* ../../../mnt/lib/modules/
rm -rf ./*
tar -zxvf ../4.8.13-rt6-botic7-rc3-firmware.tar.gz
sudo cp -av ./* ../../../mnt/lib/firmware/
rm -rf ./*
tar -zxvf ../4.8.13-rt6-botic7-rc3-dtbs.tar.gz
sudo cp -av ./* ../../../mnt/boot/dtbs/
rm -rf ./*

「../../../」と怪しげな魔法の呪文だらけですが、これは「一つ上のもう一つ上のもう一つ上のディレクトリ」という意味ですので、まったく怪しくはありません。
やっている内容を解説すると、最初の4行がzImageのコピー、次の3行がライブラリモジュールの展開、次の3行がファームウェアの展開、最後の3行がブートdtbs定義のコピーです。

さて、ここから掲示板では「am335x-boneblack-botic.dtbをam335x-boneblack.dtbに変身させます」とあり、その操作方法を説明していますが、これは不要です。「変身の術」は mieroさんが diyaudio に書き込み、moctさんに教えて頂いたのですが、arch linuxではuEnv.txtの変更で対応できるようです。詳しくは次に。

uEnv.txtにboticドライバのパラメータをセット。ちなみに

optargs=coherent_pool=1M

行はかなり以前のバグ対応のための記述で、今では不要だと思います。僕のサイトのあっちこっちに情報があります。ここがあっち、ここがこっちです。

sudo nano mnt/boot/uEnv.txt
#optargs=coherent_pool=1M
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM snd_soc_botic.dsd_format_switch=3

こんな具合に変更します。
ついでにMPD関連のセットアップに必要ファイルをコピーしておきます。

sudo cp mpd.conf mnt/etc/
sudo cp 0008-native-DSD-u32le.patch mnt/root/
sudo cp mpd-0.19git-rtopt20140327.patch mnt/root/

終了の呪文です。

sync
sudo umount mnt

作成したマイクロsdカードをbbbに差して、起動します。
起動後のログイン名 alarm、パスワード alarm です。

su -

で root になれます。バスワードも rootです。
ディフォルトではrootでsshログイン出来ないので、設定ファイルを変更します。その前に

pacman -Syy

これは debian のapt-get updateと同じですから、必ず行う必要があります。 rootでログイン出来るよう設定ファイルを変更します。

nano /etc/ssh/sshd_config
PermitRootLogin yes

MPDをrt化するためには、MPDをビルドする必要があります。
最新版 boticized Arch linuxでのmpdのビルド仕方。
関連するパッケージのインストール(pacman -S)。

pacman -S cifs-utils nfs-utils ntfs-3g
pacman -S alsa-plugins alsa-utils alsaplayer
pacman -S mpd mpc ncmpc

この後、音楽用nasの自動マウント設定(fstabの設定)を行います。

mkdir /music
nano /etc/fstab
//192.168.0.35/public /music cifs username=yo,password=,sec=ntlm,uid=mpd,noauto,x-systemd.automount,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0

次に、mpdの設定を行います。

nano /etc/mpd.conf
botic版のmpd.confをもってくれば音楽用ディレクトリの変更だけですむはずです
ln -s /music /var/lib/mpd/music

mpdをコンパイルするのに必要なパッケージをインストールします。

pacman -S git make autoconf automake libtool pkg-config patch unzip
pacman -S gcc boost wget

あとはパッチをかけて、autogen、configure、makeする。やり方はdebianなどといっしょです。 最後にsystemdの設定の確認とmpdスタート。

nano /lib/systemd/system/mpd.service
systemctl status mpd
systemctl start mpd


(PC_Audio)   2017/03/25

コメントする

I2Sの世界(6)


lightMPD UPnP版で2回中断しましたが、arch linux の boticized化の話で継続します。
こちらはmieroさん提供のディフォルトのスクリプトはないので、boticizeするための作業を全て自力で行う必要があります。
手順としては

  • カーネルをboticize(コンパイル)
  • 手作業でカーネル、構成ファイル、ライブラリを入れ換え
  • mpdのセットアップ

となります。順番に説明していきます。

boticized arch linux用カーネルをビルド

カーネルのビルドには様々な方法があります。特にarm機の場合、アーキテクチュアに互換性がないので、構成ファイルで対応していますが、限界があり、どういう方法をとるか機種次第です。
BBB/BBGの場合、二つの方法があります。リンク先からカーネルのソースをダウンロード出来ます。

boticized arch linux用カーネルをビルドの場合、Nelson版のBeagleBoneソースを使うことになります。理由はmieroさんがBotic V5以降、Nelson版のBeagleBoneソースをベースにパッチを用意するようになったためです。linuxのカーネルの 4.xから、Nelson版に切り換えたようです。
nelson版はカーネルのビルドを自動化するスクリプトが用意されていて、その中で独自のパッチも自由にかけられるようになっています。Boticのようにカーネルにパッチをかけることで、機能を実現するというシステムの場合、nelson版のスクリプトに変更を加えることにより、楽に管理出来るようになります。これがBotic V5(linux 4.x)以降、Nelson版に切り換えた理由だろうと推察します。

というわけで、ここでは、Nelson版のカーネルソースを使ったカーネルのビルド方法について解説します。この方法は非常に簡単ですが、debian系のディストリビューションのみに有効です。
Arch linux についてはこれから説明する方法を応用した方法をとる必要がありますが、それについては後述します。

Nelson版のカーネルソースのgithubはこちらです。表示されるREADMEに使い方の説明があります。引用します。

Build Kernel Image:
./build_kernel.sh
Optional: Build Debian Package:
./build_deb.sh
Development/Hacking:
first run (to setup baseline tree): ./build_kernel.sh then modify files under KERNEL directory 
then run (to rebuild with your changes): ./tools/rebuild.sh

えらくシンプルですが、これだけです。
つまり

git clone git://github.com/RobertCNelson/linux-dev.git
cd ./linux-dev/
./build_kernel.sh

だけでビルドできます。もう一度ビルドをやり直したい時は

./tools/rebuild.sh

必要なパッケージがインストールされていなければ、インストールするよう促されますので、それに従えばいいです。
次にインストール方法です。あらかじめdebian系のパッケージをインストールしたSDカードを用意しておきます。SDカードは /dev/sdb に置かれているものとします。

nano system.sh

MMC=にドライブ名を指定します。

MMC=/dev/sdb

nano終了させ、インストール用のスクリプトを起動します。

./tools/install_kernel.sh

となります。

ここまでが、nelson版カーネルのビルド&インストール方法です。簡単でしょ。最新版をインストールするにはこれだけで済みます。

あんまり簡単なので、もう少し補足します。

nelson版ビルド方法は32bit版のカーネルだと4.4以降はエラーになるので注意が必要です。
nelson版のビルド方法に関する日本語の情報は意外に少ないですね。ここに情報があります。
カーネルソースとコンフィグはnelson版をそのまま使うのが素直な方法です。
ゼロからNelson版でビルドする場合の準備方法は以下の通りです。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git bc build-essential libncurses5-dev
sudo apt-get install bc ncurses-dev git device-tree-compiler lzma lzop
#sudo apt-get install gcc automake libtool flex bison gdb libicu-dev libboost-dev libglib2.0-dev libsmbclient-dev
---------------
git config --global user.email "xxxxxx.xx@nifty.com"
git config --global user.name "xx xxxxxx"
git clone https://github.com/RobertCNelson/bb-kernel
cd bb-kernel/
git tag
git checkout 4.6.7-bone-rt-r4 -b 4.6.7-bone-rt-r4
./build_kernel.sh

コンパイル中にに必要なライブラリが不足すると

Debian/Ubuntu/Mint: missing dependencies, please install:
-----------------------------
sudo apt-get update
sudo apt-get install gettext libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386
-----------------------------
* Failed dependency check

とエラーメッセージが出るのでその通り対応すれば良い。

sudo apt-get update
sudo apt-get install gettext libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386

SDカードへの書き込み。情報はこちらです。

nano system.sh
MMC=/dev/sdb
./tools/install_kernel.sh
----------------
/deb/sid-armhf/v4.6.7-armv7-rt-x5

参考までですが、nelson版のスクリプトを使わず、ビルドする方法です。

# arm-linux-gnueabihfをインストール
sudo apt-get install gcc-arm-linux-gnueabihf
# ビルド
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper
cp ../config-nelson ./.config
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
sudo make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
# インストール
sudo mount /dev/sdb1 ../mnt
sudo cp arch/arm/boot/dts/*.dtb ../mnt/boot/dtbs
sudo cp arch/arm/boot/zImage ../mnt/boot/
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../mnt modules_install
sudo umount ../mnt



さて、ここからがこのnelson版カーネルのビルド&インストール方法を arch linuxに適用するための応用編です。

nelson版カーネルはboticパッチはかかっていません。従って、boticizeさせるには、nelson版カーネルにboticパッチをかける必要があります。boticパッチの構成は複雑ですので、自力でかけるのは大変です。これを何とかするには、mieroさんのgithubに行けばいいです。

mieroさんのgithubのlinux-devというページにboticパッチ済のカーネルソースが置いてあります。



下の方に

Select a branch to choose the Botic version.

とありますので、表示された画面の左上の「Brach :master」ボタンをクリックします。



「botic7-v48」を選択します。これが最新版です。

何故か「git clone」では取り出すことが出来ません。
仕方がないので、画面右上の「Clone or download」ボタンをクリックします。



「Download ZIP」とあるボタンを押してダウンロードするか、左クリックしてダウンロードアドレスをgetします。

以下、linuxでの操作方法です。
折角だから、rt化する、dsd-native バッチをかけることにします。digififanさんのdsd-native バッチのありかはこちらです。
必要なパッチを準備します。

cp /mnt/native-dsd-4.4.6-20160502.patch ./
cp /mnt/native-dsd-noise.patch ./
cp /mnt/0008-native-DSD-u32le.patch ./
wget wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.8/older/patch-4.8.11-rt6.patch.gz

Boticパッチのかかったlinux4.8.13のソースを展開します。これは、さっきの画面のzipファイルを取りに行っているわけです。

wget https://github.com/miero/linux-dev/archive/botic7-v48.zip
unzip botic7-v48.zip
cd linux-dev-botic7-v48/

zipファイルにあるgithubのBoticはNelson版を使ってカーネルを管理しているので、そのままNelson版の方法を使ってビルドするのが簡単です。

./build_kernel.sh

暫くすると、menuconfig画面が出てきますので、ストップさせ、パッチをかけます。

cd KERNEL/
gzip -dc ../../patch-4.8.11-rt6.patch.gz | patch -p1
patch -p1 < ../../native-dsd-4.4.6-20160502.patch
patch -p1 < ../../native-dsd-noise.patch
cd ../

「cd KERNEL/」がカーネルソースのあるディレクトリなので、そこに移動してパッチをかけることになります。
ビルドを再開します。

./tools/rebuild.sh

menuconfigでrtカーネルを指定します。botic関連の設定はディフォルトのconfigで設定済です。
これで、Boticドライバ入りのカーネルが作成されます。
終わったら、Botic4をインストールしたマイクロSDカードをセットしておきます。
SDカードが/dev/sdbであることを確認しておきます。

./tools/install_kernel.sh

install_kernel.shスクリプトはboticに対応するよう書き換えられていますので、これでインストールができます。

さて、肝心の arch linux をどう boticize するかについて書いていませんが、えらく、長くなったので、以下、次回です。

(PC_Audio)   2017/03/18

コメントする

BB用lightMPD UPnP-Adapter版を公開します


先週に続き、BB用 lightMPD UPnP-Adapter版を lightmpd 1.0.3 に追加するアーカイブとして公開します。

lightmpd-upnp-adapter.zip をダウンロード

先週公開した版をもとに UPnP-Adapter化させたものです。
Boticized lightMPD UPnP版に含めてもよかったのですが、フロントとバックエンドがごっちゃになり、説明がややこしくなるので、別のアーカイブとして公開することにしました。BBB/BBGを二台もっていて、アダプターとプレーヤの二台構成を試してみたいという方のためのです。フロント側の二回線目のため USB-LAN変換アダプターが必要です。対応しているチップは Realtek 8152/8153 だけですので、ご注意ください。左のアダプターは僕の環境で使っているものです。こちらの方が先週紹介したものより安い(半額)ですが、作りはちゃちです。

以上のハードがそろっていれば、設定は簡単です。
フロント側はネットワークアドレス([network] address=)を 192.168.0.20 に設定してありますので、これで問題なければ、そのまま使えます。必要なら修正して下さい。
バックエンド側は

/mnt/scripts/upnpset.sh splay

を指定して下さい。
これだけで、後はフロント側USB-LAN変換アダプタとバックエング側LAN端子をLAN回線で接続すれば、使えるはずです。


Single line player mode
~~~~~~~~~~~~~~~~~~~~~~~                   ===========================
BBB/BBG  Boticized lightmpd               BB用lightMPD UPnP-Adapter版
                                          ===========================
(Back end)                                (Front)
 +----------------------+                  +-----------------------+
 |uInitrd-br-upnp-player|                  |uInitrd-br-upnp-adapter|
 |    lightmpd.conf     |                  | lightmpd.conf         |
 |    polipo.conf       |                  | upmpdcli-adapter.conf |
 |    myscript.sh       |eth0         eth1 | polipo-adapter.conf   |
 |                      |           USB LAN| myscript.sh           |
 |                      |           adapter|                       |eth0
 |mpd + polipo          +------------------+ upmpdcli     <--------|---> dlna control point
 | mpd(upnp mode)       |10.0.0.2  10.0.0.1|                       |       (UPnPlay LUMIN etc)
 | polipo(cache server) |                  | polipo         <------|---> dlna server
 |                      |                  |   (cache server)      |eth0   (MinimServer Minidlna etc)
 +----------------------+                  +-----------------------+(192.168.0.20)

以下、アーカイブの内容を簡単に解説します。

カーネルとdtbファイル

boot/dtbs/am335x-boneblack-botic-103-v02.dtb
boot/dtbs/am335x-boneblack-botic-sabre32-103-v02.dtb
boot/zImage-botic-103-v02
lightmpd/minidlna.conf

Boticized lightmpd UPnP と変更はありません。

uInitrd

boot/uInitrd-br-upnp-adapter

S00setupvar、S94polipo、S99upmpdcli をアダプター対応させています。

設定ファイル

lightmpd/lightmpd.conf
lightmpd/polipo-adapter.conf
lightmpd/upmpdcli-adapter.conf
scripts/myscript.sh

アダプター対応の変更(アドレスの変更)を行っています。

おまけ(グールドのイタリア協奏曲とデラーのノートルダムミサ)

music/GrennGould/00*
music/AlfredDeller/0*

変更ありません。UPnP版と同様に、とりあえずminidlnaで音出し出来るようにしてあります。


p.s. こういう具合に簡単にアダプター対応出来るのは lightMPD のシンプルな構成のおかげですね。
p.p.s. フロント側のハードの差による音への影響は小さいだろうと思っていましたが、意外に差がありますね。僕の環境ですが、APUと比較するとBBBはちょっと余裕がないという感じがします。rpiだとどうなりますかね。

(PC_Audio)   2017/03/11

コメントする

Boticized lightMPD UPnP版を公開します


Boticized lightMPD UPnP版を bb対応の lightmpd 1.0.3 に追加するアーカイブとして公開します。

boticized-lightmpd-upnp.zip をダウンロード


botilized lightmpd をベースに upmpdcli と polipo を加え、UPnP対応させたものです。スタンドアロンで動くスタンドアロン版(uInitrd-br-upnp-stand)と mpd/polipoによりバックエンドで動くプレーヤ版(uInitrd-br-upnp-player)版があります。

スタンドアロン版と minidlnaサーバを組み込んでいますので、Upplay、Kazooなどのコントロールポイントを用意すれば、これだけで UPnPの世界を体験出来るようにしてあります。

プレーヤ版では、2回線使い、polipo用回線を分離独立させることも可能です。プレーヤ版の Single line player mode と Double lines player mode は lightmpd upnpgw をインストールした apu と組み合わせ、動作確認しています。未確認ですが、「なんちゃってネットワーク分離」で公開されている raspberry-pi用アダプターと組み合わせることも可能だと思います。


Single line player mode
~~~~~~~~~~~~~~~~~~~~~~~
BBB/BBG  Boticized lightmpd               APU lightMPD/upnpgw
(Back end)                                (Front)
 +----------------------+                  +--------------------+
 |uInitrd-br-upnp-player|                  | lightmpd.conf      |
 |    lightmpd.conf     |                  |    -upnpgw         |
 |    polipo.conf       | eth0        eth1 |                    | eth0
 |    myscript.sh       +------------------+ upmpdcli     <-----|---> dlna control point
 |                      |10.0.0.2  10.0.0.1|                    |         (UPnPlay LUMIN etc)
 |mpd + polipo          |                  |                    |
 | mpd(upnp mode)       |                  | polipo         <---|---> dlna server
 | polipo(cache server) |                  |   (cache server)   | eth0    (MinimServer Minidlna etc)
 +----------------------+                  +--------------------+(192.168.x.y)


Double lines player mode
~~~~~~~~~~~~~~~~~~~~~~~~
BBB/BBG  Boticized lightmpd               APU lightMPD/upnpgw
(Back end)                                (Front)
 +----------------------+                  +--------------------+
 |uInitrd-br-upnp-player|                  | lightmpd.conf      |
 |    lightmpd.conf     | eth0        eth1 |    -upnpgw-nasgate | eth0
 |    polipo.conf       +------------------+ upmpdcli    <------|----> dlna control point
 |    myscript.sh       |10.0.0.2  10.0.0.1|                    |          (UPnPlay LUMIN etc)
 |                      |                  |                    |
 |mpd + polipo          | eth1 usb         |                    |
 | mpd(upnp mode)       |Lan adapter  eth2 |                    |
 | polipo(cache server) +------------------+   (polipo)  <------|---> dlna server
 |                      |10.0.1.2  10.0.1.1|                    | etho     (MinimServer Minidlna etc)
 +----------------------+                  +--------------------+ (192.168.x.y)

こちらの方がスタンドアロン版より音が良いと思いますので、フロント用に使えるハードをお持ちの方にお勧めします。特に Double lines player mode は「I2S + UPnPの世界」の音の凄さを確認できると思います。


この版の作成では皆様方の以下の情報に助けられました。記して感謝します。

トラブル報告については、みみず工房掲示板のこのスレッドで受け付けます。よろしくお願いします。


以下、アーカイブの内容を簡単に解説します。

v02と変更のないもの。

lightmpd/mpd-0.19.21rt-arch-dsd
lightmpd/mpd-0.20.2rt-arch

名前を変えただけのもの(buildrootベースであることを明示するため、103をbrに変更)。

boot/uInitrd-br
boot/uInitrd-br-arch

103はご本家1.0.3版のconfigを使った、brはご本家のbuildroot定義ファイルを使った、という意味に統一しました。
ここまでが変更のないもの(upnp対応しないもの)となります。

次に UPnP 対応のため、コンパイルし直したもの。

boot/dtbs/am335x-boneblack-botic-103-v02.dtb
boot/dtbs/am335x-boneblack-botic-sabre32-103-v02.dtb
boot/zImage-botic-103-v02

v02はプレーヤ版の2回線を使う Double lines player mode のため、usb-lanチップ(Realtek 8152/8153)を登録しました。

修正したもの。毎度ですが。

uEnv.txt
  kernel、initrd、fdtfileの変更。
lightmpd/lightmpd.conf
  load_moduleの変更。
lightmpd/mpd.conf
  curl inputの追加。
scripts/myscript.sh
  優先度を変更。mount機能の分離。iconのコピー機能、ネットワーク機能の追加。

/scripts/myscript.sh でrt優先度を設定しています。環境に合わせて変更して下さい。myscript.sh は /var.rom/lightmpd/bin/setup.scm により /var/lightmpd/bin にコピーされ、/etc/init.d/S94polipo、/etc/init.d/S95mpdで実行されます。


新規に追加したもの。今回のハイライトです。

upnp対応のmpd

lightmpd/mpd-br-01921
lightmpd/mpd-br-02004

mpdはbuildrootを使ってクロスコンパイルしていることを明示するため、brというサフィックスで表記しました。その後ろの番号はバージョンです。01921はdigififanさんの公開されている内容の通りパッチをかけています(dsd-native + rt)。02004はrtパッチのみです。どちらもコンパクトなtarget/output/usr/binのmpdを使っています。詳しくはこのメッセージを参照して下さい。

confファイル、iconファイル

lightmpd/polipo.conf
lightmpd/upmpdcli.conf
lightmpd/minidlna.conf
icon/miero.png

upmpdcli、polipo、minidlnaのconfファイルは /lightmpd/ に置いてあります。必要に合わせて修正して下さい。confファイルは /etc/init.d/S00varsetup で /var/lightmpd/etc にコピーされます。
iconファイルはmieroさんに敬意を表し、チェコ国旗にしました。myscript.shにより /var/lightmpd/binにコピーされます。

uInitrdはスタンドアロンで動く uInitrd-br-upnp-stand とプレーヤモードで動く uInitrd-br-upnp-player があります。スタンドアロンシステムの作り方についてはこのスレッドに詳細があります。プレーヤモードシステムの作り方についてはこのに情報があります。

スタンドアロン版のuInitrd

boot/uInitrd-br-upnp-stand
boot/uInitrd-br-upnp-stand-arch

uInitrd-br-upnp-stand は buildrootを使ってupmpdcli、polipo、minidlnaを組み込み、UPnP対応させました。また、ruby、mpd/mpc、ncmpcを組み込んでいます。
uInitrd-br-upnp-stand は mpdをデーモン起動に戻しました。
S94polipoでmountをS95mpdでrtprを行っています。

プレーヤ版のuInitrd

boot/uInitrd-br-upnp-player
boot/uInitrd-br-upnp-player-arch

uInitrd-br-upnp-player は polipo、mpdのみを組み込み、プレーヤモードに対応しています。
S94polipoでmountとstartをS95mpdでrtprを行っています。

arch版とは何かについてはこのメッセージを参照して下さい。リンク先の説明はdebianに対応したものですが、lightmpd 1.0.3 ではライブラリの構成が変わったので、archでも対応出来るようになりました。pureなbotic版arch linuxを使い、mpdをビルドし、組み込まれたライブラリの中でlightmpdのusr/libに存在しないものをarch側から持ってくるという手法をとっています。
uInitrd-br-upnp(-player)-arch + mpd-0.19.21rt-arch-dsd、または、uInitrd-br-upnp(-player)-arch + mpd-0.20.2rt-arch の組み合わせで動きます。この時、chunkサイズを小さくして(polipo.confでコメントアウトしてあるものと入れ換える)、お使いください。

arch版のmpdとlightmpd版のmpdを切り換えるコマンドを作成しました。sedを使っています。

scripts/mpdset.sh
scripts/uEnv.scr
scripts/uEnv-arch.scr

# /mnt/scripts/mpdset.sh
Welcome to Boticized lightMPD
Usage: /mnt/scripts/mpdset.sh {arch19|arch20|light19|light20}

となります。confファイルの変更でも出来ますが、こちらを使った方が簡単なので、お勧めします。内容についてはスクリプトをご覧下さい。

upnpモードの切替

scripts/upnpset.sh
scripts/lightmpd-play.scr
scripts/lightmpd-stand.scr
scripts/polipo-stand.scr
scripts/polipo-splay.scr
scripts/polipo-dplay.scr

以上のスクリプトはスタンドアロンとプレーヤのupnpモードの切替のためのものです。使い方は

# /mnt/scripts/upnpset.sh
Welcome to Boticized lightMPD
Usage: /mnt/scripts/upnpset.sh {stand|splay|dplay}

standはスタンドアロンモード
splayは一回線のプレーヤモード
dplayは二回線のプレーヤモード

となります。モードの切替のために、いちいちconfファイルをいじるのが面倒なので、作成しました。
なお、BBB/BBGをプレーヤモードにすると、バックエンドのBBB/BBGに直接telnetで入ることは出来ませんが、フロント側に telnet で入り

telnet 10.0.0.2

とすれば、ログインできます。
/dev/mmcblk0p1 は S94polipo でマウント(myscript.sh)しています。

おまけ(グールドのイタリア協奏曲とデラーのノートルダムミサ)

music/GrennGould/00*
music/AlfredDeller/0*

おまけとしてminidlna用の音楽ディレクトリ(/music)にグレン・グールドのイタリア協奏曲(バッハ)とアルフレッド・デラーのノートルダムミサ(マショー)を置いてあります(どちらも1960年前後の演奏なので、著作権は切れています)。Windows環境であれば、Upplay、Kazooなどのコントロールポイントを用意するだけで、UPnPの世界を体験することが出来ると思います。お楽しみください。

upnp版は音は圧倒的に良いと思いますが、動作はかなりセンシティブです。特に上記のchunkサイズが大きすぎるとノイズが発生したり、ハングしたりします。お使いの環境に応じて修正して下さい。詳しくはこのあたりを参照してください。

ディフォルトの構成は以下の通りです。

zImage-botic-103-v02
uInitrd-br-upnp-stand
am335x-boneblack-botic-103.dtb
mpd-br-02004


p.s. 冒頭で紹介したように lightmpdベースの botic対応upnp版を donuts.shop73 さんが公開されています。こちらは buildrootではなくスクラッチでuInitrdを構成されています。素晴らしい完成度ですので、こちらもお勧めします。




p.p.s. double lines player mode のためには BBB/BBG 側に2回線必要となります。回線増設の方法としては、usb-lan変換アダプタの使用をお勧めします。この場合、カーネルのドライバ対応が必要となりますが、前述したように zImage-botic-103-v02 で対応しているチップは Realtek 8152/8153 だけですので、ご注意ください。僕の使っているアダプタは右のものです。

(PC_Audio)   2017/03/04

コメントする

I2Sの世界(5)


Boticized Debian の作り方

前回、debianの最新版をどのようにインストールするか解説しました。
その後、どうやってBoticizeするかに関して、続けます。

git clone https://github.com/miero/boticize
cd boticize/

gitでBoticizeするスクリプトをget出来ます。gitディレクトリには次のようなスクリプトがダウンロードされます。

root@arm:~# cd boticize/
root@arm:~/boticize# ls -l
total 13268
-rwxr-xr-x 1 root root      102 Jan 14 06:07 00-checktime.sh
-rwxr-xr-x 1 root root     2123 Jan 14 06:07 01-addrepos.sh
-rwxr-xr-x 1 root root      479 Jan 14 06:08 02-install.sh
-rwxr-xr-x 1 root root      235 Jan 14 06:07 03-enablepm.sh
-rwxr-xr-x 1 root root      193 Jan 14 06:07 04-customsw.sh
-rw-r--r-- 1 root root 13557072 Dec 10 01:03 linux-image-4.8.13-botic7-rc3_1_armhf.deb
-rw-r--r-- 1 root root     1796 Jan 14 06:07 README.md
drwxr-xr-x 3 root root     4096 Jan 14 06:07 root

00-checktime.shから04-customsw.shまで順番に実行してやります。 00-checktime.shは時刻の確認用のスクリプトです。前々回に解説したようにBBB/BBGは内蔵時計をもっていないので時刻が狂っているとこのあとのインストールがうまくいかないので、このスクリプトで確認、修正しておこうということです。

root@arm:~/boticize# ./00-checktime.sh
Verify current BBB time:
Wed Jan 18 10:58:22 UTC 2017

If not correct fix using: date [MMDDhhmmYYYY]

01-addrepos.shはインストール(boticize)を行うためにmieroさんのサイトをレボジトリに登録するためのものです。

root@arm:~/boticize# ./01-addrepos.sh
deb http://repo.ieero.com/botic jessie main
#deb-src http://repo.ieero.com/botic jessie main
OK
root@arm:~/boticize# nano 02-install.sh

次に、02-install.shを実行し、最新debian(jessie)システムをboticize化します。
その前に、前準備があります。02-install.shの頭の部分installの終わりに

apt-get install --no-install-recommends -y \
を
apt-get install --no-install-recommends -y --force-yes\
に変更

と追加します。もう一つ、終わり近くの

linux-libc-dev=4.5-botic7-rc1_armhf \

という行を削除します。これをやらないと

E: Version '4.5-botic7-rc1_armhf' for 'linux-libc-dev' was not found

というエラーが表示されます。エラーを無視するのであれば、削除は不要です。
前回のリンク先にはこのあたりのmieroさんの説明があります。

ようやく、メインイベント。02-install.shを実行します。

root@arm:~/boticize# ./02-install.sh

03-enablepm.shはパワーボタンを押すとシャットダウンするように変更するためのもののようです(Enable shutdown on Power button press)。

root@arm:~/boticize# ./03-enablepm.sh
Synchronizing state of acpid.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable acpid

04-customsw.shはネットワークの更新とCPU周波数を1GHzに固定するためのもののようです(Enables time update from network, fixes CPU frequency to 1GHz)。

root@arm:~/boticize# ./04-customsw.sh
update-alternatives: using /usr/bin/vim.tiny to provide /usr/bin/vim (vim) in auto mode
‘root/etc/default/cpufrequtils’ -> ‘/etc/default/cpufrequtils’
‘root/etc/systemd/system/ntpdate.service’ -> ‘/etc/systemd/system/ntpdate.service’
Created symlink /etc/systemd/system/multi-user.target.wants/ntpdate.service → /etc/systemd/system/ntpdate.service.

uEnv.txtをBotic対応に修正します。

nano /boot/uEnv.txt
以下の2行を追加します。
dtb=am335x-boneblack-botic.dtb
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM snd_soc_botic.dsd_format_switch=3

どうせだから、boticを最新レベルにしましょう。一気に最新版に出来ます。

reboot
apt-get update
wget http://repo.ieero.com/botic/pool/main/l/linux-upstream/linux-image-4.8.13-botic7-rc3_1_armhf.deb
dpkg -i linux-image-4.8.13-botic7-rc3_1_armhf.deb

boticのレベルアップと異なり、こちらはこの状態ではmpd関連のセットアップはされていません。
自力で行う必要があります。
やり方はdebianへのmpdのセットアップと同じです。

reboot
apt-get update
apt-get install nfs-common cifs-utils winbind avahi-daemon avahi-autoipd
apt-get install alsa-base alsa-utils
apt-get install mpd mpc ncmpc

debianのパッケージ管理は面倒みがいいので、これでmpdはdaemon起動さています。

root@arm:~# systemctl status mpd
● mpd.service - Music Player Daemon
   Loaded: loaded (/lib/systemd/system/mpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-01-21 11:50:25 UTC; 35min ago
 Main PID: 3929 (mpd)
   CGroup: /system.slice/mpd.service
           └─3929 /usr/bin/mpd --no-daemon

従って、音楽データベースの登録だけ行えばいいです。
一番簡単な方法は

nano /etc/fstab
//192.168.0.35/public /var/lib/mpd/music cifs username=yo,password=,sec=ntlm,uid=mpd,noauto,x-systemd.automount,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0

となります。 簡単でいいのですが、mpdのバージョンが古いのですよね。

root@arm:~# mpd -V
Music Player Daemon 0.19.1

Copyright (C) 2003-2007 Warren Dukes 
Copyright (C) 2008-2014 Max Kellermann 

あとは、自力で最新にするなり、好きなようにしてください。

(PC_Audio)   2017/02/25

コメントする

I2Sの世界(4)




「この写真何か ? 」という方は多いでしょうね。タイトルとは関連しますが、只今のテーマ「botic」とはほとんど無関係です。新年にページを新しくしてから、5回の記事で写真や図がゼロ。ただ、ひたすら文字だけ。まあ、ずっとソフトの話だったので仕方がないのですが、何とかしようと撮りました。(^^;;;

写真は現時点での僕のaitlabo DACのケース内です。こういう具合にBBBとDDC(F-1)が収納済で、それぞれ外部に電源をもち、動いています。F-1とDAC本体は写真のようにI2S接続され、F-1のSPDIF端子は使われていません。
BBBとDDCの外側に何やら壁のようなものが写っていると思いますが、これは「トランプの壁」とは違い、有効な壁です(電磁波対策に)。銅テープをボール紙に張り付けて作ったもの。表面に透明の絶縁用テープを張ってあります。「簡単に対策できて、有効だよ」とPhoeniciaさんに教えてもらった方法です。
このDAC、ブリッジ基板を使ってBBGと直結するという繋ぎ方もしていますが、音はいい勝負ですね。
BBBのOSは Arch Linux です。「言行不一致だ」といわれそうですが、こっちの方が音がいいので。

まあ、そろそろ Boticized lightmpd に入れ換え、ブリッジ基板を使い、接続する形にしようと思っています。ついでに apu を使いUPnP接続させるつもりです。

本題に戻します。ここからあまり他のサイトでは書かれていない話題に移れると思います。Boticを本来のドライバの姿に戻し、Boticizeする方法から。

Boticize

Boticizeというのはもちろん造語で、様々なLinuxディストリビューションにBotic化パッチをあてて、Botic I2Sドライバを利用可能にすることをいいます。
今のところ、Volumio、Debian、Ubuntu、Arch Linux、lightMPD を Boticize することが出来ます。Boticizeのやり方については前回紹介したサイトでmoctさんのサイトを除きあまりふれられていないので、詳しく紹介したいと思います。
上記したディストリビューション中でDebian、Arch Linux、lightMPDについて解説します。理由はVolumioは使ったことも無いし、興味もないからです。情報はlinuxcomさんのサイトにありますので、ここ(BBB の Volumio に Botic kernel をインストール)にリンクしておきます。
UbuntuはDebianとほぼ同じという理由で省略します。こちらはこのサイトの掲示板でmoctさんが書き込まれたメッセージがあるのでリンクしておきます。

その前に例によって Boticizeに関連する情報のあるページをリンクしておきます。

Debianシステムの作り方

BoticのDebian jessie化については、mieroさんが自らスクリプトを作成し、自分のgithubで公開しています。
従って、スクリプトを使えば簡単に最新のDebianを Boticizeすることが出来ます。
問題は最新のDebianを持ってくる方法ですが、音楽用ですので、なるべく小さい版を使う必要があります。以下のリンク先をお勧めします。

  • Index of /rootfs
    日付のインデックスです。ここから最新の日付のものを選びます。次の画面では elinux を選びます。
  • Index of /rootfs/2017-01-13 ここで版を選びます。stretchとあるのが不安定版、何も無い(日付だけ)のが安定版です。ubuntuもここからダウンロード出来るようですね。

安定版を選ぶか、不安定版を選ぶかは貴方次第です。俺は最先端が好きだという方はstretch、俺は飛行機は嫌いだ地に足がついていないと駄目だという方は日付版を選べばいいです。

さて、Boticiseするにはsdカードにdebianシステムを作成する必要があります。セットアップ用のスクリプトが用意されていますので、それを実行するのが簡単です。

wget https://rcn-ee.com/rootfs/2017-01-13/elinux/debian-8.6-console-armhf-2017-01-13.tar.xz
tar -Jxvf debian-8.6-console-armhf-2017-01-13.tar.xz
cd debian-8.6-console-armhf-2017-01-13/
sudo ./setup_sdcard.sh --mmc /dev/sdb --dtb beaglebone

arch linuxより更に簡単ですね。arch で手作業でやっていた部分がスクリプトになっていると考えていいです。様々なLinuxディストリビューションの中でもインストールの一番簡単なディストリビューションではないでかね。

キリがいいので、以降は次回。

(PC_Audio)   2017/02/12

コメントする

I2Sの世界(3)


まずBoticのインストールの仕方。前回のリンク先に大部分のことは書きつくされていますので、ここでは落ち穂拾いをします。

Boticのインストール

linuxでのインストール

オリジナルのV4版のイメージですが、Windows DDWINで書き込まないといけないとうわけではありません。ここではLinuxで行う方法を紹介しておきます。VmwarePlayer Ubuntu12.04です。

yo@ubuntu:~$ wget http://bbb.ieero.com/botic4/bbb-botic-v4-1gb.img.gz
yo@ubuntu:~$ gzip -d bbb-botic-v4-1gb.img.gz
yo@ubuntu:~$ sudo dd if=./bbb-botic-v4-1gb.img of=/dev/sdc
1433600+0 レコード入力
1433600+0 レコード出力
734003200 bytes (734 MB, 700 MiB) copied, 497.937 s, 1.5 MB/s
yo@ubuntu:~$ sync

こっちの方が4個のコマンド操作ですので、簡単です。SSHを使えば、コマンドはいちいち入力する必要はなくCopy&Pasteで書き込めるので、楽ですよ。

時刻合わせ

インストールしたら、時刻合わせが重要です。
BBB/BBGはセルフタイマーを持っていませんから、その仕組み(ntpというソフトをインストールすればいいです)を持っていないOS(ディストリビューション)を使うと、時刻が狂いまくります。「パソコンの時間なんて、どうせ狂い放しなのだからいいじゃん」などと言って、放っておく痛い目にあいます。

apt-get updateが
W: GPG error: http://security.debian.org wheezy/updates Release: The following signatures were invalid: KEYEXPIRED 1668892417 KEYEXPIRED 1587841717
・・・
W: GPG error: http://ftp.us.debian.org wheezy-updates Release: The following signatures were invalid: KEYEXPIRED 1587841717 KEYEXPIRED 1668891673

狂い方が尋常じゃないから(2033年とかなります)、こんなエラーになるのですよね。結果、「apt-get update」が出来ないから、何も出来ないということになります。対応方法は時間合わせをすること。

root@botic:~# date
Wed Aug 31 08:04:26 UTC 2033
root@botic:~# date 012000002017

これでもOKです。まあ、格好つけたければ(正しくは ? )、

ntpdate -v ntp.nict.jp
apt-get update
apt-get install ntp ncmpc

という具合にすればいいです(ncmpcは僕が使っているので、入れてあります)。

fstabの変更

Boticのイメージは2年以上前のものなので、最新の呪文ではエラーになります。古い魔法の呪文を唱えましょう(アドレス、username=、password= は各自の環境に合わせて、変更して下さい)。

nano /etc/fstab
//192.168.0.35/public /data cifs username=yo,password=,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0

この変更だけで、Boticは使えるようになります。このようにnasを使っていて、音楽ファイルの在り処を /data を使って定義すれば、Boticの設定は簡単です。fstabへの一行の追加だけですから、WebGuiを使った他の音楽ディストリビューションよりよほど簡単に出来ます。

I2S関連の設定

LINUXCOMさんの合体型DACやブリッジ基板を使っている場合は外部クロックを使うというの指定が必要です。

nano /boot/uboot/uEnv.txt
#optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM snd_soc_botic.dsd_format_switch=3

他のボードは使ったことがないので、分かりません。

パーティション領域の拡張

これは是非やっておいた方がいいです。Boticのイメージを書き込んだパーティションは660MBその内300MBは使用済となっていて、ほとんど拡張の余地がありませんので。

/opt/scripts/tools/grow_partition.sh
reboot


オリジナルのV4版のイメージからのレベルアップ

オリジナルのV4からのレベルアップですが、他のサイトに丁寧に解説されていますので(moctさんのこのページがお勧めです)、ここではオリジナルのmieroさんの案内の書き込みへのリンクとレベルアップコマンドのみ並べることにします。

botic5へのアップデート Botic V4 → Boric V5 2015.4.28 linux 4.0.0

apt-get installで出来ます。

apt-get install linux-image-4.0.0-botic5
reboot


botic7-rc1へのアップデート Botic V5 → Boric V7 2016.5.18 linux 4.5.0

何故かdebファイルを使う方法に変わります。

apt-get update
wget http://repo.ieero.com/botic/pool/main/l/linux-upstream/linux-image-4.5.0-botic7-rc1_4.5-botic7-rc1_armhf.deb
dpkg -i linux-image-4.5.0-botic7-rc1_4.5-botic7-rc1_armhf.deb
nano /boot/uEnv.txt
dtb=am335x-boneblack-botic.dtb
sync
reboot

多分、ライブラリの管理が面倒という理由でしょうね。

botic7-rc1 that allocates larger buffers

タイトルの通りですが、botic7-rc1でバッファーを大きくするための操作方法の説明のようです。

cd /lib/modules/4.5.0-botic7-rc1/kernel/sound/soc/davinci
mv snd-soc-edma.ko snd-soc-edma.ko.orig2
wget http://bbb.ieero.com/botic7-rc1/snd-soc-edma.ko
sync
reboot

多分、botic7だけの話だと思います。
/lib/modules/4.5.0-botic7-rc1/kernel/sound/soc/davinciというディレクトリもbotic8では無くなっていますので。

4.8.13-botic7-rc3 Botic V7 → Boric V8 2016.12.10 linux 4.8.13

wget http://repo.ieero.com/botic/pool/main/l/linux-upstream/linux-image-4.8.13-botic7-rc3_1_armhf.deb
dpkg -i linux-image-4.8.13-botic7-rc3_1_armhf.deb
sync

Botic5、Botic7をとばして、いきなりこの版にすることもできます。


こういう具合にBoticドライバそのものはカーネルのレベルアップに合わせて適当な周期でレベルアップされて来ています。問題は rootfs の debian 側は3年前のままなことです。カーネルとdebian側の整合性が崩れかかっているので、例えばMPDのビルドをしようとすると明にGCCのヴァージョンを指定する必要があります。このあたりを掲示板に書き込んだことがありますので、ここを参照して下さい。
対応策はdebianのヴァージョンを上げること。Botic4のイメージのDebianはWheezy版(Debian7)ですので、これをJessie版(Debian8)にします。次回はこの方法(Boticise)を解説します。

(PC_Audio)   2017/02/05

コメントする

I2Sの世界(2)


第1回に続けて、「自作する」=「多少の電子機器工作」を前提として、音の良いI2S接続のために、どうハードを選び、繋いでいくかを解説するつもりでしたが、順番を変えます。まず、I2S接続のためのソフトを紹介します。
理由は「鉄は熱いうちにうて」(ちょっと違うかな^^;;;)。最近、Boticに熱中していて、発見したことを忘れないうちに書いておいた方がいいと思ったからです。ハードの方はどうせ旧聞なので、思い出しながら書くということになるので、後回しにします。

前回書いたようにI2S接続可能なGPIOを持つSoCはRaspberryPIかBeagleBone Black/Greenだけです(以降、RPI、BBB/BBGと略します)。従って、ソフトはRPIかBBB/BBG対応のものに限定されます。I2S対応の機能を実現するにはOSの核の部分に手を入れる必要があります。そして、これも前回書きましたが、このOSへの取り込みはRPIの場合はOSに標準として取り込まれ、各種音楽ソフトで広くサポートされていますが、BBB/BBGの場合はチェコのmiero(Miroslav Rudišin)さんがBoticという名前の音楽ソフトで独自に対応されているだけです。

従って、トラブルを避けたければ、RPIをgetし、メイジャーな音楽ソフト(例えばvolumio)を選ぶのが無難です。多分、簡単な WEB GUI で、I2Sドライバを組み込み、音楽再生することが出来るはずです(僕は使ったことが無いので、良く知らないのですが^^;;;)。
しかし、この簡便さは音の良さと反比例します。「便利さは音の良さを犠牲にして成立する」というのはオーディオの世界での代表的な公理ですから。

というわけで、ここでは例によってマイナー路線。少数派のBoticを中心に、I2S接続するためのソフトの使い方を解説します。

Boticに関しては、最近、あっちこっちで取り上げられいます。マイナーなソフトだと思いますので、意外ですね。役に立ちそうなものをリンクします。

Botic v7をインストールする方法
たかじんさんのnew_western_elecに最近投稿された記事です。Boticのインストール方法から使い方まで丁寧にまとめられていますので、「まず、これを一読すべし」という内容です。
LINUX COMPUTING
linuxcomさんの記事サイトのトップページです。「BeagleBone Black で I2S DAC を接続する」、「BBB の Volumio に Botic kernel をインストール」、「Botic 対応 Volumio」などBoticに関連する記事があります。
BeagleBone + Botic で簡単DSD Native 再生(その1)
“y2blog”の比較的最近の記事。とりあえず、一回目の書き込みにリンクしますが、現在、「その6」まで記事があります。内容が詳細に渡り、素晴らしい。BBBとBoticとi2s接続の全てを知りたければ、ここを丁寧に読むのがお勧め。ブログ紹介の内容もいいですね。
デジタルな話ーBについて語りたい
moctさんのサイト。一回目の書き込みにリンクしておきます。Botic強化版のイメージを公開していらっしゃいます。Arch Linux版がお勧め。記事はその内容が中心にこれも12回目まで書かれています。
BBG(B)にBoticのインストール
mlj@放置中さんのサイトの記事。他にも「BBB botic mpdを0.19.15にupdate」、「BBB boticのupdate」、「BBB(G) Boticにブリッジ基板でI2S出力にしてみる」といった記事があります。
Beaglebone Black のI2S接続
2014年8月の記事。今回調べた中では一番古いBoticに関する記事です。残念ながら、中断しています。
BeagleBone Black をミュージックプレーヤーに
LINUXCOMさんのネットショップの方の記事。

次に英文のサイト。見つかるサイトは案外少ないです。というか、ご本家とDIYAudioのサポート掲示板だけです。とちらも大変重要です。大抵の問題の解決策はこの二つのサイトにあるはずです。

BeagleBone Black with I2S, DSD and SPDIF interface
ご本家。基本情報はここにあります。誰か和文にしませんか。
冒頭の一行が「Boticとは何か」について的確に表現しています。

Driver is available in the precompiled Linux distribution for BBB with installed MPD, basic web interface and other commandline tools. Let’s use common environment until all issues will be resolved.

セカンドセンテンスは孤軍奮闘している mieroさんの愚痴ですかね(^^;;;。
「buildroot を使ったらどうでしょう」と提案する手はありますね。

Support for Botic Linux driver
DIYAudioのBoticサポート掲示板です。作者のmieroさん直々に対応されていますので、基本情報はここで収集する必要があります。3年以上続いていますので、投稿数が多く(217ページ、2162投稿)、目的の情報にたどり着くのは大変ですが、サイトの検索機能を使えばなんとかなります。

こうやってみると日本語のサイトの情報が充実してますね。Boticは孤軍奮闘、少数派、マイナーなんて書いたけど、意外にメイジャーなんですかね(^^;;;。
という次第で、他のサイトと同じようなことを書いても意味はないので、他のサイトで書かれていないことを中心にまとめてみることにします。
今回はちょっと短いですが、重要な PostScript があるので、ここまで。

p.s. Boticized lightMPD を改版します。

本題に入る前に、前回重要なことを明示するのを忘れていました(^^;;;。

Boticized lightmpd は「着せ変え人形方式をとる抱きつき&乗っ取り型アーカイブ」です。digififanさんの公開されているBB版lightMPD v1.0.1 または v1.0.3に解凍、上書きする形で動きます。

よろしくお願いします。

Boticized lightMPD v0.2を公開します

公開して一週間しかたってないのですが、以下の理由で改版します。

  • mpdの 0.19 -> 0.20 のレベルアップに伴う修正が大規模なものらしいと分かったこと
    試しにとrtパッチをかけたら盛大にエラーになりました。これはレベルアップに伴う改修が大きいこと意味します。であれば、0.20 版を試してみる値打ちはあるなと考えました。
    なお、moctさんに0.20対応のパッチが出ていることを教えてもらいました。ありがとうございました。
  • mpd 0,19.xのDSD native再生はlistwealerさんのDSD nativeをかけることがベストと分かったこと
    「mpd-0.19.21rt のDSD native再生の音がいまいちだなぁ」と思っていました。moctさんの公開されているイメージに0.19.21対応のパッチがあったので、試してみました。結果はなかなか良いので、これも入れることにしました。
  • 最新のBBB用lightMPD v1.0.3が公開されたこと
    linux-4.9.3rt1、mpd-0.19.21rt-native-dsd と大幅にアップされ、ほぼ boticized lightmpdと同じレベルとなりました。これで両者(オリジナル版とboticized版)を比較することが簡単に出来ます。

boticized-lightmpd-v02.zipをダウンロード

内容は以下の通りです。変更している部分は赤で示します。

  adding: uEnv.txt (deflated 62%)
  adding: lightMPD/lightmpd.conf (deflated 58%)
  adding: lightMPD/mpd.conf (deflated 69%)
  adding: lightMPD/myscript.sh (stored 0%)
  adding: lightMPD/mpd-0.19.21rt (deflated 53%)
  adding: lightMPD/mpd-0.19.21rt-dsd (deflated 52%)
  adding: lightMPD/mpd-0.20.2rt (deflated 57%)
  adding: boot/zImage-botic (deflated 1%)
  adding: boot/zImage-botic-trump (deflated 1%)
  adding: boot/dtbs/am335x-boneblack-botic.dtb (deflated 77%)
  adding: boot/dtbs/am335x-boneblack-botic-sabre32.dtb (deflated 77%)
  adding: boot/uInitrd-botic-a-1 (deflated 1%)
  adding: boot/uInitrd-botic-l (deflated 1%)

初版で入れていた digififanさんが公開されている mpd-0.19.21rt-native-dsdはこの版では除外しました。理由は digififanさんがBBB版のlightMPDをレベルアップされ v1.0.3にされたためです。boticized-lightmpd-v02.zip は BBB版lightMPD v1.0.3にもインストールすることが出来ます。従って、v1.0.3にインストールすれば、mpd-0.19.21rt-native-dsdの最新版を使うことが出来ます。

以下、変更内容を解説します。

uInitrd-botic-a-1

mpd-0.20.2rtを動かすために、uInitrd-botic-a に以下のライブラリを追加しました。

libsystemd.so.0
libselinux.so.1
liblzma.so.5

mpd-0.19.21rt、mpd-0.19.21rt-dsdもこのrootfsで動きます。uInitrd-botic-aを残す意味はなさそうなので、除外しました。

mpd-0.19.21rt-dsd

debian jessie 環境で yan-digififan版rtバッチ(ここに最新版があります)と Lintweakerさんのdsdパッチをかけ、ビルドしたものです。

mpd-0.20.2rt

debian jessie 環境で yan+digififan版rtバッチをかけ、ビルドしたものです。これをディフォルトにしました。

uEnv.txtとlightmpd.conf

上記内容に対する修正を行いました。

インストール方法、シスムム内容については前回の記事を参照してください。


p.p.s. とても重要なtips

beaglebone用の最新のlightMPD v1.0.3でもインストール出来ます。v1.0.3にインストールして、uInitrd(uEnv.txtで指定)とmpd-0.19.21rt-native-dsd(lightmpd.confで指定)を組み合わせれば、すべてオリジナルの組み合わせでboticizeしたことになります(zImageはオリジナルの/proc/config.gzを使って、ビルドしています)。
この組み合わせとmpd0.20.2rt+uInitrd-botic-a(alsaをarch linux用alsaに入れ換えています)を比較試聴するのも面白いと思います。

(PC_Audio)   2017/01/28

コメントする

Boticized lightMPDを公開します


以下のスレッドでやりとりしてきたBoticized lightMPDを公開します。

Boticized lightMPDはBBB版のlightMPD に

am335x-boneblack-botic.dtb 
am335x-boneblack-botic-sabre32.dtb 
zImage-botic 
zImage-botic-trump 
uInitrd-botic-a 
uInitrd-botic-l 
mpd-0.19.21rt 
mpd-0.19.21rt-native-dsd(これはデジファイのおとさんが掲示板で公開されているものです) 
uEnv.txt 
lightmpd.conf 
mpd.conf 
myscript.sh 

を追加上書きするzipファイル(boticized-lightmpd.zip)として公開します。以下のリンクからダウンロードして下さい。

boticized-lightmpd.zipをダウンロード


インストール方法

Windows環境
ダウンロードしたboticized-lightmpd.zipを、オリジナルのBBB版lightMPDを作成したSDカードを指定して、解凍して下さい。
Linux環境
オリジナルのBBB版lightMPDを作成したSDカードをmountして、マウントポイントでunzipコマンドを使い、解凍して下さい。

以下は僕のVmwarePlayer ubuntu環境でのインストール例です。オリジナルのBBB版lightMPDのsdカードが/dev/sdbに差してあるとします。

sudo fdsisk /dev/sdb
a -> w
sudo mount /dev/sdb1 /mnt
cd /mnt
sudo wget -O boticized-lightmpd.zip http://mimizukobo.sakura.ne.jp/cgi-bin/downlog.cgi?upload/boticized-lightmpd.zip
sudo unzip boticized-lightmpd.zip
sudo umount /mnt

wgetはファイル名を指定するオプション(-O)をつける必要があります。
uEnv.txtなど設定ファイルについては上書きしてよいかという問い合わせが出ます。後述する内容で判断し、お使いの状況に合わせて、答えて下さい。
fdiskはsdカードの起動指定をonにするためです(設定済なら省略できます)。

システム内容

以下、システムの内容について簡単に解説します。

どういう具合にシステムを構成するかで悩みましたが、オリジナルのlightMPDに対して、着せ変え人形方式にすることにしました。zImage、uInitrd、am335x-boneblack-botic、mpdを uEnv.txt と lightmpd.conf を使って、取っかえ引っかえするという方式です。どうやって着せ変えるかについてはそれぞれの設定ファイルを見て下さい。関連する部分を引用すると

uEnv.txt

#kernel_file=uImage
#kernel_file=/boot/zImage
kernel_file=/boot/zImage-botic
#kernel_file=/boot/zImage-botic-trump
#initrd_file=/boot/uInitrd
#initrd_file=/boot/uInitrd-botic-l
initrd_file=/boot/uInitrd-botic-a
#fdtfile=am335x-boneblack.dtb
fdtfile=am335x-boneblack-botic.dtb
#fdtfile=am335x-boneblack-botic-sabre32.dtb

mpd.conf

[mpd]
#       load_module=mpd-0.19.9rt
        load_module=mpd-0.19.21rt
#       load_module=mpd-0.19.9rt-native-dsd
#       load_module=mpd-0.19.21rt-native-dsd

となっています。従って、ディフォルトの状態は

am335x-boneblack-botic.dtb +  zImage-botic + uInitrd-botic-a + mpd-0.19.21rt

となります。
組み合わせによっては動かないものがありますので、ご注意ください。例えば、mpd-0.19.21rt-native-dsd は uInitrd-botic-l か uInitrd(オリジナル)でないと動きません。

着せ変え人形(boticized-lightmpd)に着せ変える服(zImage、uInitrd、am335x-boneblack-botic、mpd)の内容について簡単に紹介します。

am335x-boneblack-botic-sabre32.dtb
この構成ファイルが何のためなのか分からないのですが、ESS sabre32関連のためだと思います。情報はここ位しかありません。
zImage-botic
ビルドのエラーに対して、rtc-omap.cを削除するという解決策をとっています。
zImage-botic-trump
ビルドのエラーに対して、rtc-omap.cを修正するという解決策をとっています。名前の由来はこのメッセージを読んで下さい。
uInitrd-botic-a
arch linuxのlibasound.so.2.0.0を使っています。
uInitrd-botic-l
lightmpdのlibasound.so.2.0.0を使っています。

以上二つに関して、何のことだか分からない方はこのメッセージを参照して下さい。

mpd-0.19.21rt
僕がコンパイルしたものです。バッチはrtパッチのみです。
mpd-0.19.21rt-native-dsd
デジファイのおとさんが公開されているものです。公開の情報はここにあります。

次に設定ファイルの変更について紹介します。

uEnv.txt
変更点は
(1)着せ変え人形方式に対応するための使っていないファイルのコメントアウト、
(2)uInitrdの太りすぎ対策、
(3)I2S対応のoptargs です。
lightmpd.conf
着せ変え人形方式に対応するため、mpdモジュールの指定部分を変更しています。
mpd.conf
変更点は
(1)audio_outputのdsd対応設定を追加
(2)samplerate_converter(“soxr very high”)行をコメントアウトしています。


最後に、その他の変更点です。

usbの優先レベル設定

var.rom/lightMPD/bin/irqhandler.scmの

(define (default-irq systype)
  (cond [(string=? systype "beaglebone") '(("musb-hdrc.1.auto" "FIFO:19"))]

と変更して、設定しています。

myscript.sh

lightMPD で rc.local風に使えます。初期内容は

#!/bin/sh
echo "Welcome to Boticized lightMPD"
mount /dev/mmcblk0p1 /mnt

となっています。
「何じゃ、これは」という方はコメントアウトして下さい。


Boticized lightMPDは無保証です。自由にご利用いただいて結構ですが、内容については、デジファイのおとさんも、mieroさんも、僕も一切の責任はもたないという条件でご利用ください。
また、Boticize化の責任は僕にありますので、サポートは僕のサイトの掲示板で行います。バグ報告、質問はこの掲示板のスレッドで行います。
公開されたソフトについて、デジファイのおとさんの掲示板で質問されないようよろしくお願いします。

上記リンク先のスレッドでは多くの方にご協力頂きました。また、今回、改造のため悪戦苦闘して、はじめてデジファイのおとさんがこれまでのサポート対応にどれだけ努力されたかよく分かりました。改めて皆様に感謝いたします。

(PC_Audio)   2017/01/21

コメントする

BBB/BBG Arch linuxシステムでMPDをビルドする

前回の「音楽用APU2c4にArch Linuxシステムを作る(4)」のBBB/BBG対応版です。
autogenまでは同じです。

pacman -S libid3tag ffmpeg
pacman -S git make autoconf automake libtool pkg-config patch unzip
pacman -S gcc boost wget
wget http://www.musicpd.org/download/mpd/0.19/mpd-0.19.21.tar.xz
tar -Jxvf mpd-0.19.21.tar.xz
cd mpd-0.19.21
patch -p1 < ../mpd-0.19git-rtopt20140327.patch
./autogen.sh

不思議なのことに、apuでのエラーメッセージは出ません。気にしないことにします。
configureは最終部分の最適化オプション以外は同じです。最適化オプションはたかじんさんの設定をパクっています。

nano ../myconfig

CFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \
-mfpu=neon-vfpv4 -mfloat-abi=hard" \
CXXFLAGS="-O2 -march=armv7-a -mtune=cortex-a7 \
-mfpu=neon-vfpv4 -mfloat-abi=hard" \
--with-systemdsystemunitdir=/lib/systemd/system

最終行はsystemdのディレクトリ指定です。

sh ../myconfig
make && make install

前回書いたようにエラーになりません。
あとは必要ならsystemdの設定を変更してmpdを入れ換えればいいです。
結局、アーキテクチュアが違っても、挙動は多少違うが、ビルドのやり方はまったく一緒ということになります。

短いので、関連する話題でいくつか。

MPD関連のパッチについて

前回、yanさんのrtパッチをlightMPDの作者デジファイのおとさんが引き継がれていることを紹介しましたが、同様にlintweakerさんも彼のGitHubで0.18対応版(0.19でも使えると思います)を公開されていますね。前回PostScriptで書いたようにこちらの方は64bit版GCCでの問題も対応しています。
東西で最先端の音楽ソフトを公開されている作者お二人がyanさんのパッチに注目され、メンテナンスされているというのは興味深いことだなぁと思います。yanさんのパッチの先見性の証明ですね。お二人に感謝です。
あと、lintweakerさんのGitHubサイトには MPD 0.19 に対するDSDネイティブ再生対応のパッチがおかれています。また、xmos-native-dsd対応のパッチ、 Mytek Digital Stereo192-DSD DAC対応のドライバもこちらにあります。
このあたり、いろいろありすぎてややこしいのですが、前回ご紹介したデジファイの音さんへのリンク先が参考になるかとと思います。

「-mfpu=neon」について

「-mfpu=neon」についてはここに情報があります。要約すると、「Linuxカーネルの中ではFPUを使った浮動小数点演算を一切行っていないが、RAIDや暗号化などカーネルモジュールの中でも浮動小数点演算を行った方がが効果的な場合もある。そこで、linuxのv3.12からkernel mode NEONという機能が追加され、ある決まった手順に従うことでカーネルの中でNEON命令が使えるようになった」ということです。詳しくはこのドキュメントを参照。

P9を使って電源のオフ

電源のオフについてはlinuxcomさんのところに情報があります。パワースイッチ(S3) の制御信号 PWR_BUT はIO コネクタ P9 の 9 番ピンにアサインされているようです。

nohupコマンド

コンパイルには30分以上かかります。sshから起動すると、この間、puttyを終わらせることはできません(呼び出したコンパイル処理が止まってしまうため)。回避するにはログアウトしてもプログラムを実行続けるようnohupを使って呼び出せばいいです。

nohup make

arch linuxで日本語表示させる方法

ロケールの設定

nano /etc/locale.gen
eu_ES.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

localectl set-locale LANG="ja_JP.UTF-8"
nano /etc/locale.conf
LANG=ja_JP.UTF-8
LC_NUMERIC=ja_JP.utf8
LC_TIME=ja_JP.utf8
LC_MONETARY=ja_JP.utf8
LC_PAPER=ja_JP.utf8
LC_MEASUREMENT=ja_JP.utf8

locale-gen
reboot

locale
locale -a

パスワード入力後の待ち時間対策

ここに解説があります。

nano /etc/ssh/sshd_config
AddressFamily inet


p.s. 何でこんな記事を書いたか、掲示板をお読みの方には下心がバレバレですね。
結論ですが、arch-boticをMPDコンバイルのベーズマシンにするのはちょっと大変ですね。lddで関連ライブラリの数を調べたら200以上あります。不思議なのはjackとか、pulseなどconfigureで明にdisalbleしているライブラリも関連ライブラリとして登録されることです。「困ったなぁ、どうしよう」と思案中です。buildrootって、簡単にライブラリ管理できるのですかね。

(PC_Audio)   2017/01/15

コメントする

音楽用APU2c4にArch Linuxシステムを作る(4)

mpdのビルド

mpdのインストールと動かし方については以前のRPiでの書き込みと変わりはないので、省略します。
ここではその後のビルド方法について。

ビルドに必要なバッケージのインストール

pacman -S git make autoconf automake libtool pkg-config patch

これは以前の書き込み(サルでも作れる MPD on Arch Linux)と同じです。

pacman -S gcc boost wget

これは今回必要だったもの。何故、以前の書き込みでgccが抜けていたのか、理由は謎です(^^;;;。
ちなみにboostとは

Boost provides free peer-reviewed portable C++ source libraries.

だそうです。要するにCのライブラリです。

ソースとパッチのget

mpdのソースはご本家から

download -> Source Code -> All versions

で適当な版をダウンロードしてくる。現時点での登録されている最新は0.19.20です。
gitでダウンロードする方法(git clone git://git.musicpd.org/master/mpd.git)はあるが、最新版は不安定なので、お勧めしません。
wgetなりcurlでダウンロードするのが楽です。

wget http://www.musicpd.org/download/mpd/0.19/mpd-0.19.20.tar.xz
tar -Jxvf mpd-0.19.20.tar.xz
cd mpd-0.19.20

mpd-0.19.20というディレクトリに解凍(tar -Jxvf)されますので、そこに移動。
yanさんのパッチについてはデジファイさんが引き継がれて、こちらに公開されています。mpd-0.19git-rtopt20140327というものが0.19.21でもOKなようです(mpd-0.19git-rtopt20150418.patchという版もありますが、なんのための版か不明です)。パッチをかけるには、直接wget出来ないので、適当な方法でダウンロードし/rootディレクトリに持ってきておきます。

patch -p1 < ../mpd-0.19git-rtopt20140327.patch

なお、mpdに対するrtoptとdsd関連のパッチについてはLightMPDご本家のサイトでデジファイのおとさんが詳細な解説を公開されています。同サイトのこのあたりこのあたりの記事はとても参考になります。
さて、ビルドに取りかかります。

./autogen.sh
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /usr/bin/automake line 3936.
・・・
Makefile.am: installing 'build/depcomp'
parallel-tests: installing 'build/test-driver'

「正規表現がおかしいよ」というメッセージが出力されていますが、deprecatedですから、無視。無事終わったようです。
次にコンパイルの方法(MPDの機能)を指定をするmyconfigをスクリプトとして作成します。

nano ../myconfig

#!/bin/sh
./configure \
--disable-bzip2 \
--disable-iso9660 \
--disable-zzip \
--enable-id3 \
--disable-sqlite \
--enable-ffmpeg \
--enable-alsa \
--disable-wave-encoder \
--enable-pipe-output \
--enable-httpd-output \
--disable-recorder-output \
--disable-sndfile \
--disable-oss \
--disable-shout \
--disable-pulse \
--disable-ao \
--disable-mad \
--disable-jack \
--disable-cdio-paranoia \
--disable-soundcloud \
--disable-inotify \
--disable-ipv6 \
--enable-curl \
--disable-mms \
--disable-wavpack \
--disable-lame-encoder \
--disable-twolame-encoder \
--disable-vorbis \
--disable-lsr \
--enable-rtopt \
--with-zeroconf=auto \
CXXFLAGS="-O3 -march=native"

最後の最適化の指定を除いて全てmpdに機能を組み込むかどうかの指定です。選ぶ機能は必要最低限にします。最適化のオプションについてはここを参考にしました。 configure、makeを実行します。/usr/local/binのmpdを動かしている場合は –kill しておきます。

sh ../myconfig
make && make install

ところが

・・・
src/rt_opt.cxx:292:90: エラー: オーバーロードされた ‘GetBlockValue(const char*,                    size_t)’ の呼び出しは曖昧です
 ram->GetBlockValue(RTOPT_STACKRESERVE_NAME,RTOPT_DEFAULT_STACK_RESERVE) * 1024;
・・
src/rt_opt.cxx:294:88: エラー: オーバーロードされた ‘GetBlockValue(const char*,                    size_t)’ の呼び出しは曖昧です
 param->GetBlockValue(RTOPT_HEAPRESERVE_NAME,RTOPT_DEFAULT_HEAP_RESERVE) * 1024;
・・
make[1]: *** [Makefile:13235: src/rt_opt.o] エラー 1
make[1]: ディレクトリ '/root/mpd-0.19.21' から出ます
make: *** [Makefile:4335: all] エラー 2

エラーですね。「変だなぁrpiやbbbでは問題はないのに」。とりあえずソースを眺める。

      stack_reserve = param->GetBlockValue(RTOPT_STACKRESERVE_NAME,RTOPT_DEFAULT_STACK_RESERVE) * 1024;

という行が問題なようです。32bit環境だとこの行は問題にならないのですが、64bit環境だと問題になるようですね。 問題が発生している場所はstack_reserveとheap_reserveのメモリサイズを設定して場所です。メモリ容量が4GBの壁を超えることになるから、このサイズの指定方法を変えないといけないということらしい。しかしC++は知らないので、どうやって直せばいいのかさっぱり分からん状態。どうするか。

//      stack_reserve = param->GetBlockValue(RTOPT_STACKRESERVE_NAME,RTOPT_DEFAULT_STACK_RESERVE) * 1024;
        stack_reserve = 1024 * 1024;

//      heap_reserve  = param->GetBlockValue(RTOPT_HEAPRESERVE_NAME,RTOPT_DEFAULT_HEAP_RESERVE) * 1024;
        heap_reserve  = 10240 * 1024;

「なに、これ」とあきれ果てられそうですが、最も安易な方法(^^;;;で解決する方法をとりました。 それで、もう一度実行してみる。

make clean
./autogen.sh
sh myconfig
make && make install

当たり前ですが、うまくいきました。
systemdの変更が必要です。

nano /usr/lib/systemd/system/mpd.service

ExecStart=/usr/local/bin/mpd --no-daemon /etc/mpd.conf

これで、systemdからmpdを再起動させます。

systemctl --system daemon-reload
systemctl disable mpd.service
systemctl enable mpd.service
systemctl start mpd.service

めでたく、RTパッチのかかった最新のmpdになりました。

とここまで書いた後、lintweakerさんのgitサイトを覗いたら、この件のパッチが既に提供されていることが分かりました。もちろんデジファイのおとさんのrtパッチ用ではなく、lintweakerのrtパッチに対するものですが、どちらもyanさんのrtパッチをベースにしていますので、問題は無いようですね。きちんと対応させたい方はリンク先のパッチを使うといいです。

(PC_Audio)   2017/01/06

コメントする

top page     previous page     next page

mail