12
19
2016
BeagleBone + Botic で簡単DSD Native 再生(その6)
BeagleBone Botic 環境の改善
先ずは『電源ブチッ!!!』から
Rapsberry Pi 用に購入してあったミニUPS “Galileo 7” を流用することにした
とりあえず、MPDやRoonで問題無く再生できるようになったので、次はBBB/BBG Botic環境の改善について紹介しようと思う.先ずは、このままではAudio装置としては全く使いものにならないので、最低限何時でも『電源ブチッ!!!』ができるような対策を施さなければならないだろう.
Linux剥き出しのコンピュータシステムなんてAudio装置の仲間入りさせる訳には行かない.組み込み系のシステムでは電源ブチッ!!!でも壊れないような仕組みが備わっているが、通常のLinuxでは稼働中に電源ブチッ!!!を行うと、殆どの場合ファイルシステムが壊れてとても厄介な事になる.lightMPDなどのアプローチは素晴らしいが、如何せんユーザレベルでおいそれと手を出すことができないのが難点だ.
できればlightMPDのようなソフトウェア的なアプローチが出来れば良いのだが、先ずはハードウェアで何とかする事を考えよう.幸いなことに BeagleBone Black/Green では Power Button SW が基板上に設けられており、BoticなどのBeagleBone用のディストリビューションはこのPower Button SWを数秒間押下するだけで自動的に強制シャットダウンして電源が切断されるようになっている.
このSWはCapeなどの拡張基板を載せてしまうと指で簡単に押せなくなってしまうのが難点だが、このSWを直接押下しなくとも、拡張端子 P9 の#9番ピンにこのSWの信号が接続されており、このピンを “Low” 側に落とすことでSWの押下と同じ事を実現可能だ.
今回導入するのは、この Power Button SW を外部の電源監視装置経由で ON/OFF させる事で、電源断時のシャットダウン制御を行うことを考える.何となく難しそうな仕組みが必要と思うかもしれないが、要は家庭用のPCやサーバ用途で使われているUPS装置と同じような物を導入して、BeagleBoneを制御してしまおうと言う魂胆だ.
勿論、UPSと言ってもPC用やサーバ用のAC電源を前提とした大袈裟な物ではなく、モバイルバッテリーや乾電池などで動作させることのできる超小型UPS装置を使うことになる.今回使用した超小型UPS装置 “Galelio 7” はRaspberry Pi用に開発されたもののようだが、 “Galelio 7” 自体は汎用性が高いので BeagleBoneなどの +5V単一電源で動作可能な小型コンピュータ類は何でも対応可能だ.
この超小型UPS装置 “Galelio 7” については、以前の記事『Raspberry Pi の電源対策』で紹介しているので、製品についてはそちらの記事を参照して欲しい.
“Galelio 7” と BeagleBone Black/Green との組みあわせ方法
“Galelio 7″の動作シーケンスについては、Galileo 7 製品ドキュメントか、先の記事『Raspberry Pi の電源対策』に書かれているので、先ずはその内容を理解して欲しい.
Galelio 7 の動作試験中
BeagleBone側のP9コネクターの電源部と接続する
今回の要点としては、電源断検出やUPSから手動でのシャットダウン要求が発せられた場合に、CN8のStatus(#2ピンまたはCN5のStatusピン)信号が Low -> High(3.3V)に遷移するので、この Status 信号を利用して、BeagleBoneのPower Button SWを ON (P9 : pin #9 を “Low” 状態へ遷移させる)仕組み(インタフェース)を作るだけだ.
極めて単純な仕組みなのだが、ちょっと厄介なのは UPS側の Status信号が “Hi” active であることと、BeagleBoneのPower Button SW が 電源の ON/OFF を繰り返すトグルSWになっており、押下状態( “Low” )のままだと、電源断後に直ぐ “ON” シーケンスに移ってしまい、再起動してしまうことだ.電源断後に再び電源が入らないようにさせるための何らかの対策が必要だ.
BeagleBoneのピン#9に印加されている電圧を測ってみると+2.7V程だった.このピン#9をどの位の時間”Low” に保つ必要があるのかハッキリしないが、ピン#9をほんの一瞬GNDに落とすだけでもパワーオン/シャットダウンシーケンスに入ることが確認できたので、数十ミリ秒程度 “Low” 状態を保てば良さそうだ.
74HC123などのワンショットのモノマルチバイブレータを使うのが手っ取り早いのだが、もう1種類ロジックICを追加しなければならないので、今の基板上には載せるスペースが全く取れない.仕方が無いので現状の3個のロジックICの組みあわせで無理矢理組んでみることにした.
“Galelio 7” はバッテリー駆動状態に入ると、CN5のStatusピンが “Low” → “Hi” に遷移するので、その信号をインバータ(74HC04)に送り反転させた後、3ステートバッファ(74HC126)に送る.BeagleBoneのPower ON/OFF SWピン(P9-#9pin)との間に3ステートバッファを設けたのは、電源がOFFになった際に、Power ON/OFF SWピンが “Low” の状態に陥るのを防ぐためだ.
BeagleBone側の電源がOFFになった状態でも、この時点ではUPSから電源供給は続いており、Power ON/OFF SWピンが “Low” の状態では再びBeagleBoneの電源がONになってしまうからだ.3ステートバッファのOEポートがBeagleBoneの+3.3V電源につながっているので、BeagleBoneの電源が切れると、OEが “Low” となるので、バッファの出力ポートは “Hi-Z”ハイインピーダンス状態になり、Power ON/OFF SWピンが通常の”Hi” 状態を保つことになるので、意図せぬ再電源ONを回避することができる.
BeagleBoneの電源が切れてから数秒経過後に”Galelio 7″ 側もUPS動作を停止し、バッテリーからの電源供給もOFFになる.この状態で双方が完全にOFFの状態(正確にはUPS側は “Shutdown/PowerOn Switch” からの入力待ちの待機状態)となる.
BeagleBoneを再び起動するには、UPS供給側の電源(J1)をOFF→ONに遷移させるか、UPS側に電源が供給されている状態(UPS側で強制”Shutdown”処理した状態)であれば 単純に”Shutdown/PowerOn Switch” を押せば良い.
この辺のUPSの動きは、IT系のエンジニアリング経験が無いとピンと来ないかも知れないが、わざと停電状態を作ったり、”Shutdown/PowerOn Switch”を押下してみたりしながら実験してみて欲しい.
【追記】試作3号機では IC1 のインバータをオープンコレクタ(ドレイン)タイプの 74HC05 に変更している. 74HC05 を用いるときは5kΩ程度の抵抗を介して直接するように変更した.この抵抗の値が低すぎると#9 pinの電圧が下がりすぎて電源OFF後に再び電源SWがON状態になってしまうので、この辺の値はトライアンドエラーで適切な値を決める必要がある.
IC1 のインバータをオープンコレクタタイプにすると、インジケータ用の各種LED(44.1KHz/48.0KHz、Cape Enable, DSD ON)を直接繋いで点灯させることができるので、水晶発振器のクロック切り替え用に1回路しか使っていなかった残りの回路を流用できるので都合が良い.但し、オープンコレクタなので、水晶発振器のクロック切り替え用の出力端子を適切な抵抗でプルアップしておく事を忘れないように.
Mini UPS “Galelio 7″とBeagleBone の結線
“Galelio 7″とBeagleBone の結線
“Galelio 7″とBeagleBone の結線(オープンコレクタタイプのインバータの場合)
Galelio 7と組み合わせるバッテリー
Galelio 7が想定するバッテリーのタイプは、所謂モバイルバッテリーと呼ばれているスマートフォン充電用のLiイオンバッテリーだ.このタイプのバッテリーは入出力とも+5Vになっており、RaspberryPiやBeagleBoneなどの外部供給電源として都合が良い.
実際に小型のスティックタイプのモバイルバッテリー(2,600mAH: Max 1A: 自動シャットダウン機能無し)を接続してみたが、電源が貧弱?すぎて電圧不足に陥ってしまうようで、バッテリーに切り替わった途端に落ちてしまう.最大1Aの供給能力では足りないのかそれとも電圧が低いのか、いずれにしてもまともに利用するには2A以上の電源供給能力のあるモバイルバッテリーが必要だろう.
(注:モバイルバッテリーの大部分の機種はオートパワーオフ機能が付いており、このような機種は今回の用途としては使用できないので注意が必要だ.出力コネクタを繋げば常に電源が供給され続ける機種以外は基本的に使用できないと思って良いだろう.この手のモバイルバッテリは殆ど出回っていないが、ラジコン屋さんの世界では7.2V出力のLiイオンバッテリーやNi-MHバッテリーが広く出回っているようなので、このバッテリーを使って5.0Vに降圧させて使うという手もあるだろう.何れにしてもシャットダウンのためのバッテリーシステムに煩わされることになるだろう.)
モバイルバッテリーを使う上で気になる点として、Liイオンバッテリーのセル電圧は通常 3.6〜3.7Vなので、+5V出力を行うためには何らかの昇圧回路が必要だ.この手の安価なモバイルバッテリーでは簡易なDC-DCコンバータを利用していると思われ、発生するノイズなどお構いなしの世界だろう.緊急時の臨時電源とは言え、Hi-Fiオーディオの世界にノイズ発生源を持ち込むのはできる限り避けたいところだ.
念のためGalelio 7とモバイルバッテリーの組みあわせで、供給電源にどのようなノイズが加わるのか簡単に探ってみた.先ずは、Galelio 7とモバイルバッテリーを繋ぎ、BeagleBoneをOFFにした状態で、+5V出力ラインのノイズをオシロスコープで観察して見た.
Liイオンタイプのモバイルバッテリから供給した際の電源ノイズ [ Battery Operation ]
ニッケル水素充電池から供給した際の電源ノイズ [ Battery Operation ]
通常運用時の電源ノイズ [ Normal Operation ]
BeagleBoneが稼働すると電源廻りのノイズは凄いことに...
やはり、Liイオンタイプのモバイルバッテリはニッケル水素充電池の場合よりも圧倒的にノイズが多い.どちらもスパイク状のノイズが見られるが、このノイズはバッテリー駆動中だけに現れるもので、電源が給電ポート(J1)から供給されている場合は、このノイズは観察されないので、通常の運用時にはそれ程問題にはならないだろう.
市販のモバイルバッテリを色々と探し回ったが、常時電源出力に対応している製品が見つからなかったので諦めてLi-ionバッテリで自作することにした.これなら電源容量や出力可能な電流の問題は回避できるのだが、自動充電の仕組みを組み込むのは厄介そうだ.Li-ionバッテリは取り扱いを間違えると発火したり爆発の恐れがあるのでその辺の安全対策も必要だ.自動充電の問題はさておいて、秋葉原で18650タイプのLi-ionバッテリ2本を購入し、+5V/+3.3V出力のバッテリー電源を作ってみた.でも18650タイプだと大きすぎて、コンパクトタイプのケースには組み込めそうもない.
Li-ionの他に、Li-Poの小型角形バッテリを使えばサイズの問題は何とかなりそうだが、相変わらず充電問題はつきまとう.秋月電子で 5.4V 25F というスーパーキャパシタ(電気二重層コンデンサ)を手に入れたので、バッテリーの代わりにスーパキャパシタを使うという手も考えられそうだ.ただ、25Fのスーパーキャパシタだと初期充電電流の問題があり、単純に電源ラインに組み込むことはできそうにもない.初期受電電流を低く抑えながら25Fの大容量を満たすのは結構大変そうだ.
Li-ionバッテリは過放電や過充電防止の保護回路を付けないととても危険だ.今回は実験なので保護回路は省いているが、実運用で使うには必ず保護回路を組み込むことを肝に銘じておいて欲しい.
とりあえずLi-ionバッテリ2本でバックアップ用の+5V/3.3V電源を作ってみた
【追記】Seeed Studio の LiPo Rider Proで問題解決?
UPSのバッテリーバック用の電源として適切な物を探していたら、Seeed Studio から “LiPo Rider Pro” というLiポリマーバッテリー充電器兼5V 安定化電源が発売されていたので試しに購入してみた.UPSのバックアップ電源用なので、勝手にバッテリーに充電してくれて外部からの電源供給が止まってもバッテリー電源で5V給電を続けてくれる.使い方としてはノートPCをACアダプタとの組みあわせで使うイメージに近い.今回の目的はLinux OSがシャットダウンするまでの短時間(数秒程度)用途なので、Liポリマーバッテリーも小容量で済む.ちなみにLiPo Rider Proのお値段も $14.95 U.S. (千石電商で1,750円) 程なので、400mAhのLiポリマーバッテリ(750円)と合わせてもモバイルバッテリーと大差ない.
Seeed Studio の LiPo Rider Pro はモバイルバッテリーと同じような使い方ができそうだ
Micro SDカード起動から内蔵eMMC起動へ変更する
BeagleBoneではデフォルトで内蔵のeMMCと呼ばれているフラッシュメモリ領域から優先的にOSの起動が行われるように設定されている.内蔵のeMMCにはメーカー出荷の段階で、最初からAngstrom Linux がインストールされており、電源を入れるとこのAngstrom Linux が起動されてしまう.
BeagleBoneではこの内蔵のeMMC以外のブータブルデバイスからOSを起動させることが可能だが、Micro SDカードからOSを起動させるには、S2スイッチを押しながら電源を投入させる必要がある.このS2スイッチはCapeボードを上に載せてしまうと指で簡単に押すことができなくなってしまうので、Micro SDカードからOSを起動させることが難しくなってしまう.
BeagleBone Black System Rev C.1 Reference Manual P108 より引用
このS2スイッチは、マニュアルの108ページ Fig.63 に記載されているように、S2スイッチを押すと100オームの抵抗を介して SYSBOOT[2] (P8拡張端子のpin#43 : LCD_DATA2/GPIO2_8 )がD-GND側に落ちるようになっている.つまりP8拡張端子のpin#43を100オームの抵抗を介してD-GNDと接続しておけば良い.但し、このピンは GPIO2_8 やLCD_DATA2 などでも使用されるので、他の用途にこのピンを使う場合には、OS起動後にこのピンを開放(切り離す)する必要がある.
恒常的にMicro SDカードからOSを起動させるのであればこの方法でも良いのだが、Micro SDカードをOSの起動ボリュームに使用する事は信頼性や性能面から不安が残る.そこで今回は、デフォルトでeMMCフラッシュストレージにインストールされているAngstrom Linuxを消して、その代わりに Botic を入れてしまおうという計画だ.
Linuxのブートメカニズムに関する専門知識がない限り、Linuxのブートシーケンスの制御は難しい.幸いなことに Boticには ”/opt/scripts/tools/” 配下に便利なユーティリティーツールが用意されており、その中に 現在起動中のシステムをそっくりeMMCフラッシュストレージにコピーしてくれるシェルスクリプトがある.
それでは、早速その便利なスクリプトを使ってeMMCフラッシュストレージに Botic をコピーして見る事にする.尚、今回は最初 Botic 7 環境でこのスクリプトを使って実験を行ってみたが、コピーまでは上手く行くが、その後のOS起動時に OS カーネルイメージを読み込むデバイス名(/dev/mmcblk0p0)がSDカードからeMMC側に切り替わってくれなく、uEnv.txt のカーネル起動デバイスを “/dev/mmcblk1p0” に変更しないと上手く起動してくれなかった.恐らくBotic 7 では Micro SDカードからブートさせるために、何らかの方法でブートデバイスに対して操作を加えてしまっているのだろう.
Botic 4 ではこの問題は発生しなかったので、今回はBotic 4 での実行結果を紹介する.Botic 4 で一旦 eMMC側にシステムをコピーしておき、その後に Botic 7 にアップデートすれば良いだろう.(注:eMMC上のBotic 4 をBotic 7に先の記事『BeagleBone + Botic で簡単DSD Native 再生(その2)』で紹介した方法でアップデートするとブートデバイスの関係でBoticが起動しなくなる.この対策方法についてはこの後で紹介する.)
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
1040 bytes read in 6 ms (168.9 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 ...
372 bytes read in 27 ms (12.7 KiB/s)
5805792 bytes read in 341 ms (16.2 MiB/s)
2829850 bytes read in 177 ms (15.2 MiB/s)
30538 bytes read in 72 ms (414.1 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x5896e0 ]
## Flattened Device Tree blob at 88000000
Booting using the fdt blob at 0x88000000
Using Device Tree in place at 88000000, end 8800a749
Starting kernel ...
[ 0.593214] Error: Driver 'tfp410' is already registered, aborting...
[ 0.600376] slave hdmi: could not get i2c
[
...
[ 1.201498] sr_init: platform driver register failed for SR
Loading, please wait...
systemd-fsck[119]: rootfs: clean, 18363/43968 files, 82424/175872 blocks
systemd-fsck[337]: dosfsck 3.0.13, 30 Jun 2012, FAT32, LFN
systemd-fsck[337]: /dev/mmcblk0p1: 11 files, 238/6123 clusters
[ 6.526012] libphy: PHY 4a101000.mdio:01 not found
[ 6.531078] net eth0: phy 4a101000.mdio:01 not found on slave 1
Debian GNU/Linux 7 botic ttyO0
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.168
botic login: root
...
root@botic:~# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
rootfs 661 305 308 50% /
udev 10 0 10 0% /dev
tmpfs 50 1 49 2% /run
/dev/mmcblk0p2 661 305 308 50% /
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:~# cd /opt/scripts/tools/eMMC <=== ユーティリティーツールがある場所へ移動
root@botic:/opt/scripts/tools/eMMC# ls -la
total 104
drwxr-xr-x 2 root root 4096 Feb 21 2015 .
drwxr-xr-x 6 root root 4096 Feb 21 2015 ..
-rwxr-xr-x 1 root root 11236 Feb 21 2015 bbb-eMMC-flasher-eewiki-12mb.sh
-rwxr-xr-x 1 root root 12854 Feb 21 2015 bbb-eMMC-flasher-eewiki-ext4.sh
-rwxr-xr-x 1 root root 13784 Feb 21 2015 beaglebone-black-make-microSD-flasher-from-eMMC.sh
-rwxr-xr-x 1 root root 6089 Feb 21 2015 generic-eMMC-flasher-12mb.sh <=== コピーツール
-rwxr-xr-x 1 root root 9556 Feb 21 2015 init-eMMC-flasher-v2.sh
-rwxr-xr-x 1 root root 14518 Feb 21 2015 init-eMMC-flasher-v3-bbg.sh
-rwxr-xr-x 1 root root 14501 Feb 21 2015 init-eMMC-flasher-v3.sh
root@botic:/opt/scripts/tools/eMMC# ./generic-eMMC-flasher-12mb.sh <=== コピーツールを実行
-----------------------------
debug copying: [/dev/mmcblk0] -> [/dev/mmcblk1]
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
mmcblk1boot0 179:16 0 2M 1 disk
mmcblk1boot1 179:24 0 2M 1 disk
mmcblk0 179:0 0 3.7G 0 disk
|-mmcblk0p1 179:1 0 12M 0 part /boot/uboot
`-mmcblk0p2 179:2 0 687M 0 part /
mmcblk1 179:8 0 3.6G 0 disk
|-mmcblk1p1 179:9 0 12M 0 part
`-mmcblk1p2 179:10 0 3.6G 0 part
-----------------------------
update-initramfs: Generating /boot/initrd.img-3.18.7-botic4
Erasing: /dev/mmcblk1
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 1.76535 s, 11.9 MB/s
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.574009 s, 36.5 MB/s
Formatting: /dev/mmcblk1
Checking that no-one is using this disk right now ...
OK
...
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
mount: /dev/mmcblk0p1 already mounted or /boot/uboot busy <=== エラー発生
mount: according to mtab, /dev/mmcblk0p1 is already mounted on /boot/uboot
root@botic:/opt/scripts/tools/eMMC# umount /dev/mmcblk0p1 <=== アンマウント処理
root@botic:/opt/scripts/tools/eMMC#
root@botic:/opt/scripts/tools/eMMC# ./generic-eMMC-flasher-12mb.sh <=== 再挑戦
...
##enable BBB: eMMC Flasher:
##make sure, these tools are installed: dosfstools rsync
#cmdline=init=/opt/scripts/tools/eMMC/init-eMMC-flasher-v3.sh
uuid=cdf46879-1719-4b6a-b5fb-69f231ec07e8
Generating: /etc/fstab
# /etc/fstab: static file system information.
#
UUID=cdf46879-1719-4b6a-b5fb-69f231ec07e8 / ext4 noatime,errors=remount-ro 0 1
debugfs /sys/kernel/debug debugfs defaults 0 0
Syncing: /dev/mmcblk1
100000+0 records in
100000+0 records out
51200000 bytes (51 MB) copied, 1.39651 s, 36.7 MB/s
This script has now completed its task
-----------------------------
Shutting Down
umount: /tmp: not mounted
umount: /tmp: not mounted
root@botic:/opt/scripts/tools/eMMC# <=== 今度は無事終了
上記の実行例ではeMMCへのコピースクリプト"/opt/scripts/tools/eMMC/generic-eMMC-flasher-12mb.sh" をそのまま実行すると、途中で /dev/mmcblk0p1 が既にマウントされているとして怒られてしまうので、最初に /dev/mmcblk0p1 をアンマウントしてから、generic-eMMC-flasher-12mb.sh を実行する必要があるようだ.
エラーが発生していなければ次回の起動からMicro SDカードを抜いた状態で電源をONするだけで eMMCにコピーされた Botic が起動されるだろう.
eMMC上の Botic 4 を Botic 7 にアップデートしたら起動しなくなってしまった.
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
Card did not respond to voltage select!
Card did not respond to voltage select!
gpio: pin 56 (gpio 56) value is 0
gpio: pin 55 (gpio 55) value is 0
gpio: pin 54 (gpio 54) value is 0
switch to partitions #0, OK
mmc1(part 0) is current device
gpio: pin 54 (gpio 54) value is 1
Checking for: /uEnv.txt ...
reading uEnv.txt
1040 bytes read in 4 ms (253.9 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 ...
Card did not respond to voltage select!
** Bad device mmc 0 **
Card did not respond to voltage select!
** Bad device mmc 0 **
Card did not respond to voltage select!
** Bad device mmc 0 **
Card did not respond to voltage select!
** Bad device mmc 0 **
Bad Linux ARM zImage magic!
Checking if client_ip is set ...
Checking for: /boot.scr ...
Checking for: /boot/boot.scr ...
Checking for: /boot/uEnv.txt ...
gpio: pin 55 (gpio 55) value is 1
418 bytes read in 14 ms (28.3 KiB/s)
Loaded environment from /boot/uEnv.txt
Checking if uname_r is set in /boot/uEnv.txt...
gpio: pin 56 (gpio 56) value is 1
Running uname_boot ...
loading /boot/vmlinuz-4.8.13-botic7-rc3 ...
4122480 bytes read in 244 ms (16.1 MiB/s)
loading /boot/dtbs/4.8.13-botic7-rc3/am335x-boneblack.dtb ...
108137 bytes read in 69 ms (1.5 MiB/s)
loading /boot/initrd.img-4.8.13-botic7-rc3 ...
2232872 bytes read in 146 ms (14.6 MiB/s)
debug: [console=tty0 console=ttyO0,115200n8 snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM root=/dev/mmcblk0p2 rootfstype=ext4 rootwait fixrtc quiet init=/lib/systemd/systemd] ...
debug: [bootz 0x82000000 0x88080000:221228 0x88000000] ...
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.002079] clocksource_probe: no matching clocksources found
[ 0.561445] wkup_m3_ipc 44e11324.wkup_m3_ipc: could not get rproc handle
[ 0.798198] omap_voltage_late_init: Voltage driver support not added
Loading, please wait...
Gave up waiting for root device. Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Check root= (did the system wait for the right device?)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mmcblk0p2 does not exist. Dropping to a shell!
(initramfs)
どうやらBotic 7 にアップデートすると、eMMC上のルートパーティションをデバイス名"/dev/mmcblk0p2 " で参照しようとして失敗しているようだ.Botic 4 の場合は eMMC上にシステムをコピーし、eMMCから起動した場合でも、eMMCが "/dev/mmcblk0" として認識されているが、Botic 7 にアップデートしてしまうと、eMMCのデバイス名が "/dev/mmcblk1" として認識されてしまうことが原因のようだ.
このような事が起きる根本的な原因はまだ不明だが、とりあえずこの問題を回避する方法が見つかったので紹介しておく.
【対処方法】先ず、手元にあるMicro SD カードからBoticシステムを起動させる.このときMicro SD カードが、"/dev/mmcblk0" に割り当てられていることを確認しておく.また、eMMCが"/dev/mmcblk1"として認識されていることも確認しておく.
/tmp配下に"boot"などの適当な名前でディレクトリを作成し、eMMC上の Botic 7 のブートパーティション "/dev/mmcblk1p1" を一旦このディレクトリにマウントする.マウント後に "uEnv.txt" ファイルを編集し、その中のデバイス名(番号)に該当する部分を "0" → "1" に修正する.システムをシャットダウンし、Micro SD カードを抜き、再び起動させると今度は無事 Botic 7 が立ちあがるだろう.
botic login: root
Password:
Last login: Sun Oct 28 20:10:45 JST 2035 on ttyO0
Linux botic 3.18.7-botic4 #1 PREEMPT Wed Feb 18 23:34:58 CET 2015 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@botic:~# uname -a
Linux botic 3.18.7-botic4 #1 PREEMPT Wed Feb 18 23:34:58 CET 2015 armv7l GNU/Linux
root@botic:~# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
rootfs 661 309 304 51% /
udev 10 0 10 0% /dev
tmpfs 50 1 49 2% /run
/dev/mmcblk0p2 661 309 304 51% /
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
root@botic:~# ls -la /dev/mmcblk*
brw-rw---- 1 root disk 179, 0 Jan 1 2000 /dev/mmcblk0
brw-rw---- 1 root disk 179, 1 Jan 1 2000 /dev/mmcblk0p1
brw-rw---- 1 root disk 179, 2 Jan 1 2000 /dev/mmcblk0p2
brw-rw---- 1 root disk 179, 8 Jan 1 2000 /dev/mmcblk1
brw-rw---- 1 root disk 179, 16 Jan 1 2000 /dev/mmcblk1boot0
brw-rw---- 1 root disk 179, 24 Jan 1 2000 /dev/mmcblk1boot1
brw-rw---- 1 root disk 179, 9 Jan 1 2000 /dev/mmcblk1p1
brw-rw---- 1 root disk 179, 10 Jan 1 2000 /dev/mmcblk1p2
root@botic:~#
root@botic:~# mkdir /tmp/boot
root@botic:~# mount -t vfat /dev/mmcblk1p1 /tmp/boot
root@botic:~# ls -la /tmp/boot
total 498
drwxr-xr-x 4 root root 16384 Jan 1 1970 .
drwxrwxrwt 9 root root 4096 Nov 3 17:03 ..
drwxr-xr-x 3 root root 2048 Dec 25 2016 .TemporaryItems
drwxr-xr-x 2 root root 2048 Dec 25 2016 .Trashes
-rwxr-xr-x 1 root root 4096 Dec 25 2016 ._.TemporaryItems
-rwxr-xr-x 1 root root 4096 Dec 25 2016 ._.Trashes
-rwxr-xr-x 1 root root 4096 Dec 25 2016 ._uEnv.txt
-rwxr-xr-x 1 root root 73516 Dec 25 2016 MLO
-rwxr-xr-x 1 root root 667 Feb 21 2015 nfs-uEnv.txt
-rwxr-xr-x 1 root root 393496 Dec 25 2016 u-boot.img
-rwxr-xr-x 1 root root 1207 Dec 25 2016 uEnv.txt
root@botic:~#
root@botic:/tmp/boot# cat uEnv.txt
##These are needed to be compliant with Angstrom's 2013.06.20 u-boot.
loadaddr=0x82000000
fdtaddr=0x88000000
rdaddr=0x88080000
initrd_high=0xffffffff
fdt_high=0xffffffff
##These are needed to be compliant with Debian 2014-05-14 u-boot.
loadximage=load mmc 0:2 ${loadaddr} /boot/vmlinuz-${uname_r}
loadxfdt=load mmc 0:2 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc 0:2 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc 0:2 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize};
check_dtb=if test -n ${dtb}; then setenv fdtfile ${dtb};fi;
loadall=run loaduEnvtxt; run check_dtb; run loadximage; run loadxrd; run loadxfdt;
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=/dev/mmcblk0p2 rootfstype=${mmcrootfstype} ${cmdline}
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr};
#Docs for Botic: http://bbb.ieero.com/
#optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MD-- snd_soc_botic.dsd_format_switch=1 snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000
root@botic:/tmp/boot#
修正後の "uEnv.txt" ファイルは次の様になるだろう.
##These are needed to be compliant with Debian 2014-05-14 u-boot.
loadximage=load mmc 1:2 ${loadaddr} /boot/vmlinuz-${uname_r}
loadxfdt=load mmc 1:2 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc 1:2 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc 1:2 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize};
check_dtb=if test -n ${dtb}; then setenv fdtfile ${dtb};fi;
loadall=run loaduEnvtxt; run check_dtb; run loadximage; run loadxrd; run loadxfdt;
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=/dev/mmcblk1p2 rootfstype=${mmcrootfstype} ${cmdline}
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr};
#Docs for Botic: http://bbb.ieero.com/
#optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MD-- snd_soc_botic.dsd_format_switch=1 snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000
再起動後に Botic 7 が eMMC から起動されていることを確認.
Debian GNU/Linux 7 botic 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
botic login:
The IP Address for eth0 is: 192.168.101.31
botic login: root
Password:
Last login: Sun Dec 25 12:54:14 JST 2016 from 192.168.101.158 on pts/0
Linux botic 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@botic:~# uname -a
Linux botic 4.8.13-botic7-rc3 #1 PREEMPT Sat Dec 10 01:35:51 CET 2016 armv7l GNU/Linux
root@botic:~# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
udev 10 0 10 0% /dev
tmpfs 50 1 50 2% /run
/dev/mmcblk1p2 3554 382 2973 12% /
tmpfs 249 0 249 0% /dev/shm
tmpfs 249 0 249 0% /sys/fs/cgroup
tmpfs 100 0 100 0% /run/user
tmpfs 5 0 5 0% /run/lock
root@botic:~#
Botic 7 を eMMCからブートするとブート用のFATパーティションが見えなくなる
Botic 7 を eMMCブートに変更すると、これまで見えていた(マウントされていた)ブート用のFATパーティションがマウントされずに見えなくなる.動作上は特に問題は無いが、Boticカーネルオプションを変更するためには、ブートパーティションデバイス "/dev/mmcblk1p1" を 一次的に"/tmp/boot" や "/boot/uboot" などにマウントしてから編集を行う必要がある.
これ以外にも、ブートパーティションデバイス "/dev/mmcblk1p1" は FATパーティションなので、MacやWindowsでは、BeagleBoneをUSBクライアントコネクタ側(BeagleBone Black: Mini USB Type-B, BeagleBone Green : Micro USB )に接続するだけで、"/dev/mmcblk1p1"がマスストレージデバイスとして認識(外付けハードディスクなどと同じ扱い)されるので、MacやPC上から直接編集することが可能だ.
root@bbbb7:~# df -m
Filesystem 1M-blocks Used Available Use% Mounted on
udev 10 0 10 0% /dev
tmpfs 50 2 49 4% /run
/dev/mmcblk1p2 3609 458 2949 14% /
tmpfs 249 1 249 1% /dev/shm
tmpfs 249 0 249 0% /sys/fs/cgroup
tmpfs 5 0 5 0% /run/lock
tmpfs 100 0 100 0% /run/user
root@bbbb7:~# ls -la /
total 104
drwxr-xr-x 24 root root 4096 Dec 25 18:26 .
drwxr-xr-x 24 root root 4096 Dec 25 18:26 ..
-rw-r--r-- 1 root root 5339 Feb 20 2015 README-botic4
-rw-r--r-- 1 root root 1654 Feb 20 2015 README-botic4.linux
drwxr-xr-x 2 root root 4096 Dec 13 07:07 bin
drwxr-xr-x 4 root root 4096 Dec 25 18:28 boot
drwxr-xr-x 2 root root 4096 Feb 22 2015 data
drwxr-xr-x 12 root root 2880 Feb 16 2015 dev
drwxr-xr-x 71 root root 4096 Feb 16 2015 etc
drwxr-xr-x 4 root root 4096 Dec 10 16:50 home
drwxr-xr-x 12 root root 4096 Dec 13 07:04 lib
drwx------ 2 root root 16384 Dec 25 18:26 lost+found
drwxr-xr-x 2 root root 4096 Feb 16 2015 media
drwxr-xr-x 2 root root 4096 Jan 5 2015 mnt
drwxr-xr-x 5 root root 4096 Dec 13 06:07 opt
dr-xr-xr-x 83 root root 0 Jan 1 1970 proc
drwx------ 4 root root 4096 Dec 12 20:47 root
drwxr-xr-x 15 root root 560 Jan 1 2000 run
drwxr-xr-x 2 root root 4096 Dec 13 07:07 sbin
drwxr-xr-x 2 root root 4096 Jun 10 2012 selinux
drwxr-xr-x 4 root root 4096 Feb 20 2015 source
drwxr-xr-x 2 root root 4096 Feb 16 2015 srv
dr-xr-xr-x 12 root root 0 Dec 25 23:16 sys
drwxrwxrwt 7 root root 4096 Dec 25 23:17 tmp
drwxr-xr-x 10 root root 4096 Feb 16 2015 usr
drwxr-xr-x 12 root root 4096 Dec 13 07:25 var
root@bbbb7:~# ls -la /boot/uboot
total 8
drwxr-xr-x 2 root root 4096 Feb 16 2015 .
drwxr-xr-x 4 root root 4096 Dec 25 18:28 ..
root@bbbb7:~# mount -t vfat /dev/mmcblk1p1 /boot/uboot
root@bbbb7:~# ls -la /boot/uboot
total 502
drwxr-xr-x 5 root root 16384 Jan 1 1970 .
drwxr-xr-x 4 root root 4096 Dec 25 18:28 ..
drwxr-xr-x 3 root root 2048 Dec 25 22:57 .TemporaryItems
drwxr-xr-x 2 root root 2048 Dec 10 12:46 .Trashes
-rwxr-xr-x 1 root root 4096 Dec 25 22:57 ._.TemporaryItems
-rwxr-xr-x 1 root root 4096 Dec 10 12:46 ._.Trashes
-rwxr-xr-x 1 root root 4096 Dec 25 22:57 ._.apdisk
-rwxr-xr-x 1 root root 296 Dec 25 22:57 .apdisk
drwxr-xr-x 2 root root 2048 Dec 19 19:26 .fseventsd
-rwxr-xr-x 1 root root 73516 Dec 25 18:26 MLO
-rwxr-xr-x 1 root root 667 Feb 21 2015 nfs-uEnv.txt
-rwxr-xr-x 1 root root 393496 Dec 25 18:26 u-boot.img
-rwxr-xr-x 1 root root 1456 Dec 25 18:36 uEnv.txt
root@bbbb7:~# cat /boot/uboot/uEnv.txt
##These are needed to be compliant with Angstrom's 2013.06.20 u-boot.
loadaddr=0x82000000
fdtaddr=0x88000000
rdaddr=0x88080000
initrd_high=0xffffffff
fdt_high=0xffffffff
##These are needed to be compliant with Debian 2014-05-14 u-boot.
loadximage=load mmc 1:2 ${loadaddr} /boot/vmlinuz-${uname_r}
loadxfdt=load mmc 1:2 ${fdtaddr} /boot/dtbs/${uname_r}/${fdtfile}
loadxrd=load mmc 1:2 ${rdaddr} /boot/initrd.img-${uname_r}; setenv rdsize ${filesize}
loaduEnvtxt=load mmc 1:2 ${loadaddr} /boot/uEnv.txt ; env import -t ${loadaddr} ${filesize};
check_dtb=if test -n ${dtb}; then setenv fdtfile ${dtb};fi;
loadall=run loaduEnvtxt; run check_dtb; run loadximage; run loadxrd; run loadxfdt;
mmcargs=setenv bootargs console=tty0 console=${console} ${optargs} ${cape_disable} ${cape_enable} root=/dev/mmcblk1p2 rootfstype=${mmcrootfstype} ${cmdline}
uenvcmd=run loadall; run mmcargs; bootz ${loadaddr} ${rdaddr}:${rdsize} ${fdtaddr};
#Docs for Botic: http://bbb.ieero.com/
#optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MMMM
#########
#optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MD-- snd_soc_botic.dsd_format_switch=1 snd_soc_davinci_mcasp.mute_pin=8 snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000
#########
optargs=snd_soc_botic.ext_masterclk=3 snd_soc_botic.serconfig=MD-- snd_soc_botic.dsd_format_switch=1 snd_soc_davinci_mcasp.mute_pin=8 snd_soc_botic.clk_44k1=22579200 snd_soc_botic.clk_48k=24576000
root@bbbb7:~#
クライアント側のUSBポートをMacやWindowsに接続する
MacやWindowsではBeagleBoneのFATパーティションは
USBマスストレージクラスデバイスとして認識される