前回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する。
トータルでは非常に満足している。