BeagleBone Black 版 Volumio のビルド
今年の3月 Volumio がサポートする公式なプラットフォームから BeagleBone Black(BBB) が外れました。メインとなるプラットフォームである Raspberry Pi と x86 に注力するようです。そのため BBB のイメージファイルは Volumio のダウンロードページからダウンロードできなくなっています。
しかし完全に BBB 版のサポートをしなくなったわけではなく、「公式」なサポートではないけどコミュニティ移植版をセットアップしているので自分でビルドしてね、質問も受け付けるからということらしいです。
ということでビルドしてみることにしました。
ビルド環境
ビルドする環境は少し注意が必要なようです。VirtualBox 上の Ubuntu 17.10 でビルドしましたが動作しませんでした。Ubuntu 16.04 LTS 日本語 Remix でも同様に動作しません。ビルドのリポジトリには
ということが書かれているので疑いもなく Ubuntu でビルドしていたのでした。しかし multistrap ファイルの 989 行付近には $forceyes は見つからなかったのですがこのことが何か関係があるのでしょうか。
Support for Botic Linux driver で Mull3t さんが Debian Jessie じゃないとちゃんと動くイメージができないと投稿していたのを見て Debian 8.0 で試したところ動作するイメージができました。
ビルドのスイッチオプション
BBB の CPU は Cortex-A8 を採用しています。Cortex-A8 のアーキテクチャは ARM の v7 バージョンなのでビルドの architecture スイッチのオプションは armv7 で良いと思うのですが出来上がったイメージでは旨く動作しません。Armv8 でもだめです。前述した Mull3t さんは armv7 を指定しています。
結局 architecture のオプションは arm とすることでできました。Armv7 でダメな理由はわかりませんが arm としてビルドしたイメージではちゃんと動いているようです。
How To ビルド
ビルドの方法をまとめておきます。といってもビルドのリポジトリに記載されているそのものですが。
必要なソフトウェアをインストールします。
# apt-get install git squashfs-tools kpartx multistrap qemu-user-static samba debootstrap parted dosfstools qemu binfmt-support qemu-utils
リポジトリのクローンを volumio_bbb ディレクトリ以下に作成します。ちなみにここでは赤外線リモコン(Lirc_BBB)をサポートしたリポジトリでビルドします。
# git clone https://github.com/Tigor888/Volumio_BBB volumio_bbb
作成された volumio_bbb ディレクトリに移動します。
# cd volumio_bbb
ビルドのスクリプトを実行します。
./build.sh -b arm -d bbb
ビルドのスイッチオプションでバージョンを指定していない場合 Volumio-<yyyy-mm-dd>-bbb.img ファイルが出来上がっています。
作成されたイメージファイルをマイクロ SD カードに焼いて Volumio を起動します。VolumioIP/DEV ページで SSH ENABLE をクリックして SSH を有効にします。Uname コマンドでシステム情報を確認。
volumio@volumio:~$ uname -a Linux volumio 4.8.13-botic7-rc3 #25 PREEMPT Thu Mar 8 14:24:44 EET 2018 armv7l GNU/Linux
数日使っただけですが公式にサポートされていたバージョンの volumio-2.194-2017-06-11-bbb.img に比べ PCM、DSD ダイレクト再生そして Spotify も特に大きな問題は確認できませんでした。
赤外線リモコン
Lirc モジュールの起動確認
Lirc_bbb が使えるようになっているか確認してみます。
起動時にカーネルが出力するメッセージで lirc が含まれる行を dmesg コマンドで抽出します。
volumio@volumio:~$ dmesg | grep lirc [ 12.263618] lirc_dev: IR Remote Control driver registered, major 244 [ 12.351728] lirc_bbb: module is from the staging directory, the quality is unknown, you have been warned. [ 12.384732] lirc_bbb lirc_bbb.0: lirc_dev: driver lirc_bbb registered at minor = 0 [ 12.384824] lirc_bbb: manually using active low receiver on GPIO pin 65 [ 12.384829] lirc_bbb: transmitter on GPIO pin 27
2 行目のメッセージが気になりますが、一応読み込まれているようです。また受信信号の入力は GPIO の65ピンに割り当てられています(B3D 基板や BBB ブリッジ基板 Type-AK では GPIO の66ピンであれば都合が良かったのですが)。GPIO ピンの割り当てを変更することはできると思うのですが方法がわかりません。
Lirc 関連モジュールがロードされているかを確認します。
volumio@volumio:~$ lsmod | grep lirc lirc_bbb 6355 3 lirc_dev 10665 1 lirc_bbb
よさそうですね。
ハードウェアの変更
GPIO の65ピン(P8 の18番ピン)に受信信号を入力するように基板の修正をします。ブリッジ基板 Type-AK の場合、CN3 の 17,18番ピンにピンヘッダーをハンダ面側にハンダ付けし、17番ピンと8番ピンをジャンパー線で接続します。これで CN5 の1番ピンが +3.3V、2番ピンがリモコン受信信号、3番ピンが GND となります。

B3D シリーズ基板の場合はもう少し複雑です。GPIO の65ピンは B3D シリーズ基板に簡単に取り出すことはできません。そこで BBB(G) 基板に手を入れます。BBB(G) の P8 の18番ピンと7番ピンをジャンパー線で接続します。尚、これは BBB(G) の GPIO の66ピンを使っていないことが前提ですので他のモジュール等で GPIO 66ピンを使う場合はできません。自己責任でお願いします。:-)

次に B3D シリーズ基板を変更しますが、3.3V リレーミュート付き RCA ジャック基板を使う場合と使わない場合で内容が異なります。
3.3V リレーミュート付き RCA ジャック基板を使わない場合はハンダ面のハンダジャンパー(J4)をオープンにし、部品面のハンダジャンパー(J3)をショートすることで B3D シリーズ基板の CN6 を使って赤外線リモコン受信モジュールを接続できます。

3.3V リレーミュート付き RCA ジャック基板を使っている場合は、はんだ面のハンダジャンパー(J4)をショートさせ、部品面のハンダジャンパー(J3)はオープンにします。そして赤外線リモコン受信モジュールに接続したケーブルの信号線をハンダジャンパー(J4)の片側(基板外側)と、 3.3V 電源(CN1 の3、4番ピン)と GND(CN1 の1、2番ピン)を直接はんだ付けします。

赤外線リモコン受信モジュールは秋月電子で入手可でき 3.3V 電源で使用可能な OSRB38C9AA を使いました。このモジュールは1番ピンがリモコン受信信号、2番ピンが GND、3番ピンが電源になっていますのでこれに合わせてケーブルの接続を変えます。そしてケーブルに OSRB38C9AA を取り付けます。

設定ファイルの修正
リモコンの操作を可能にするには /etc/lirc/lircd.conf と /etc/lirc/lircrc の2つの設定ファイルを修正します。アップルの Apple Remote MC377J/A の場合の設定ファイルです。
/etc/lircd.conf は
# Please make this file available to others # by sending it to# # this config file was automatically generated # using lirc-0.9.0-pre1(default) on Mon May 28 05:00:14 2018 # # contributed by # # brand: apple_remote.conf # model no. of remote control: # devices being controlled by this remote: # begin remote name apple_remote flags RAW_CODES|CONST_LENGTH eps 30 aeps 100 gap 107190 begin raw_codes name enter 9070 4465 565 555 594 1632 569 1659 568 1659 591 531 566 1662 597 1630 571 1653 596 1630 567 1659 570 1656 590 534 596 526 567 558 568 555 567 1658 597 527 569 555 596 1631 570 1654 594 1631 568 557 595 1630 598 526 596 527 593 1634 568 554 596 528 570 1656 567 1660 594 1634 590 1649 567 name up 9091 4446 589 536 587 1637 618 1608 589 1637 591 534 590 1635 617 1611 618 1609 615 1612 591 1636 589 1637 590 535 588 538 586 536 613 511 588 1635 592 534 615 1610 589 537 589 1635 615 510 589 534 589 535 589 534 590 537 586 1637 618 507 589 536 586 1637 589 1636 592 1634 590 1655 614 name down 9091 4443 588 534 588 1637 590 1635 590 1635 590 534 592 1633 592 1633 591 1636 590 1635 591 1638 588 1637 592 535 588 534 591 532 590 534 589 1636 593 543 582 532 589 1635 592 1635 591 537 587 534 591 538 591 530 588 538 586 1635 590 536 587 539 587 1634 589 1637 589 1636 591 1651 591 name next 9093 4448 612 509 588 1636 615 1613 588 1637 590 539 587 1642 608 1611 616 1609 591 1636 615 1616 587 1636 589 537 587 535 588 537 587 537 588 1638 588 534 590 1636 614 1613 616 511 614 509 589 535 613 514 584 536 588 537 612 1612 588 537 615 510 613 1632 578 1645 578 1648 605 1636 577 name prev 9104 4440 581 536 584 1643 612 1612 607 1613 614 519 587 1642 611 1616 583 1640 585 1642 578 1635 587 1636 591 534 614 510 616 508 588 536 588 1636 616 1610 621 510 583 536 586 1637 590 536 588 536 589 534 613 511 587 536 615 1610 588 536 588 535 591 1635 592 1636 589 1638 615 1626 615 name menu 9093 4442 591 534 590 1637 589 1634 592 1635 592 533 591 1634 591 1639 586 1636 592 1634 591 1636 591 1635 595 530 591 534 590 533 592 533 590 1635 590 1637 592 1636 590 534 591 532 591 533 590 535 588 535 590 536 587 537 588 1637 589 535 590 532 590 1635 592 1635 590 1636 591 1650 592 name play 9114 4418 591 534 587 1637 613 1611 591 1637 589 539 585 1636 592 1635 590 1637 590 1650 590 1641 582 1644 579 530 589 540 611 511 614 511 589 1643 586 1642 607 1620 579 1647 580 1647 712 1516 579 531 588 1643 586 536 587 535 589 1641 596 526 591 530 598 1639 609 1613 587 1638 591 1656 589 end raw_codes end remote
リモコンのボタンと name との対応は以下のようにしています。

押されたボタンでどう動くかは /etc/lirc/lircrc できまります。
begin prog = irexec button = play config = /usr/local/bin/volumio toggle end #begin #prog = irexec #button = enter #config = /usr/local/bin/volumio volume toggle #end begin prog = irexec button = up config = /usr/local/bin/volumio volume plus end begin prog = irexec button = down config = /usr/local/bin/volumio volume minus end begin prog = irexec button = prev config = /usr/local/bin/volumio previous end begin prog = irexec button = next config = /usr/local/bin/volumio next end #begin #prog = irexec #button = menu #config = /usr/local/bin/volumio toggle #end begin prog = irexec button = menu button = enter button = menu config = /sbin/shutdown now -h end
再生とポーズは「play」ボタンのトグルで、シャットダウンは「menu」→「enter」→「menu」と続けて押すことで実行されるようにしています。
これでリモコンの操作はできるようになりましたが、ボリュームがうまく動作しません。「down」を一度押すとボリュームが 100 から 90 に減りますが、再度「down」を押しても変化しません。
イメージファイルの公開
ここで紹介したイメージファイルを公開します。uEnv.txt の optargs をブリッジ基板や B3D 基板シリーズに最適化してビルドしていますので SD カードにインストールした後編集する必要はありません。自己責任での使用を前提としてよかったら使ってみてください。:-)