botic_demoの環境のKernel再構築を行う(リベンジ編)

前回botic_demoのkernel再構築を行うにあたり、USB WiFiドングル経由での接続ができていない旨書いた。
意外と簡単に解決したので記録に残すこととする。

先ずどのような問題に直面していたかから述べる。
使用しているUSB WiFiドングルはBUFFALOのWLI-UC-GNM2。
もともとはWLI-UC-GNMを使っていたのだが、去年動かなくなってしまい買い換えた。
以前記載した設定で使えていたものだ。

botic_demoの環境でも一見認識しているように見える。

root@bbb:/home/debian# lsusb
Bus 002 Device 002: ID 0411:01ee BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM2 Wireless LAN Adapter [Ralink RT3070]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@bbb:/home/debian# iwconfig wlan0
wlan0     IEEE 802.11bgn  ESSID:"MY-AP-001"
          Mode:Managed  Frequency:2.462 GHz  Access Point: 10:6F:3F:4B:20:55
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=57/70  Signal level=-53 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1  Invalid misc:4   Missed beacon:0

root@bbb:/home/debian# 

しかし、DHCPによるIPアドレスの払い出しには失敗している。

root@bbb:/home/debian# ifconfig
eth0      Link encap:Ethernet  HWaddr 1c:ba:8c:96:0a:7e
          inet addr:192.168.1.28  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::1eba:8cff:fe96:a7e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:255 errors:0 dropped:0 overruns:0 frame:0
          TX packets:262 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33013 (32.2 KiB)  TX bytes:25533 (24.9 KiB)
          Interrupt:56

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:85 errors:0 dropped:0 overruns:0 frame:0
          TX packets:85 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8490 (8.2 KiB)  TX bytes:8490 (8.2 KiB)

usb0      Link encap:Ethernet  HWaddr 86:f0:4d:87:c1:63
          inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr b0:c7:45:46:30:ee
          inet6 addr: fe80::b2c7:45ff:fe46:30ee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:330 (330.0 B)  TX bytes:5869 (5.7 KiB)

root@bbb:/home/debian# 

また、以下のようなErrorが多発する。

[ 4385.922480] ieee80211 phy0: rt2800usb_fill_rxdone: Error - Bad frame size 8354, forcing to 0
[ 4385.932071] ieee80211 phy0: rt2x00lib_rxdone: Error - Wrong frame size 0 max 3840
[ 4386.122980] ieee80211 phy0: rt2800usb_fill_rxdone: Error - Bad frame size 8354, forcing to 0
[ 4386.132404] ieee80211 phy0: rt2x00lib_rxdone: Error - Wrong frame size 0 max 3840

iwlist wlan0 scanの結果を見る限り、受信はできているが送信ができていないように見える。
まったく接続できないのかと言えばそいうでもなく、eth0をdownさせた後にwlan0をupさせると不安定ながらも接続できたりする。
ちなみにeth0をdownすると以下のように出力されることがある。

boticroot@bbb:/home/debian# ifconfig eth0 down
root@bbb:/home/debian# ifconfig wlan0 down
[  230.628344] musb_host_rx 1654: RX2 dma busy, csr 2020
root@bbb:/home/debian# ifconfig wlan0 up

ここまででなんとなくであるが、kernel 3.16.Xの環境ではrt2800usbドライバとmusbドライバがDMA等でリソース競合しているのであろうと予想された。
botic_demoのsorcesにあるpatchはkernel 3.17.Xでは単純にはあたらなくなる。
kernel 3.16.7のままで、問題のありそうなドライバのみ世代を進めるか巻き戻すかで解決できないかと考えた。
少なくともkernel 3.8ベースでは問題なかったので、そこまで戻せば解決するのかもしれないが、kernel 3.16.Xとkernel 3.8では差分が多すぎる。
よって、rt2x00とmusbともに比較的大きな変更が加えられている近いバージョンとしてkernel 3.17.3からこの二つのドライバをコピーしてみたところ 理由は全く判らないままであるものの、一応接続できるようになった。
技術的ではない解決であり恐縮だ。
依存関係を把握しているわけではないので問題がある可能性は否定できない。
あくまでも自己責任で行う必要がある。

botic_demo環境でUSB WiFi接続ができるようになったので、以前構築したvolumioの環境を潰しSan DisKのMobile Ultra(16GB)のmicro SDカードにbotic_demoを再構築してみた。
以下はその手順の記録。

前回はbotic_demoの環境から.configを取得したが、既に取得済みなのでそれを利用する。
ここに置いておくので、再構築にあたりBBBから.configを引き抜く手順を省略できる。
つまり、母艦(ゲストOS)上でbotic_demoの環境のクロスコンパイル及びmicro SDの環境構築を済ますことができるわけだ。

micro SDのパーティション構成は以前構築したvolumioの環境と同じ、16GBの容量をFAT32のパーティション1を11.5GiB、ext4のパーティション2を3.5GiBに分割する。
起動イメージのパーティション1はboot用であるが、ここに楽曲用のフォルダを作成し兼用させる。
パーティション2はrootfs用でデフォルトでは1.8GBの容量となっているが、狭いので拡張を行う。

FAT32のパーティション1に楽曲データを格納するのはWindowsパソコンとの連携を考えてのことであるが、BBBにsambaによる公開ディレクトリを 設けるならば、パーティション2を拡張する方が良いかもしれない。
FAT32はクリーンな状態で楽曲ファイルを格納すればリッチな機能のあるext4よりも低機能である分オーバーヘッドが少ないので楽曲再生には有利なはずである。
ただ、FAT32は断片化の問題があるので楽曲データの消去再記録を繰り返すようなユースケースではパフォーマンス劣化するので向かない。
FAT32に楽曲データを格納するならば、定期的にデフラグを行うべきであろう。

以下母艦(ゲストOS)で実行する。
各種ツール類は既にインストールされている前提とする。
※詳細は以下を参照
BeagleBone Blackのkernelの再構築を試みる
botic_demoの環境のKernel再構築を行う

先ずはbotic_demoのmicro SDのイメージを取得し展開する。

temp-host@temp-host:~$ mkdir botic
temp-host@temp-host:~$ cd botic
temp-host@temp-host:~/botic$ wget http://bbb.ieero.com/botic3/bbb-demo-botic-v3-2gb.img.gz
--2015-03-12 23:51:14--  http://bbb.ieero.com/botic3/bbb-demo-botic-v3-2gb.img.gz
bbb.ieero.com (bbb.ieero.com) をDNSに問いあわせています... 74.220.219.62
bbb.ieero.com (bbb.ieero.com)|74.220.219.62|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 163338160 (156M) [application/x-gzip]
`bbb-demo-botic-v3-2gb.img.gz' に保存中

100%[======================================>] 163,338,160 2.88MB/s   時間 43s  

2015-03-12 23:51:57 (3.66 MB/s) - `bbb-demo-botic-v3-2gb.img.gz' へ保存完了 [163338160/163338160]

temp-host@temp-host:~/botic$ gzip -d ./bbb-demo-botic-v3-2gb.img.gz

botic_demo用のkernelの.configを取得する。

temp-host@temp-host:~/botic$ wget http://www7.tok2.com/home/toybox/bbb-demo-botic-v3-2gb.config.tar.gz
--2015-03-13 00:11:21--  http://www7.tok2.com/home/toybox/bbb-demo-botic-v3-2gb.config.tar.gz
www7.tok2.com (www7.tok2.com) をDNSに問いあわせています... 220.216.111.112
www7.tok2.com (www7.tok2.com)|220.216.111.112|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 24508 (24K) [application/x-tar]
`bbb-demo-botic-v3-2gb.config.tar.gz.1' に保存中

100%[======================================>] 24,508      15.5KB/s   時間 1.5s 

2015-03-13 00:11:23 (15.5 KB/s) - `bbb-demo-botic-v3-2gb.config.tar.gz.1' へ保存完了 [24508/24508]

temp-host@temp-host:~/botic$ tar zxvf bbb-demo-botic-v3-2gb.config.tar.gz
bbb-demo-botic-v3-2gb.config
temp-host@temp-host:~/botic$ 

次にkernelのソースコードを取得する。
取得するのはkernel 3.16.7とkernel 3.17.3の二つ。

temp-host@temp-host:~/botic$ cd ..
temp-host@temp-host:~$ mkdir BBB-LINUX
temp-host@temp-host:~$ cd BBB-LINUX
temp-host@temp-host:~/BBB-LINUX$ wget ftp://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.7.tar.gz
--2015-03-13 00:16:26--  ftp://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.7.tar.gz
           => `linux-3.16.7.tar.gz'
www.kernel.org (www.kernel.org) をDNSに問いあわせています... 198.145.20.140, 199.204.44.194, 149.20.4.69, ...
www.kernel.org (www.kernel.org)|198.145.20.140|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD (1) /pub/linux/kernel/v3.x ... 完了しました。
==> SIZE linux-3.16.7.tar.gz ... 121773906
==> PASV ... 完了しました。    ==> RETR linux-3.16.7.tar.gz ... 完了しました。
長さ: 121773906 (116M) (確証はありません)

100%[======================================>] 121,773,906  545KB/s   時間 2m 1s

2015-03-13 00:18:29 (983 KB/s) - `linux-3.16.7.tar.gz' へ保存終了 [121773906]

temp-host@temp-host:~/BBB-LINUX$ wget ftp://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.3.tar.gz
--2015-03-13 00:19:30--  ftp://www.kernel.org/pub/linux/kernel/v3.x/linux-3.17.3.tar.gz
           => `linux-3.17.3.tar.gz'
www.kernel.org (www.kernel.org) をDNSに問いあわせています... 149.20.4.69, 198.145.20.140, 199.204.44.194, ...
www.kernel.org (www.kernel.org)|149.20.4.69|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。    ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。  ==> CWD (1) /pub/linux/kernel/v3.x ... 完了しました。
==> SIZE linux-3.17.3.tar.gz ... 121404143
==> PASV ... 完了しました。    ==> RETR linux-3.17.3.tar.gz ... 完了しました。
長さ: 121404143 (116M) (確証はありません)

100%[======================================>] 121,404,143 5.82MB/s   時間 29s  

2015-03-13 00:20:01 (3.95 MB/s) - `linux-3.17.3.tar.gz' へ保存終了 [121404143]

temp-host@temp-host:~/BBB-LINUX$ 

取得したkernelのソースコードを展開する。
ログは長いので省略。

temp-host@temp-host:~/BBB-LINUX$ tar zxvf linux-3.16.7.tar.gz 
temp-host@temp-host:~/BBB-LINUX$ tar zxvf linux-3.17.3.tar.gz 

kernel 3.17.3からrt2x00ドライバとmusbドライバをコピーする。
rt2x00ドライバのコピーは不要かも知れないが試していない。
コピー後はkernel 3.17.3の方は不要なので削除してかまわない。

temp-host@temp-host:~/BBB-LINUX$ cp ./linux-3.17.3/drivers/net/wireless/rt2x00/* ./linux-3.16.7/drivers/net/wireless/rt2x00/
temp-host@temp-host:~/BBB-LINUX$ cp ./linux-3.17.3/drivers/usb/musb/* ./linux-3.16.7/drivers/usb/musb/
temp-host@temp-host:~/BBB-LINUX$ rm ./linux-3.16.7.tar.gz
temp-host@temp-host:~/BBB-LINUX$ rm ./linux-3.17.3.tar.gz
temp-host@temp-host:~/BBB-LINUX$ rm -rf ./linux-3.17.3

botic_demoの環境から取得したkernelの.configを差し替える。

temp-host@temp-host:~/BBB-LINUX$ cp ../botic/bbb-demo-botic-v3-2gb.config ./linux-3.16.7/.config
temp-host@temp-host:~/BBB-LINUX$ 

botic_demoの/sourcesにあるパッチを適用する。

temp-host@temp-host:~/BBB-LINUX$ cd ../botic
temp-host@temp-host:~/botic$ fdisk -l bbb-demo-botic-v3-2gb.img

ディスク bbb-demo-botic-v3-2gb.img: 1782 MB, 1782579200 バイト
ヘッド 255, セクタ 63, シリンダ 216, 合計 3481600 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

              デバイス ブート      始点        終点     ブロック   Id  システム
bbb-demo-botic-v3-2gb.img1   *        2048      198655       98304    e  W95 FAT16 (LBA)
bbb-demo-botic-v3-2gb.img2          198656     3481599     1641472   83  Linux
temp-host@temp-host:~/botic$ sudo mkdir /mnt/loop2
temp-host@temp-host:~/botic$ sudo mount bbb-demo-botic-v3-2gb.img /mnt/loop2/ -o loop,offset=$((512*198656))
temp-host@temp-host:~/botic$ cd ../BBB-LINUX/linux-3.16.7
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ cat /mnt/loop2/sources/linux-3.16.1.patches/patches/botic/* | patch -p1
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #2 succeeded at 647 (offset 9 lines).
Hunk #3 succeeded at 674 (offset 9 lines).
Hunk #4 succeeded at 746 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #1 succeeded at 730 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #1 succeeded at 778 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #3 succeeded at 731 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #4 succeeded at 754 (offset 9 lines).
patching file Documentation/devicetree/bindings/rtc/rtc-omap.txt
patching file arch/arm/boot/dts/am335x-bone-common.dtsi
patching file drivers/mfd/tps65217.c
patching file drivers/rtc/rtc-omap.c
patching file include/linux/mfd/tps65217.h
patching file drivers/regulator/tps65217-regulator.c
patching file include/sound/soc-dai.h
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #3 succeeded at 489 with fuzz 2 (offset 9 lines).
Hunk #4 succeeded at 512 (offset 9 lines).
Hunk #5 succeeded at 675 (offset 9 lines).
Hunk #6 succeeded at 685 (offset 9 lines).
Hunk #7 succeeded at 705 (offset 9 lines).
Hunk #8 succeeded at 1342 (offset 9 lines).
patching file include/sound/pcm.h
patching file sound/core/pcm_native.c
patching file sound/soc/soc-core.c
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #1 succeeded at 533 (offset 9 lines).
Hunk #2 succeeded at 644 (offset 9 lines).
Hunk #3 succeeded at 668 (offset 9 lines).
Hunk #4 succeeded at 770 (offset 9 lines).
Hunk #5 succeeded at 797 (offset 9 lines).
Hunk #6 succeeded at 831 (offset 9 lines).
Hunk #7 succeeded at 840 (offset 9 lines).
Hunk #8 succeeded at 949 (offset 9 lines).
Hunk #9 succeeded at 960 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #4 succeeded at 1213 (offset 9 lines).
Hunk #5 succeeded at 1394 (offset 9 lines).
patching file sound/soc/davinci/davinci-mcasp.c
Hunk #1 succeeded at 899 (offset 9 lines).
patching file arch/arm/boot/dts/Makefile
patching file arch/arm/boot/dts/am335x-bone-common.dtsi
patching file arch/arm/boot/dts/am335x-boneblack-cape-bone-botic.dts
patching file sound/soc/davinci/Kconfig
patching file sound/soc/davinci/Makefile
patching file sound/soc/davinci/davinci-botic.c
patching file sound/soc/codecs/Kconfig
patching file sound/soc/codecs/Makefile
patching file sound/soc/codecs/es9018.c
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo umount /mnt/loop2 
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo rmdir /mnt/loop2
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$

kernel configの変更。
BUFFALOのUSB WiFiドングル WLI-UC-GNM2を使用できるようにする目的。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- menuconfig

以下の項目を変更する。

Device Driver  --->
  [*] Network device support  --->
     [*]   Wireless LAN  --->
           Ralink driver support  --->
               Ralink rt27xx/rt28xx/rt30xx (USB) support                  
            [*]     rt2800usb - Include support for rt33xx devices (NEW)     
            [*]     rt2800usb - Include support for rt35xx devices (EXPERIMEN
            [*]     rt2800usb - Include support for rt3573 devices (EXPERIMEN
            [*]     rt2800usb - Include support for rt53xx devices (EXPERIMEN
            [*]     rt2800usb - Include support for rt55xx devices (EXPERIMEN
            [*]     rt2800usb - Include support for unknown (USB) devices (NE
            [*]   Ralink debug output (NEW)                                  

変更したら.configにsaveしてexitする。

zimageとdtbsのmake。
ログは長いので省略。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -j3 LOADADDR=0x80008000 zImage dtbs

moduleのmake。
ログは長いので省略。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- -j3 modules

これでkernelの再構築は完了。

引き続きmicro SDカードの構築を行う。
母艦(ゲストOS)にmicro SDカードを認識させる。
以下micro SDカードが/dev/sdbとして認識された前提とする。

micro SDカードのMBRを編集する。

temp-host@temp-host:~$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1
temp-host@temp-host:~$ sudo fdisk /dev/sdb

コマンド (m でヘルプ): p

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
ヘッド 255, セクタ 63, シリンダ 1936, 合計 31116288 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            8192    31116287    15554048    c  W95 FAT32 (LBA)

コマンド (m でヘルプ): m
コマンドの動作
   a   ブート可能フラグをつける
   b   bsd ディスクラベルを編集する
   c   dos 互換フラグをつける
   d   パーティションを削除する
   l   既知のパーティションタイプをリスト表示する
   m   このメニューを表示する
   n   新たにパーティションを作成する
   o   新たに空の DOS パーティションテーブルを作成する
   p   パーティションテーブルを表示する
   q   変更を保存せずに終了する
   s   空の Sun ディスクラベルを作成する
   t   パーティションのシステム ID を変更する
   u   表示/項目ユニットを変更する
   v   パーティションテーブルを照合する
   w   テーブルをディスクに書き込み、終了する
   x   特別な機能 (エキスパート専用)

コマンド (m でヘルプ): d
選択したパーティション 1

コマンド (m でヘルプ): p

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
ヘッド 255, セクタ 63, シリンダ 1936, 合計 31116288 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): c
DOS Compatibility flag is set (DEPRECATED!)

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, 初期値 1): 1
最初 セクタ (63-31116287, 初期値 63): 8192
Last セクタ, +セクタ数 or +size{K,M,G} (8192-31116287, 初期値 31116287): 22467279

コマンド (m でヘルプ): p

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
ヘッド 255, セクタ 63, シリンダ 1936, 合計 31116288 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            8192    22467279    11229544   83  Linux

コマンド (m でヘルプ): l

 0  空              24  NEC DOS         81  Minix / 古い Li bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux スワップ  c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隠し C: ド c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 拡張領域  c7  Syrinx         
 5  拡張領域        41  PPC PReP Boot   86  NTFS ボリューム da  非 FS データ   
 6  FAT16           42  SFS             87  NTFS ボリューム db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux プレーン  de  Dell ユーティリ
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX ブート可能  4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 ブートマネ 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad ハ eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 拡張領域 (L 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隠し FAT12      56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 診断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隠し FAT16 <32M 61  SpeedStor       ab  Darwin ブート   f2  DOS セカンダリ 
16  隠し FAT16      63  GNU HURD または af  HFS / HFS+      fb  VMware VMFS    
17  隠し HPFS/NTFS  64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI スワップ   fd  Linux raid 自動
1b  隠し W95 FAT32  70  DiskSecure Mult bb  隠し Boot Wizar fe  LANstep        
1c  隠し W95 FAT32  75  PC/IX           be  Solaris ブート  ff  BBT            
1e  隠し W95 FAT16  80  古い Minix     

コマンド (m でヘルプ): t
選択したパーティション 1
16進数コード (L コマンドでコードリスト表示): c
パーティションのシステムタイプを 1 から c (W95 FAT32 (LBA)) に変更しました

コマンド (m でヘルプ): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
パーティション番号 (1-4, 初期値 2): 2
最初 セクタ (63-31116287, 初期値 63): 22467280
Last セクタ, +セクタ数 or +size{K,M,G} (22467280-31116287, 初期値 31116287): 29301360

コマンド (m でヘルプ): p

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
ヘッド 255, セクタ 63, シリンダ 1936, 合計 31116288 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            8192    22467279    11229544    c  W95 FAT32 (LBA)
/dev/sdb2        22467280    29301360     3417040+  83  Linux

コマンド (m でヘルプ): a
パーティション番号 (1-4): 1

コマンド (m でヘルプ): p

Disk /dev/sdb: 15.9 GB, 15931539456 bytes
ヘッド 255, セクタ 63, シリンダ 1936, 合計 31116288 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1   *        8192    22467279    11229544    c  W95 FAT32 (LBA)
/dev/sdb2        22467280    29301360     3417040+  83  Linux

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。

警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。新しいテーブルは
次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に
使えるようになるでしょう

警告: DOS 6.x パーティションを作成、または変更してしまった場合は、
fdisk マニュアルの追加情報ページを参照してください。
ディスクを同期しています。
temp-host@temp-host:~$ 

念の為にsyncした後、母艦(ゲストOS)を再起動する。

temp-host@temp-host:~$ sudo sync
temp-host@temp-host:~$ sudo sync
temp-host@temp-host:~$ sudo sync
temp-host@temp-host:~$ sudo reboot

母艦(ゲストOS)の再起動後micro SDカードは自動認識されてしまう。
一旦umountしてからボリュームラベルboticとしてパーティション1のフォーマットを行う。

temp-host@temp-host:~$ ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb1  /dev/sdb2
temp-host@temp-host:~$ sudo umount /dev/sdb1
temp-host@temp-host:~$ sudo mkfs.vfat -v -n botic -F 32 /dev/sdb1
mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
/dev/sdb1 has 64 heads and 32 sectors per track,
hidden sectors 0x2000;
logical sector size is 512,
using 0xf8 media descriptor, with 22459088 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 16 sectors per cluster.
FAT size is 10956 sectors, and provides 1402321 clusters.
There are 32 reserved sectors.
Volume ID is 4b6b1f08, volume label botic      .
temp-host@temp-host:~$ 


フォーマット後、パーティション1は母艦(ゲストOS)で自動マウントされる。
botic_demoのパーティション1をループバックデバイスとしてmountし、micro SDカードのパーティション1にcpコマンドによりコピーする。
以下micro SDカードのパーティション1が/media/temp-host/botic/に自動マウントされた前提。

temp-host@temp-host:~$ cd ./botic
temp-host@temp-host:~/botic$ fdisk -l bbb-demo-botic-v3-2gb.img

ディスク bbb-demo-botic-v3-2gb.img: 1782 MB, 1782579200 バイト
ヘッド 255, セクタ 63, シリンダ 216, 合計 3481600 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000

              デバイス ブート      始点        終点     ブロック   Id  システム
bbb-demo-botic-v3-2gb.img1   *        2048      198655       98304    e  W95 FAT16 (LBA)
bbb-demo-botic-v3-2gb.img2          198656     3481599     1641472   83  Linux
temp-host@temp-host:~/botic$ 
temp-host@temp-host:~/botic$ sudo mkdir /mnt/loop1
temp-host@temp-host:~/botic$ sudo mount bbb-demo-botic-v3-2gb.img /mnt/loop1/ -o loop,offset=$((512*2048))
temp-host@temp-host:~/botic$ sudo cp -r /mnt/loop1/* /media/temp-host/botic/
temp-host@temp-host:~/botic$ sudo umount /mnt/loop1
temp-host@temp-host:~/botic$ sudo rm /mnt/loop1


引き続き、パーティション2にbotic_demoの起動イメージの中のパーティション2をddコマンドによりコピーする。

temp-host@temp-host:~/botic$ sudo dd if=./bbb-demo-botic-v3-2gb.img skip=198656 count=$((3481599-198656)) of=/dev/sdb2
3282943+0 レコード入力
3282943+0 レコード出力
1680866816 バイト (1.7 GB) コピーされました、 256.039 秒、 6.6 MB/秒
temp-host@temp-host:~/botic$ 

コピー後、パーティション2は自動マウントされる。
以下micro SDカードのパーティション2が/media/temp-host/rootfsとして自動マウントされた前提。
この状態ではmicro SDカードのMBRとパーティション2のext4のinodeテーブルは一致していないのでresize2fsで調整を行う。

temp-host@temp-host:~/botic$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       18447100 14861412   2625588  85% /
none                   4        0         4   0% /sys/fs/cgroup
udev             1010556        4   1010552   1% /dev
tmpfs             204272     1428    202844   1% /run
none                5120        0      5120   0% /run/lock
none             1021344       76   1021268   1% /run/shm
none              102400       48    102352   1% /run/user
/dev/loop0         98094    12536     85558  13% /mnt/loop1
/dev/loop1       1582864   436612   1047796  30% /mnt/loop2
/dev/sdb1       11218568    15920  11202648   1% /media/temp-host/botic
/dev/sdb2        1582864   436612   1047796  30% /media/temp-host/rootfs
temp-host@temp-host:~/botic$ sudo resize2fs /dev/sdb2
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/sdb2 is mounted on /media/temp-host/rootfs; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/sdb2 is now 854260 blocks long.

temp-host@temp-host:~/botic$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       18447100 14861396   2625604  85% /
none                   4        0         4   0% /sys/fs/cgroup
udev             1010556        4   1010552   1% /dev
tmpfs             204272     1428    202844   1% /run
none                5120        0      5120   0% /run/lock
none             1021344       76   1021268   1% /run/shm
none              102400       48    102352   1% /run/user
/dev/loop0         98094    12536     85558  13% /mnt/loop1
/dev/loop1       1582864   436612   1047796  30% /mnt/loop2
/dev/sdb1       11218568    15920  11202648   1% /media/temp-host/botic
/dev/sdb2        3330648   437012   2726660  14% /media/temp-host/rootfs
temp-host@temp-host:~/botic$ 

zimageとdtbsの差し替え。

temp-host@temp-host:~/botic$ cd ../BBB-LINUX/linux-3.16.7
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo cp ./arch/arm/boot/zImage /media/temp-host/botic/
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo cp ./arch/arm/boot/dts/* /media/temp-host/botic/dtbs/
cp: ディレクトリ `./arch/arm/boot/dts/include' を省略しています
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ 

moduleのインストール。
ログは省略。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/temp-host/rootfs/ modules_install

これで一応起動用micro SDカードは構築できたことになる。
楽曲ファイル用のディレクトリを作成する。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo mkdir /media/temp-host/botic/music

/media/temp-host/botic/musicに好きな楽曲ファイルを詰め込んでおく。

ついでにWiFi設定を行っておく。
/media/temp-host/rootfs/etc/network/interfacesを編集する。
以下は一例。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo nano /media/temp-host/rootfs/etc/network/interfaces
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo cat /media/temp-host/rootfs/etc/network/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

#WiFi
auto wlan0
iface wlan0 inet dhcp
  wpa-ap-scan 1
  wpa-scan-ssid 1
  wpa-bssid 10:6F:3F:4B:20:55
  wpa-key-mgmt WPA-PSK
  wpa-proto RSN
  wpa-pariwise COMP TKIP
  wpa-group CCMP TKIP
  wpa-ssid MY-AP-001
  wpa-psk hogehoge

一応syncを行い母艦(ゲストOS)からmicro SDカードを切り離す。

temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo sync
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo sync
temp-host@temp-host:~/BBB-LINUX/linux-3.16.7$ sudo sync

micro SDカードをBBBに挿入し起動を行う。
コンソールはWindows8.1 ノートPCからUSBシリアルTTLケーブルを介し、TeraTermでシリアル接続で行う。
115200bps 8bit; non parity; stop bit 1; フロー制御なし。
LANケーブルを接続していないせいか、少し起動に時間がかかるが起動できた。

default username:password are [debian:botic] and [root:botic]は変わっていない。
ログインし動作確認を行う。

debian@bbb:~$ uname -r
3.16.7
debian@bbb:~$ sudo -s
root@bbb:/home/debian# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: BOTICAudio [TPA BOTIC-Audio], device 0: ES9018 es9018-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
root@bbb:/home/debian#
root@bbb:/home/debian# play /data/test/test_96k_24b.flac

/data/test/test_96k_24b.flac:

 File Size: 4.96M     Bit Rate: 2.41M
  Encoding: FLAC          Info: Processed by SoX
  Channels: 2 @ 24-bit
Samplerate: 96000Hz
Replaygain: off
  Duration: 00:00:16.50

In:100%  00:00:16.50 [00:00:00.00] Out:1.58M [ =====|======] Hd:0.1 Clip:0
Done.

前回同様特に問題無く自作PCM5122 I2S I/F DACでtest_96k_24b.flacを鳴らす事ができた。
USB WiFiドングル経由でDHCPによるIPの払い出しも問題なく成功している。

root@bbb:/home/debian# ifconfig
eth0      Link encap:Ethernet  HWaddr 1c:ba:8c:96:0a:7e
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:56

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:30588 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30588 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3883280 (3.7 MiB)  TX bytes:3883280 (3.7 MiB)

usb0      Link encap:Ethernet  HWaddr 42:81:1a:89:3b:cc
          inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr b0:c7:45:46:30:ee
          inet addr:192.168.1.29  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::b2c7:45ff:fe46:30ee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:68893 errors:0 dropped:0 overruns:0 frame:0
          TX packets:44283 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6471803 (6.1 MiB)  TX bytes:7871585 (7.5 MiB)

root@bbb:/home/debian#

wlan0に192.168.1.29が払い出されていて、このIPv4アドレスにssh接続を行うことができた。
USB WiFiドングル経由での接続ができれば、私にとってethernet接続は不要なのでeth0のinterfaceの自動起動をやめる。

root@bbb:/home/debian# nano /etc/network/interfaces
root@bbb:/home/debian# cat /etc/network/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

#WiFi
auto wlan0
iface wlan0 inet dhcp
  wpa-ap-scan 1
  wpa-scan-ssid 1
  wpa-bssid 10:6F:3F:4B:20:55
  wpa-key-mgmt WPA-PSK
  wpa-proto RSN
  wpa-pariwise COMP TKIP
  wpa-group CCMP TKIP
  wpa-ssid MY-AP-001
  wpa-psk hogehoge
root@bbb:/home/debian#

再起動後にifconfigを確認。

root@bbb:/home/debian# ifconfig
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:4164 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4164 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:533094 (520.5 KiB)  TX bytes:533094 (520.5 KiB)

usb0      Link encap:Ethernet  HWaddr 3e:11:a6:23:fd:17
          inet addr:192.168.7.2  Bcast:192.168.7.3  Mask:255.255.255.252
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr b0:c7:45:46:30:ee
          inet addr:192.168.1.29  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::b2c7:45ff:fe46:30ee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:16390 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11661 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1323681 (1.2 MiB)  TX bytes:2132606 (2.0 MiB)

root@bbb:/home/debian#

ethernetを接続していなくても起動が遅くならずにすむようになり、起動後すぐにWiFi接続ができるようになる。

micro SDカードのパーティション1を自動マウントするように/etc/fstabを編集する。
先ず、fdisk -lによりmicro SDカードのdevice名を確認。

root@bbb:/home/debian# fdisk -l

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes
255 heads, 63 sectors/track, 1936 cylinders, total 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        8192    22467279    11229544    c  W95 FAT32 (LBA)
/dev/mmcblk0p2        22467280    29301360     3417040+  83  Linux

Disk /dev/mmcblk1: 3867 MB, 3867148288 bytes
4 heads, 16 sectors/track, 118016 cylinders, total 7553024 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk1p1   *        2048      198655       98304    e  W95 FAT16 (LBA)
/dev/mmcblk1p2          198656     7553023     3677184   83  Linux

Disk /dev/mmcblk1boot1: 2 MB, 2097152 bytes
4 heads, 16 sectors/track, 64 cylinders, total 4096 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mmcblk1boot1 doesn't contain a valid partition table

Disk /dev/mmcblk1boot0: 2 MB, 2097152 bytes
4 heads, 16 sectors/track, 64 cylinders, total 4096 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/mmcblk1boot0 doesn't contain a valid partition table
root@bbb:/home/debian#

micro SDのパーティション1は/dev/mmcblk0p1であるので/etx/fstabを編集。
ついでにnasサーバーのディレクトリもcifsで自動mountされるように設定を行う。

root@bbb:/home/debian# nano cat /etc/fstab
root@bbb:/home/debian# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Auto generated by RootStock-NG: setup_sdcard.sh
#
/dev/mmcblk0p2  /            ext4  noatime,errors=remount-ro  0  1
/dev/mmcblk0p1  /boot/uboot  auto  defaults                   0  0
//192.168.1.14/dlna /data/nas cifs username=junk,password=hogehoge,uid=mpd,file_mode=0644,dir_mode=0755,iocharset=utf8,ro 0 0
debugfs         /sys/kernel/debug  debugfs  defaults          0  0
root@bbb:/home/debian#

当然の事ながら//192.168.1.14/dlnaの部分とusername=junk,password=hogehogeの部分は環境ごとに適切に設定する必要がある。
mpdのデータルート/dataにcifdのマウントポイントとmicro SDカードの楽曲ファイルフォルダのシンボリックリンクを作成する。

root@bbb:/home/debian# cd /data/
root@bbb:/data# ln -s /boot/uboot/music ./sdcard
root@bbb:/data# mkdir nas
root@bbb:/data# 

/etc/mpd.confにおまじないのため編集を行う。

root@bbb:/data# nano /etc/mpd.conf
root@bbb:/data# diff -u /etc/mpd.conf.backup /etc/mpd.conf
--- /etc/mpd.conf.backup        2015-03-13 17:22:56.809026377 +0000
+++ /etc/mpd.conf       2015-12-15 06:08:11.704848431 +0000
@@ -79,7 +79,8 @@
 # to have mpd listen on every address
 #
 # For network
-bind_to_address                "localhost"
+#bind_to_address               "localhost"
+bind_to_address         "0.0.0.0"
 #
 # And for Unix Socket
 #bind_to_address               "/var/run/mpd/socket"
root@bbb:/data#

これで一応設定は完了である。
BBBの再起動を行う。

母艦(ホストOS)にGnome Music Player Client(GMPC)をインストールする。
GMPCは以下からDLできる。
http://gmpclient.org/

接続設定は最低限以下のように設定すれば良い。

上メニューのMusic→Connectを行うとBBBのMPDと接続することができる。
左のメニューのDatabaseを選択し、Directoryを辿るとsdcardおよびnasサーバーの中の楽曲ファイルを認識できている。

これでネットワークミュージックプレイヤーの基本形が完成した。

後は細かいチューニングを行う。
あまりにも色々弄りすぎて憶えていないが、一応以下だけ書いておく。

root@bbb:/home/debian# cp /etc/sysctl.conf /etc/sysctl.conf.backup
root@bbb:/home/debian# nano /etc/sysctl.conf
root@bbb:/home/debian# diff -u /etc/sysctl.conf.backup /etc/sysctl.conf
--- /etc/sysctl.conf.backup     2015-12-21 07:31:39.673107187 +0000
+++ /etc/sysctl.conf    2030-05-30 06:32:23.398336387 +0000
@@ -58,3 +58,6 @@
 # Log Martian Packets
 #net.ipv4.conf.all.log_martians = 1
 #
+vm.dirty_background_ratio=0
+vm.dirty_ratio=5
+vm.min_free_kbytes=32768
root@bbb:/home/debian#
root@bbb:/home/debian# nano /etc/udev/rules.d/60-schedulers.rules
root@bbb:/home/debian# cat /etc/udev/rules.d/60-schedulers.rules
# set deadline scheduler for non-rotating disks
ACTION=="add|change", KERNEL=="mmcblk0", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
root@bbb:/home/debian#

再起動して確認。

root@bbb:/home/debian# cat /proc/sys/vm/dirty_ratio
5
root@bbb:/home/debian# cat /proc/sys/vm/dirty_background_ratio
0
root@bbb:/home/debian#  cat /sys/block/mmcblk0/queue/scheduler
noop [deadline] cfq
root@bbb:/home/debian# 

趣旨は特に44.1KHzサンプルの楽曲ファイルを再生中に「・・・チリッ・・・ッ・・・」というかすかなノイズが 入り、主観的音質評価が下がることへの対策のつもり。
この設定にするとノイズの発生する機会が減ったように思える。
ただ、プラシーボ効果かもしれない。

ノイズの原因が判っているわけではないが、恐らくはI2Sドライバのデータ設定遅延が発生していると予想される。
もしデータ設定遅延時、I2Sドライバで0データを設定しているのならば、PCM5122ではインタポレーションフィルタがあるので 時間軸上に散らされてポップノイズとはならず、上記のようなかすかなノイズになるのではないだろうか。
dirty_background_ratioを0%に設定することによりdirty pageの発生とともにバックグラウンドで払い出すことを期待する。
またdirty_ratioを小さな値にすることによりdirty pageが滞留してもあまり量が増えないうちに払い出しされ、 mmcドライバが長時間CPU時間を占有しないようになることを期待する。
楽曲データ再生時はdirty pageを残しておいても同じpageが再変更される可能性は少ないので意味がない。
よって、この設定で恐らく問題ないと思われる。
I/Oエレベータスケジューラはmicro SDカードを用いる前提であるならばcfqはパフォーマンス的にあまりよくない。
問題はnoopもしくはdeadlineのどちらを選択するかであろう。
micro SDカードのセクタサイズは512Byteで、linux kernelのpage sizeは4KByteであるので4KByteの倍数まで貯めて処理した方がパフォーマンス的に良いと思われる。
noopではmmcドライバの起動回数が無意味に多くなりすぎるので、deadlineの方が勝ると予想している。
しかしnoopでもあまり主観的音質評価は変わらないように思える。
単にmmcドライバ・WiFiドライバ・I2Sドライバそれぞれ個別のパフォーマンスを改善することが目的ではなく、それぞれが連続してCPU時間を 使用しないで協調させることが目的なので、単純ではない。
一つのアイデアとしては以下のような爆速のmicro SDカードを使えば少なくともmmcドライバのCPU占有率は下がるのでより良くなるのではなかろうか?
サンディスク エクストリーム プロ microSDHC(TM)/ microSDXC(TM) UHS-I カード
問題は試しに買ってみようというには高価すぎるところ。

上記3つのパラメータを変えることによりずいぶん44.1KHzの楽曲データも聴きやすくなったように感じられる。
綿密な比較は行っていないので単なるおまじないである。

何はともあれ自作PCM5122 I2S I/F DACを用いたネットワークオーディオプレイヤー環境の構築ができた。
USB WiFiドングル経由での接続も行え、nasサーバおよびmicro SDカード上の楽曲もWindows PCもしくはANDROIDのMPDクライアントソフトで 選択し再生することができるようになった。
今のところ判っている大きな問題点は以下。
・たまに勝手にリブートしてしまうことがある
・起動に失敗することがある

上記は何もbotic_demoの環境に限ったことではないので気にしないことにする。
USB WiFiをBBB直接接続ではなく、ACアダプタ給電のUSBハブ経由にすると良いかもしれない。

・44.1KHz楽曲を再生時mpdの%CPUが60%を超える。

安定動作の為には外部クロック供給が必要かもしれない。
これは今後の課題。

・MPDroidで操作していると電源を切る方法がない。

面倒であるがsshでshutdownする。

トータルでは非常に満足している。

タイトルとURLをコピーしました