12
04
2016
BeagleBone + Botic で簡単DSD Native 再生(その1)
BeagleBone + Botic の組み合わせで I2S & DSD Native再生をテストしてみた
BeagleBone BlackにI2S接続用のDACインタフェースを載せてテスト中
1号機はアイソレータ無しで、2号機は狭い基板上にアイソレータを無理矢理搭載
今回は動作検証用なので、簡単なロジックICの組みあわせで手抜き試作
DIP 8 pin 変換基板にオシレータを載せて、簡単に交換可能にしてある
これまでRaspberry Pi で I2S 再生を試みてきたが、Raspberry Pi ではハードウェアの制約や特殊なハードウェア環境の自作、専用のドライバソフトウェアの開発など、相当な努力をしなければNative DSDの再生ができない.時間があれば挑戦してみたいが、苦労の割にはメリットが無さそうなのでRaspberry Piによるディジタルオーディオ再生は完全に足踏み状態だった.
I2S接続による再生が可能なのは Raspberry Piだけかと思っていたら、BeagleBone BlackやBeagleBone GreenなどのBeagleBone系のマシンでもI2Sが可能で有ることが判明したので、試しにBeagleBone Blackで簡単な自作回路を付加するだけで簡単にI2S再生ができたので、そのやり方を簡単に紹介しておくことにする.ダイレクトI2S接続方式による再生については情報が沢山あるのでそれ程苦労する事無く BBB/BBG + Botic の組みあわせで音出しが可能だが、DSD Native (ここではUSB接続のDDCを介さずに、DACを直接BBB.BBGのGPIOポート [P8, P9] に接続することを指す)再生についても、ESS社の ES9018K2M などの自動DSD再生可能なDACを用いれば、I2C/SPI などでDACチップの制御レジスタを弄ることなく、いとも簡単にDSD Naive 再生が出来てしまう.これまでRaspberry Piなどで実現しようとして考えあぐねていた事が、あっけないほど簡単に実現できてしまったので拍子抜けしてしまったぐらいだ.
...と言う訳で、Raspberry Pi を捨てて、BeagleBoneによるデジタルオーディオシステムに完全に移行することにした.
BeagleBoneによるデジタルオーディオシステムについてはとても1回で紹介しきれないので、今後記事を数回に分けて紹介して行くことにする.先ずは BeagleBone 系のシングルボードコンピュータと “I2S/Native DSD” 再生を可能とする “Botic” ディストリビューションについて照会する.次に Botic の最新版へのアップデート方法と必要最低限のLinux OSの環境構築、I2S/Native DSD 再生のためのハードウェア(BeagleBoneでは本体の上にスタックする拡張ボードの事をケープ “cape” と呼んでいる)の自作について紹介する予定だ.最後に Botic 上で MPD による再生以外に、巷で話題の Roon の再生機(RoonBridge化)として活用させる方法についても紹介することにしよう.
先ずはBeagleBone について
Raspberry Piと違ってBeagleBone系のマシンはハードウェア情報や回路図が公開されており、自作のハードウェアを安心して組み合わせることができる.現在日本では BeagleBone Black(BBB)とBeagleBone Green (BBG) の2機種が比較的容易に入手可能だ.この2機種とも秋月電子で販売されているので、地方の人でも通販で入手できるだろう.秋月電子での販売価格は、BBBが6,500円、BBGが4,980円(いずれも税込価格)なので、Raspberry Piと同じレベルの金額だ.
【秋月電子の製品情報】
・BeaglBone Black (Element14)
・BeaglBone Green (Seeed Studio)
BBBとBBGの違いはHDMI系の表示機能が有るか無いかの違いが大部分で、それ以外の機能はほぼ同じでソフトウェア的にはBBB/BBGのどちらでも同じように動作するということだ.ディジタルオーディオ用途にはHDMI系のノイズの影響が少ないBBGの方が適していると思われる.
BeagleBoneについての詳しい情報は、御本家の BeagleBoard.org のホームページを見るのが一番だ.日本ではあまり BeagleBone関係の書籍は出回ってはいないが、CQ出版社の インタフェース Special 2014年3月号 “LinuxガジェットBeagleBone BlackでI/O” が参考になりそうだ.
BBB/BBGのプロセッサ TI AM3358はデジタルオーディオ用途に最適
BeagleBone系のシングルボードコンピュータで使われているTI製のTI AM3358 Sitara Processorには McASP(Multichannel Audio Serial Port) というデジタルオーディオ用の汎用シリアルインタフェース機能が備わっており、この機能を使うことで比較的簡単にデジタルオーディオインタフェースを組むことが可能だ.
McASP の機能をホームページ上の説明から引用すると、
・Up to Two Multichannel Audio Serial Ports (McASPs)
Transmit and Receive Clocks up to 50 MHz
Up to Four Serial Data Pins per McASP Port With Independent TX and RX Clocks
Supports Time Division Multiplexing (TDM), Inter-IC Sound (I2S), and Similar Formats
Supports Digital Audio Interface Transmission (SPDIF, IEC60958-1, and AES-3 Formats)
FIFO Buffers for Transmit and Receive (256 Bytes)
となっており、まさにデジタルオーディオのための機能だ.
【Texas Instruments社の McASP関連資料】
・「TMS320C6000 DSPマルチチャネル・オーディオ・シリアルポート (McASP) 」
・ Tools and Techniques for Audio Debugging
・ Interfacing DRA7xx Audio to Analog Codecs
自分でMcASP関連のドライバなどを開発する際には参考になりそうだが、単に Boticなどを利用して再生だけを行うのであればここまで深入りする必要は無さそう.
【BeagleBone Black/Green の技術資料の入手】
- ・BeagleBone Green info at BeagleBoard page
- ・BeagleBone Green System Reference Manual (v1a) [PDF]
- ・BeagleBone Green Schematic Diagram [PDF]
- ・Beagleboard:BeagleBoneBlack
BBB/BBG のI2S再生で登場する “Botic” とは
一言で説明するのは難しいが、簡単に言ってしまえば BeagleBone用に開発された、MPDを搭載したプリコンパイル済みのLinuxディストリビューションで、I2S/DSD Native 再生可能なデジタルオーディオに特化したものと解釈すれば良いだろう.”Botic”に関する詳しい情報は、開発者である Miroslav Rudišin (Miero)さんのホームページ ”BeagleBone Black with I2S, DSD and SPDIF interface” [ http://bbb.ieero.com ] を参照して欲しい.(開発者の情報がホームページには記載されていないので、この名前で正しいのかどうか良く判らないが、このドメインの Whois 情報や DIY Audioのサポートページ、GitHubなどから推定した.間違っていたらご免なさい...)
“Botic” ディストリビューションを利用するのは、上記のホームページを参考にすれば難しいことはないが簡単に紹介しておく.先ず最初に注意書きが書かれているので、ここでも注意書きを要約しておくことにする.
・BeagleBone Black/Green を外部クロックを用いずに 44.1kHz系(88.2kHz, 176.4kHz, 352.8kHz,…)のオーディオファイルを再生すると、48kHz系列でリサンプリングされてしまう.(多分ピッチが速くなってしまい聞くに堪えない)
⇒ 内部クロックでは 48kHz系列しか対応できない
要はCDなどの44.1kHz系列の音源を聞く場合には、外部クロックジェネレータを用いて、44.1kHz/48.0kHz系列の音源を再生できるようにする必要があるという事のようだ.
・BeagleBone Black(Green) とDACハードウェアとを直接接続することは推奨しない(何らかのアイソレータを用いて接続する事を推奨)
⇒ Beagle Bone はデリケートで壊れやすい
この作者と同じように私もBBBを1台購入後直ぐに壊してしまったので、Beagle Boneが壊れやすいのは本当のようだ.
【ステップ 1】Boticのインストール
インストール手順としては先ず、 “BeagleBone Black with I2S, DSD and SPDIF interface” ホームページ内のダウンロードリンク “http://bbb.ieero.com/botic4” からBotic V4イメージ “bbb-botic-v4-1gb.img.gz” をダウンロードし、解凍後に1GB以上の容量を持つ Micro SDカードにイメージファイルを書き込む.この辺の手順は個人の環境によって大きく異なるので、ここでは私のiMac環境で実施したときの様子を示しておく.基本的に Volumio などの場合と同じ手順なので、コマンドラインが苦手な場合は、イメージ書き込み用のツールを使えば良い.
iMac27:BoticBBB yasuaki$ ls -la
total 240088
drwxr-xr-x 4 yasuaki staff 136 Dec 4 16:09 .
drwxr-xr-x+ 65 yasuaki staff 2210 Dec 4 16:03 ..
-rw-r--r-- 1 yasuaki staff 5388 Apr 29 2015 README-botic4
-rw-r--r-- 1 yasuaki staff 122913875 Feb 22 2015 bbb-botic-v4-1gb.img.gz
iMac27:BoticBBB yasuaki$ gunzip bbb-botic-v4-1gb.img.gz
iMac27:BoticBBB yasuaki$ ls -la
total 1433616
drwxr-xr-x 4 yasuaki staff 136 Dec 4 16:10 .
drwxr-xr-x+ 65 yasuaki staff 2210 Dec 4 16:03 ..
-rw-r--r-- 1 yasuaki staff 5388 Apr 29 2015 README-botic4
-rw-r--r-- 1 yasuaki staff 734003200 Feb 22 2015 bbb-botic-v4-1gb.img
iMac27:BoticBBB yasuaki$ diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *480.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Maverics 128.0 GB disk0s2
3: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 32.0 GB disk0s3
4: Microsoft Basic Data Win7Pro 63.9 GB disk0s4
5: Apple_CoreStorage 135.4 GB disk0s5
6: Apple_Boot Boot OS X 134.2 MB disk0s6
7: Apple_HFS ElCapitan 119.5 GB disk0s7
8: Apple_Boot Recovery HD 650.0 MB disk0s8
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *3.0 TB disk1
1: EFI EFI 209.7 MB disk1s1
2: Apple_HFS MavericsSub 128.3 GB disk1s2
3: Apple_HFS ElCapitanSierra 127.8 GB disk1s3
4: Apple_Boot Recovery HD 650.0 MB disk1s4
5: Microsoft Basic Data SHARED 256.7 GB disk1s5
6: Apple_CoreStorage 1.0 TB disk1s6
7: Apple_Boot Boot OS X 134.2 MB disk1s7
8: Apple_HFS Data 1000.0 GB disk1s8
9: Apple_HFS Tmp 484.1 GB disk1s9
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Home *1.1 TB disk2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *4.0 GB disk3
1: Linux 4.0 GB disk3s1
iMac27:BoticBBB yasuaki$ diskutil unmount /dev/disk3s1
disk3s1 was already unmounted
iMac27:BoticBBB yasuaki$ sudo dd bs=1m if=./bbb-botic-v4-1gb.img of=/dev/rdisk3
Password:
700+0 records in
700+0 records out
734003200 bytes transferred in 57.949702 secs (12666212 bytes/sec)
iMac27:BoticBBB yasuaki$ diskutil list
/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *480.1 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Maverics 128.0 GB disk0s2
3: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 32.0 GB disk0s3
4: Microsoft Basic Data Win7Pro 63.9 GB disk0s4
5: Apple_CoreStorage 135.4 GB disk0s5
6: Apple_Boot Boot OS X 134.2 MB disk0s6
7: Apple_HFS ElCapitan 119.5 GB disk0s7
8: Apple_Boot Recovery HD 650.0 MB disk0s8
/dev/disk1
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *3.0 TB disk1
1: EFI EFI 209.7 MB disk1s1
2: Apple_HFS MavericsSub 128.3 GB disk1s2
3: Apple_HFS ElCapitanSierra 127.8 GB disk1s3
4: Apple_Boot Recovery HD 650.0 MB disk1s4
5: Microsoft Basic Data SHARED 256.7 GB disk1s5
6: Apple_CoreStorage 1.0 TB disk1s6
7: Apple_Boot Boot OS X 134.2 MB disk1s7
8: Apple_HFS Data 1000.0 GB disk1s8
9: Apple_HFS Tmp 484.1 GB disk1s9
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS Home *1.1 TB disk2
/dev/disk3
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *4.0 GB disk3
1: Windows_FAT_16 BOTICBOOT 12.6 MB disk3s1
2: Linux 720.4 MB disk3s2
iMac27:BoticBBB yasuaki$ diskutil unmount /dev/disk3s1
Volume BOTICBOOT on disk3s1 unmounted
iMac27:BoticBBB yasuaki$
【ステップ 2】BBB/BBGを Micro SDカードから起動させる
BeagleBone系のシングルボードコンピュータは、電源を繋いで単純に起動すると内蔵のeMMCと呼ばれている内部ストレージシステムから起動するように設定されており、BeagleBoard 謹製の Aungstrom Linuxと言うディストリビューションが起動するようになっている.Micro SDカードに組み込んだ “Botic” を起動させるには、S2スイッチを押しながら電源投入する(あるいはS3スイッチによる起動)必要がある.
最初はこの起動方法に慣れていないので、上手く行かずにeMMC側のAungstrom Linuxが立ち上がってしまうことが間々あるが、このような場合は一旦S3スイッチのPower Button を数秒間押し続ければ、自動的にLinuxがシャットダウンされて電源まで落ちる仕組みになている.Aungstrom Linux に限らず、 Botic でも同じ仕組みなので、BeagleBone ユーザは必ずこのシャットダウン方法をマスターして置く必要がある.
一度、このS2スイッチを押しながらMicro SDカードから起動させると、次回からはMicro SDカードが優先起動されるようになるようだ.一旦shutdownして電源を落としても、次回はMicro SDカードから起動されるようになる.但し、Micro SDカードを抜いた状態で電源を投入してしまうと、起動優先順位が元のeMMCからの起動に戻ってしまうようなので、常にMicro SDカードからの起動を行いたい場合は別な方法で優先起動順序の変更が必要になる.
ブートデバイスの起動順序を変更する方法については別な機会に紹介するが、”BeagleBone Green System Reference Manual” 5.3.5 Boot Modes (Page 17)、および “ BEAGLEBONE_GREEN SRM(v1a)(pdf) ” – 6.7 Boot Configuration (Page 67) を参照すると良いだろう.
起動モードを切り替える S2 SW(赤)と Power コントロール用の S3 SW (黄)
【追記】BeagleBone GreenでBotic 4 イメージを起動させる方法
これまでBeagleBone Black でBotic 4イメージを起動させた後に、Botic 7へアップデートしていたので気が付かなかったが、BeagleBone GreenではBotic 4が正常に起動しないことに気が付いた.Botic 4 のbootの際にメッセージをコンソールで確認したところ、カーネルモジュールのロードで ”dtb=am335x-bonegreen.dtb” が見つからないというメッセージを吐いていた.どうやらBeagleBone Green に関するdtbファイルが置かれていないので、ここでOSの起動が止まってしまうようだ.BeagleBone Green用のdtbファイルを作れば良いのだが、とりあえずBeagleBone Black用のdtbファイルをそのまま使うことで、OSの起動ができるようになることを確認したので、簡単に方法を紹介しておく.
【解決方法】ルートファイルシステムを ext4 ファイルシステムを読み書きできるコンピュータでマウントして、BeagleBone Black用のdtbファイル “am335x-boneblack.dtb” のシンボリックリンクを “am335x-bonegreen.dtb” という名前で作成する.
Linux初心者にとってはあまりにも不親切な説明かもしれないが、上記の説明が理解できないようであれば明らかにスキル不足なのでBeagleBone Blackを使った方が良いだろう.
無事、Botic を起動させることに成功したら先ず最初に行わなければならないことは、自分に割り当てられたIPアドレスを知ることだ.デフォルトのインストール状態では DHCPクライアントモードでIPアドレス等の情報が設定されてしまうので、Boticの設定を変更するには ssh コマンドを用いて、管理者アカウント(root) でBoticにログインしなければならない.LinuxやUNIX系のOSを扱い慣れた人で在れば簡単な作業ではあるが、初心者にとってはこのIPアドレスを調べる事が最初の難関だろう.
DHCPで割り当てられたIPアドレスを特定する方法については幾つか方法があるが、ネットワーク関係の専門知識がないと結構大変だ.大抵の場合はブロードバンドルータのDHCP機能を使っているので、ブロードバンドルータのWeb GUI等を通じて割り当てられたIPアドレスを確認できるだろう.尤もこんな簡単な方法でも一般のユーザにとっては敷居が高いかもしれない.
普通のLinuxディストリビューションではコンソール画面にログインして自分自身のIPアドレスがどうなっているのか簡単に調べることができるが、BoticではHDMIディスプレイを繋いでもコンソール画面が表示されない.BeagleBone Green に至ってはHDMIディスプレイ端子すら存在しない.シリアル通信用のTTY接続という手もあるが、こちらの方も初心者にはそう簡単には手が出せない代物だ.
幸いなことに、初心者でもDHCPで割り当てられた情報を簡単に取得するためのツールが出回っているようなので、Mac用のツールを使った例を紹介しておく.Andoroid 用の “Fing – Network Tools” や Windows 用のツールも窓の杜(http://forest.watch.impress.co.jp/library/nav/genre/inet/servernt_netanlz.html )等で探し出すことができるだろう.Mac用のツールはあまり出回っていないようだが、”LanScan” というアプリが AppStore 経由で入手可能だ.
参考までに、LanScanでネットワークの情報を調べた時の様子を載せておく.
LanScanを起動しLANをスキャンすると現在アクティブな機器の一覧がリストアップされる
一般的なユーザであれば家庭内のLANは一つしかないので、このスキャン画面上でBoticをインストールしたBBB/BBGが直ぐに見つかると思うが、私の環境はちょっと変則的なので、この画面上には表示されていない.今回 Botic を繋いだLANはオーディオ専用の別なLANに接続してあるので、デフォルトの有線LAN “en0” 側では見つけることができない.LanScanでは別なLAN(画面上では vlan1)についても同じようにスキャン可能なので、オーディオ専用のLAN “vlan1” の方をスキャンして見ると、今度はきちんと画面上にリストアップされているのが確認できる.点線の赤枠が今回の Botic だ. 192.168.101.30 に “botic” というホスト名で登録されているのは別なテスト運用中の Botic マシンだ.
今度は 新しくインストールしたBotic が見つかった(点線の赤枠)
【ステップ 4】ssh で Boticにログインする
IPアドレスさえ判明すれば、後は sshコマンドなどで Boticにログインするだけだ.Macであれば ”Terminal(ターミナル)”アプリを起動するか sshログイン可能な別なアプリを起動すれば良い.Windows系であれば、TeraTerm等のSSH対応アプリを使えば良い.Linuxユーザであれば説明の必要すらないだろう.デフォルトで root ユーザでsshログイン可能な状態になっており、rootの初期パスワードは “botic” になっている.勿論この状態では家庭内と言えどもセキュリティー的に問題があるので、自分で設定を変更することが出来る人は、別な作業用アカウントを設定してリモートから root ログインできないように設定を変更しておくべきだろう.最低でも root のパスワードだけは変更しておいて欲しいところだ.
iiMac27:~ yasuaki$ ssh -l root 192.168.101.168
The authenticity of host '192.168.101.168 (192.168.101.168)' can't be established.
RSA key fingerprint is 1b:7a:88:bd:0f:07:67:3c:b5:fe:fc:6f:17:1b:a0:fc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.101.168' (RSA) to the list of known hosts.
Debian GNU/Linux 7 \n \l
Boticized BeagleBoard.org Debian Image 2015-02-15
default username:password is [root:botic] and [debian:botic]
root@192.168.101.168's password: botic <=== 実際にはパスワードは画面表示されない
root@botic:~#
root@botic:~# passwd root <=== 最初に root のパスワードを変更しておく
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@botic:~#
【ステップ 5】(必要があれば)IPアドレスを固定化する
RedHat系のLinuxに慣れている人にとっては、Debian系(特に最近の)のディストリビューションのネットワーク系の設定方法は分かり難く結構難儀するだろう.ネット上の情報はグチャグチャで未だに何が正しい設定方法なのか良く判らない.たかが固定IP化のためだけに結構な時間を食い潰してしまった.Debianの公式マニュアルを見ても余計混乱するだけなので参照するだけ無駄だ.もっとシンプルな設定方法にして欲しいところだ.
とりあえず、Botic(Debian wheezy系) に関しては “/etc/network/interfaces” ファイルの設定変更だけで何とか固定IPアドレス化できたが、Jessie などの他のディストリビューションでは一筋縄で行かないことが多かった.
“/etc/network/interfaces” の中身を書き換える
root@botic:~# ifconfig
eth0 Link encap:Ethernet HWaddr 84:eb:18:e6:cb:f9
inet addr:192.168.101.168 Bcast:192.168.101.255 Mask:255.255.255.0
inet6 addr: fe80::86eb:18ff:fee6:cbf9/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2953 errors:0 dropped:0 overruns:0 frame:0
TX packets:366 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:251236 (245.3 KiB) TX bytes:82794 (80.8 KiB)
Interrupt:168
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:66898 errors:0 dropped:0 overruns:0 frame:0
TX packets:66898 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7158117 (6.8 MiB) TX bytes:7158117 (6.8 MiB)
root@botic:~# cd /etc/network
root@botic:/etc/network# ls -la
total 28
drwxr-xr-x 6 root root 4096 Feb 16 2015 .
drwxr-xr-x 70 root root 4096 Aug 27 00:54 ..
drwxr-xr-x 2 root root 4096 Feb 21 2015 if-down.d
drwxr-xr-x 2 root root 4096 Feb 21 2015 if-post-down.d
drwxr-xr-x 2 root root 4096 Feb 21 2015 if-pre-up.d
drwxr-xr-x 2 root root 4096 Feb 21 2015 if-up.d
-rw-r--r-- 1 root root 788 Feb 21 2015 interfaces
lrwxrwxrwx 1 root root 12 Feb 21 2015 run -> /run/network
root@botic:/etc/network# cat interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE
# The secondary network interface
#auto eth1
#iface eth1 inet dhcp
# WiFi Example
#auto wlan0
#iface wlan0 inet dhcp
# wpa-ssid "essid"
# wpa-psk "password"
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
# Note on some boards, usb0 is automaticly setup with an init script
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.0
network 192.168.7.0
gateway 192.168.7.1
root@botic:/etc/network#
root@botic:/etc/network# cp interfaces interfaces.bak <=== オリジナルのバックアップを取得
root@botic:/etc/network# vi interfaces <=== テキストエディタで編集する
テキストエディタは nano, vim など使い慣れたもので構わないが、BoticはLinuxなので行末コードは LF なので、Windows系しか使った事の無いユーザは使用するエテキストディタの行末コードに注意して欲しい.変更する内容は実際のユーザ環境に合わせて設定する必要があるが、変更すべき箇所が判らないと言う人は、Boticを固定IP化させる事は止めて置いた方が良いだろう.そのような人にとって固定IP化するメリットは殆どない.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
#iface eth0-dhcp inet dhcp
iface eth0 inet static
address 192.168.101.31
netmask 255.255.255.0
network 192.168.101.0
gateway 192.168.101.xxx
dns-nameservers 192.168.100.xxx <=== 通常はインターネットルータがDHCPリレーホスト
dns-search music.home.yoko <=== 普通のユーザはこの行は不要
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE
# The secondary network interface
#auto eth1
#iface eth1 inet dhcp
# WiFi Example
#auto wlan0
#iface wlan0 inet dhcp
# wpa-ssid "essid"
# wpa-psk "password"
# Ethernet/RNDIS gadget (g_ether)
# ... or on host side, usbnet and random hwaddr
# Note on some boards, usb0 is automaticly setup with an init script
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.0
network 192.168.7.0
gateway 192.168.7.1
root@botic:/etc/network#
root@botic:/etc/network# reboot <=== 設定変更後にリブートする
Broadcast message from root@botic (pts/0) (Mon Aug 27 01:36:05 2035): <=== 日時が変なのはまだ気にしなくてもOK
The system is going down for reboot NOW!
root@botic:/etc/network#
BBB/BBGでは USBインタフェース仮想的なネットワークインタフェースとして利用することが可能なので、上記の “interfaces” ファイルにはこのインタフェース “usb0” に関する固定IPアドレス設定が記載されている.これを利用すれば最初からIPアドレスが固定された状態なので、わざわざDHCPで割り当てられたIPアドレスを調べなくても済む筈だが、まだ試してはいないので、そのうちこの “usb0” インタフェースの利用について紹介することにする.
“reboot” コマンドによる再起動では、自動的に起動デバイスが引き継がれるので、再起動時に “S2” スイッチを押し続ける必要はない.
再起動後に新しい固定IPアドレスでsshできれば固定IPアドレス化が成功だ.上手く行かない場合は、変更前のIPアドレスを指定すれば大抵の場合はログインできるだろう.前のIPアドレスでログイン出来ない場合は、DHCPサーバによって別な新しいIPアドレスが割り当てられてしまった可能性が強いので、先程と同じ方法で新しいIPアドレスを確認すれば良い.何度やっても固定IPアドレス化が上手く行かない場合は、クライアント側での固定IP化を諦めてDHCPサーバ側でBoticに割り当てるIPを固定化する方法も検討してみるのも良いだろう.まともなインターネットルータであれは、DHCPサーバ機能のオプションとして固定IPアドレスリースが可能な筈だ.
【追記】Debian Jessie系列での固定IPアドレス設定は、『Debian Jessie での固定IP設定方法』を参照して欲しい.
【ステップ 6】(必要があれば)Micro SDカードのLinuxパーティションを拡張する
初期インストール状態の Botic は 1GBのSDカードにインストールする前提で作成されている.4GBや8GBなどの容量のSDカードを用いた場合は、最初の1GBしか使われないので、Linux用のパーティションをSDカードのサイズ一杯まで広げておくと都合が良い.Linuxパーティションを拡張する方法も幾つかあるが、パーティション拡張用の専用スクリプトが “/opt/scripts/tools/” 配下に用意されているので、このディレクトリにある “grow_partition.sh” シェルスクリプトを利用するのが簡単だ.4GBの Micro SDカードでルートパーティション拡張を実施した時の様子を下記に示す.
root@botic:/opt/scripts/tools# ls -la
total 64
drwxr-xr-x 6 root root 4096 Feb 21 2015 .
drwxr-xr-x 11 root root 4096 Feb 21 2015 ..
-rwxr-xr-x 1 root root 8918 Feb 21 2015 beaglebone-black-eMMC-flasher.sh
drwxr-xr-x 2 root root 4096 Feb 21 2015 developers
drwxr-xr-x 2 root root 4096 Feb 21 2015 eMMC
drwxr-xr-x 2 root root 4096 Feb 21 2015 graphics
-rwxr-xr-x 1 root root 2902 Feb 21 2015 grow_partition.sh
-rwxr-xr-x 1 root root 11272 Feb 21 2015 init-eMMC-flasher.sh
-rw-r--r-- 1 root root 137 Feb 21 2015 readme.txt
-rwxr-xr-x 1 root root 6914 Feb 21 2015 update_kernel.sh
drwxr-xr-x 2 root root 4096 Feb 21 2015 wm
root@botic:/opt/scripts/tools# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
rootfs 661 296 317 49% / <=== 317MBが / に割り当てられている
udev 10 0 10 0% /dev
tmpfs 50 1 49 2% /run
/dev/mmcblk0p2 661 296 317 49% /
tmpfs 248 0 248 0% /dev/shm
tmpfs 248 0 248 0% /sys/fs/cgroup
tmpfs 100 0 100 0% /run/user
tmpfs 5 0 5 0% /run/lock
/dev/mmcblk0p1 12 1 12 4% /boot/uboot
root@botic:/opt/scripts/tools#
root@botic:/opt/scripts/tools# ./grow_partition.sh
Media: [/dev/mmcblk0]
Disk /dev/mmcblk0: 121472 cylinders, 4 heads, 16 sectors/track
Old situation:
Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End MiB #blocks Id System
/dev/mmcblk0p1 * 1 12 12 12288 e W95 FAT16 (LBA)
start: (c,h,s) expected (32,0,1) found (0,32,33)
end: (c,h,s) expected (415,3,16) found (1,167,38)
/dev/mmcblk0p2 13 699 687 703488 83 Linux
start: (c,h,s) expected (416,0,1) found (1,167,39)
end: (c,h,s) expected (1023,3,16) found (89,60,35)
/dev/mmcblk0p3 0 - 0 0 0 Empty
/dev/mmcblk0p4 0 - 0 0 0 Empty
New situation:
Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End MiB #blocks Id System
/dev/mmcblk0p1 * 1 12 12 12288 e W95 FAT16 (LBA)
/dev/mmcblk0p2 13 3795 3783 3873792 83 Linux
/dev/mmcblk0p3 0 - 0 0 0 Empty
/dev/mmcblk0p4 0 - 0 0 0 Empty
Successfully wrote the new partition table
Re-reading the partition table ...
BLKRRPART: Device or resource busy
The command to re-read the partition table failed.
Run partprobe(8), kpartx(8) or reboot your system now,
before using mkfs
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
root@botic:/opt/scripts/tools# reboot
...
【再起動後】
...
root@botic:~# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
rootfs 3714 296 3249 9% / <=== 3.2GB まで拡張された
udev 10 0 10 0% /dev
tmpfs 50 1 49 2% /run
/dev/mmcblk0p2 3714 296 3249 9% /
tmpfs 248 0 248 0% /dev/shm
tmpfs 248 0 248 0% /sys/fs/cgroup
tmpfs 5 0 5 0% /run/lock
tmpfs 100 0 100 0% /run/user
/dev/mmcblk0p1 12 1 12 4% /boot/uboot
【ステップ 7】NTPによる時刻設定を行う
初期インストール状態の Boticでは日時がきちんと設定されていない場合があるので、日時をNTPを使ってシステムの日付け設定を正確な日時に合わせておく必要がある.先ずは”date” コマンドで現在設定されているシステムの日時を確認しておく.合っていない場合は、ntpdateコマンドで正確なNTPサーバと同期を取る.UTCからJST へ表示を変えたい場合はシステムのロケールを変更しておく.
root@botic:~# ntpdate -v ntp.nict.jp
23 Sep 03:00:57 ntpdate[1227]: ntpdate 4.2.6p5@1.2349-o Sat Feb 7 11:43:02 UTC 2015 (1)
4 Dec 13:39:01 ntpdate[1227]: step time server 133.243.238.244 offset -56812922.731320 sec
root@botic:~# date
Sun Dec 4 13:39:12 UTC 2016
root@botic:~#
root@botic:/etc# dpkg-reconfigure tzdata <=== 必要に応じて TimeZone を変更
一般的なサーバ用途であれば、NTPサーバ機能をインストールして他のNTPサーバと同期を取ることが普通だが、できる限り余計なプロセスは走らせたくないので、ユーザ起動スクリプト “/etc/rc.local” に ntpdate コマンドを設定して、OS起動時に自動的に時刻合わせを行うように設定しておくと良いだろう.
“/etc/rc.local” を編集後、再起動し timedatectl コマンドできちんと設定されていることを確認しておく.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#############
ntpdate -v ntp.nict.jp <=== ntpdateコマンドを追記
/sbin/hwclock --systohc <=== ついでにハードウェアクロックも更新
(BBBはHW Clockを積んでいないようなので多分無意味)
exit 0
...
【再起動後】
...
iMac27:~ yasuaki$ ssh -l root 192.168.101.31
Debian GNU/Linux 7 \n \l
Boticized BeagleBoard.org Debian Image 2015-02-15
default username:password is [root:botic] and [debian:botic]
root@192.168.101.31's password:
Last login: Sun Jul 12 03:21:52 2020 from 192.168.101.158
root@botic:~# date
Sun Dec 4 23:19:26 JST 2016 <=== 正確な時刻が設定されている
root@botic:~# timedatectl
Local time: Sun 2016-12-04 23:19:42 JST
Universal time: Sun 2016-12-04 12:19:42 UTC
RTC time: Sun 2016-12-04 23:19:42
Timezone: Asia/Tokyo (JST, +0900)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
root@botic:~# uname -a
Linux botic 3.18.7-botic4 #1 PREEMPT Wed Feb 18 23:34:58 CET 2015 armv7l GNU/Linux
root@botic:~#
【ステップ 8】”mpd.conf” の修正
Boticでは mpdクライアントからの接続は “localhost” のみから受け付けるように設定されているので、”Cantata”や “MPod” などの外部のmpdクライアント(コントローラ)から接続できるように、”/etc/mpd.conf” を修正する必要がある.
#
# This setting sets the address for the daemon to listen on. Careful attention
# should be paid if this is assigned to anything other then the default, any.
# This setting can deny access to control of the daemon. Choose any if you want
# to have mpd listen on every address
#
# For network
#bind_to_address "localhost"
bind_to_address "any" <=== "any" に変更
#
長くなってしまったので、続きは『BeagleBone + Botic で簡単DSD Native 再生(その2)』で.
【おまけ】シリアルコンソール接続
DHCPで割り振られたIPアドレスを突き止めるのはそれなりに厄介なので、別な方法としてシリアルコンソール接続によるログイン方法を紹介しておく.ネットワーク屋さんや組み込み屋さんの世界では今でもこのシリアルコンソールによるログインが日常的に使われている.UNIX系の世界ではTTYコンソールとも呼ばれているが、TTYは Tele TYpe(テレタイプ)の略で、何十年も前から使われてきた超レガシーな通信インタフェースだが、未だに現役バリバリだ.困った時のシリアルコンソール接続はエンタープライズ系ITの世界では常識だ.
シリアルコンソールを利用するには、Windows系では TeraTerm などのコンソールアプリが比較的豊富に出回っているが、Mac系のアプリはあまり出回っていないようだ.Macではアプリを使わずとも、標準のTerminal アプリ上で screen コマンドを使うことで簡単にシリアルコンソール通信が利用可能だ.
BeagleBone Black/Green でシリアル通信を行うには、3.3V系のUSB-シリアル変換ケーブルを利用するのが簡単だ.BeagleBoneではシリアルコンソール用の6列シングルインラインタイプのヘッダーピンが最初から用意されており、このヘッダーピンの仕様にあったUSB-シリアル変換ケーブルが売られている.
【BeagleBone直結可能なUSB-シリアル変換ケーブル】
・FTDI USB・シリアル変換ケーブル(3.3Vタイプ)[TTL-232R-3V3]
秋月電子: http://akizukidenshi.com/catalog/g/gM-05840/
Digi-Key : FTDI, Future Technology Devices International Ltd TTL-232R-3V3
・スイッチサイエンス: FTDI USBシリアル変換アダプター Rev.2
BeagleBone とUSB・シリアル変換アダプタモジュール
シリアルピンヘッダーに直接挿すことが可能
Macの標準Terminalアプリで使うには、先ずはFTDIの専用ドライバーをFTDIのダウンロードページから取得しインストールしておく.ドライバが正常にインストールされていれば、USB・シリアル変換アダプタケーブル(モジュール)を接続すると、OSがそれを自動認識し、シリアルコンソール(TTY)デバイスとして組み込まれる.組み込まれているうかどうか確かめるには、"/dev" ディレクトリ配下を覗いてみれば分かる.
通常は、"/dev/tty.xxxxxxx" のような名前で登録されるので、先ずはデバイスの一覧を表示してみると良い.数十〜百程度似たような名前のデバイスがリスティングされてしまうので探すのが大変だが、
%ls -la /dev/tty.*
などで対象を絞ると良いだろう.デバイス名だけで判断が付き難い場合は、USBケーブルを抜き差しすれば、/dev 配下に現れたり消えたりするのでそれで確認できるだろう.
iMac27:~ yasuaki$ ls -la /dev/tty.*
crw-rw-rw- 1 root wheel 18, 0 Dec 3 20:24 /dev/tty.Bluetooth-Incoming-Port
crw-rw-rw- 1 root wheel 18, 2 Dec 3 20:24 /dev/tty.Bluetooth-Modem
crw-rw-rw- 1 root wheel 18, 6 Dec 20 20:49 /dev/tty.usbserial-DN01EB1D
iMac27:~ yasuaki$
上記の例では、"tty.usbserial-DN01EB1D" というのが、写真に写っている スイッチサイエンス製のUSB・シリアル変換モジュールだ.
デバイス名が分かれば、後はscreenコマンドのパラメータとして、このデバイスと通信速度を指定すれば良い.screenコマンドの修了方法が初心者にはちょっと判り難いが、終了させるには CTRL+a, k (コントロールキーを押しながら "a" をタイプし、その後単独で "k" キーを打つ)で screenコマンドを抜け出すことができる.
BeagleBoneのシリアルコンソールはデフォルトで 115200 bps なので、screen コマンドのパラメータは、
screen /dev/tty.usbserial-DN01EB1D 115200
となる."usbserial-DN01EB1D"の部分は各自のデバイスによって異なるので、自分のデバイス名に合わせること.
iMac27:~ yasuaki$ screen /dev/tty.usbserial-DN01EB1D 115200
U-Boot SPL 2015.01-00001-gb2412df (Jan 29 2015 - 15:01:06)
U-Boot 2015.01-00001-gb2412df (Jan 29 2015 - 15:01:06), Build: jenkins-github_Bootloader-Builder-105
Watchdog enabled
I2C: ready
DRAM: 512 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
Using default environment
Net: not set. Validating first E-fuse MAC
cpsw
Hit any key to stop autoboot: 0
gpio: pin 53 (gpio 53) value is 1
switch to partitions #0, OK
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
reading uEnv.txt
1109 bytes read in 4 ms (270.5 KiB/s)
gpio: pin 55 (gpio 55) value is 1
Loaded environment from uEnv.txt
Importing environment from mmc ...
Checking if uenvcmd is set ...
gpio: pin 56 (gpio 56) value is 1
Running uenvcmd ...
376 bytes read in 26 ms (13.7 KiB/s)
4122480 bytes read in 259 ms (15.2 MiB/s)
2642616 bytes read in 180 ms (14 MiB/s)
108137 bytes read in 112 ms (942.4 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x3ee770 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Using Device Tree in place at 88000000, end 8801d668
Starting kernel ...
[ 0.002085] clocksource_probe: no matching clocksources found
[ 0.579991] wkup_m3_ipc 44e11324.wkup_m3_ipc: could not get rproc handle
[ 0.821523] omap_voltage_late_init: Voltage driver support not added
Loading, please wait...
systemd-fsck[140]: rootfs: clean, 20286/219840 files, 139120/968448 blocks
[ 4.892743] davinci-mcasp 48038000.mcasp: invalid tdm slots: 0
[ 4.990016] davinci-mcasp 4803c000.mcasp: invalid tdm slots: 0
systemd-fsck[329]: dosfsck 3.0.13, 30 Jun 2012, FAT32, LFN
systemd-fsck[329]: /dev/mmcblk0p1: 11 files, 238/6123 clusters
[ 6.078745] omap-sham 53100000.sham: initialization failed.
Debian GNU/Linux 7 botic2 ttyS0
Boticized BeagleBoard.org Debian Image 2015-02-15
default username:password is [root:botic] and [debian:botic]
The IP Address for eth0 is: 192.168.101.31
botic2 login: root
Password:
Last login: Mon Feb 16 09:09:04 JST 2015 on ttyS0
Linux botic2 4.8.13-botic7-rc3 #1 PREEMPT Sat Dec 10 01:35:51 CET 2016 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@botic2:~#
【 Power Buttonを押してシャットダウン処理を実行 】
Power button pressed
The system is going down for system halt NOW!
Sending SIGTERM to remaining processes...
Sending SIGKILL to remaining processes...
Unmounting file systems.
Unmounting /sys/fs/fuse/connections.
Unmounting /sys/kernel/config.
Unmounting /dev/mqueue.
All filesystems unmounted.
Deactivating swaps.
All swaps deactivated.
Detaching loop devices.
All loop devices detached.
Detaching DM devices.
All DM devices detached.
Storage is finalized.
[ 144.309509] reboot: Power down