MPD on Cubox(15)


rabeehさんがメンテナンスしているCuboxソース(Linux本家のソースにCubox対応のパッチをかけたもの)がカーネル3.6.9にレベルアップされていますね。これだと対応するrtパッチがあるので、簡単にrt化できます。

rabeehさんのCuboxソースをget
git clone git://github.com/rabeeh/linux.git
3.6.9に対応するrtパッチをget
wget http://www.kernel.org/pub/linux/kernel/projects/rt/3.6/older/patch-3.6.9-rt21.patch.bz2
cd linux
export ARCH=arm
export CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-
bzcat ../patch-3.6.9-rt21.patch.bz2 | patch -p1

3.4.19ではこのrtパッチで次のようなエラーが出たのですが

drivers/misc/Makefile.rej

3.6.9ではエラー無しで正常に終わります。
念のため drivers/misc/Makefile を確認したら、前回問題になった

obj-$(CONFIG_DOVE_MRVL_BMM)    += bmm_drv.o

という行がありました。カーネル本体に取り込まれたということらしいです。
となれば話は簡単、あとは省略しますが、カーネルをビルド。これで問題なく動く筈だったのですが、敵はそんなに甘くはありません(^^;;;。

再生は問題なく開始。「3.6の音は3.4とはまた違って、これもなかなかいいなぁ」と思いながら聴いていたのですが、突然再生がストップ。「あれどうなっているのだろう」、あわててパソコン部屋にもどり、Puttyで確認。mpdがハングしているようです。OSの動きには特に変なところはなさそう。ここから一週間の長い原因究明の悪戦苦闘がスタートしました。

「mpdをちゃんと3.6.9環境でコンパイルしないといけないのかな」と考え、試してみる。結果は同じ。mpdのバージョンによる違いがあると思い、0.17.2stableも試すが、同じ結果。

「これは本格的(?)トラブルらしい」と気が付き、まず何故mpdハングしたのかログを調べる。/run/shm/mpd/mpd.logには何もなし。/var/log/kerm.logを見る。再生がストップした時間に

Jan 19 18:04:56 localhost kernel: [ 1178.515850] ERROR: 256 KiB atomic DMA coherent pool is too small!
Jan 19 18:04:56 localhost kernel: [ 1178.515850] Please increase it with coherent_pool= kernel parameter

というメッセージが表示されていました。
DMApool を使い切って、mpdがハングしたということらしい。DMApoolというのは、DMA転送を行うためのバッファで、DMA転送に対応している高速のハード(ディスクなと)で利用されます。「へえ、DDCでもこれを使っているのか」と感心。
このメッセージは何だとググる。ここ(arm用linux開発者の掲示板)に昨年11月頃公開された Marek Szyprowski さんのパッチがありました。内容は「dmapool.c はGFP_ATOMIC flagの状態をチェックしないで、無条件に DMApool を使いにいっている。このため arm環境では DMApool を使い切ってしまうというトラブルを起こす。これを解消するためパッチだよ」というもの。
もっともらしいので、このパッチをかけてみる。結果は同じ。どうも、このパッチでは対応されていない問題のようです。
同じスレッドに Andrew Lunn さんの昨年の9月にDMApoolのサイズを拡大してこの問題を回避するパッチがあったのですが、このパッチは3.6.9には適用済です。これでは駄目ですね。
どうもこのトラブルは3.6から発生するようになったらしい。念のため3.5と3.7を試してみる。「3.5はOK。3.7はNG」という結果。「3.5は3.4の3.7は3.6の開発版」だから、この問題はlinuxが3.6にレベルアップされ、DMA転送のやり方が変わり、発生するようになったようです。「インテルマシンではどうなのだろう」と VoyageMPD 0.90 のカーネルを3.6.9にしてみました。問題は発生せず。「なるほど、intelマシンとarmマシンではDMA転送の方式が異なり、発生しないのね」と分かる。
「ちょっとお手上げ」という状態となるが、「他の音源ではどうなるのか」とCuboxをパソコン部屋に持ってきて試してみる。驚きましたね。HD-7A 192、RUDD14ともに問題なし。aitlaboのddcはエレアトさんのUDA3なので、UDA2をお持ちのPhoeniciaさんに「そっちはどう」とメールする。「ちゃんと動くよ」というご返事。「ウーム、UDA3だけ違うのか」とビックリ。メールでお互いの状態(DSDネイティブ再生中)を確認する。

ところでaitlabo(UDA3)ですが
root@cubox:~# cat /proc/asound/card1/stream0
Cypress EZ_USB(UDA3) at usb-orion-ehci.0-1, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 1024
    Momentary freq = 176400 Hz (0x16.0ccc)
    Feedback Format = 8.16
    Packet Size = 0
    Momentary freq = 176400 Hz (0x16.0ccd)
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 2
    Endpoint: 2 OUT (ASYNC)
    Rates: 44100, 48000, 88200, 96000, 176400, 192000, 352800, 384000
    Data packet interval: 125 us

と出ます。
UDA2は
root@cubox:~# cat /proc/asound/card1/stream0
Cypress EZ_USB(UDA2) at usb-orion-ehci.0-1, high speed : USB Audio

Playback:
  Status: Running
    Interface = 1
    Altset = 1
    Packet Size = 1024
    Momentary freq = 176400 Hz (0x16.0ccc)
    Feedback Format = 8.16
    Packet Size = 0
    Momentary freq = 176400 Hz (0x16.0ccd)
  Interface 1
    Altset 1
    Format: S24_3LE
    Channels: 2
    Endpoint: 2 OUT (ASYNC)
    Rates: 44100, 48000, 96000, 192000, 88200, 176400
    Data packet interval: 125 us
  Interface 1
    Altset 2
    Format: U8
    Channels: 8
    Endpoint: 2 OUT (ASYNC)
    Rates: 44100, 48000, 96000, 192000, 88200, 176400
    Data packet interval: 125 us
です。

「Interface 1 Altset 2」を除き、ほとんどいっしょですが、UDA3は 352800, 384000 に対応しているのが大きな違いです。Phoeniciaさんに「usb2.0の転送能力では176400以上の再生には4チャネル以上必要」と教えて頂いきました。このため、UDA3はDMA転送という方法をとっているようです。
であれば、aplayで再生してみても同じ問題が発生する筈です。試してみました。
またまたビックリ。問題なく連続演奏できます。「どうなっているのだ。もう、途方に暮れるなぁ」という感想。
さらに試して、MPDでもハングする前に再生を一旦ストップさせ、再生を再開すると、いくらでも再生を継続させらることに気が付きました。「MPDはギャップレス再生のため特殊な制御をしているようだから、そのためかなぁ」と思います。

さて、どうやって解決するか。ググった情報で「256 KiB atomic DMA coherent pool is too small!」というメッセージは、3.6でこの問題が表面化して、Szyprowski さんが dma-mapping.c にパッチをかけ表示されるようになったものです。このプログラムはarmのDMA転送の要となるもので、ここでなんとか出来ないかといろいろジタバタやってみました。しかし、全体の構成が分かっていないので、駄目ですね。カーネルがハングするなど事態は悪化するばかり。

「もう諦めるしかないかな」と思ったが、メッセージをよく見たら「256 KiB」となっている。「あれ変だなぁ、Lunn さんのパッチで1MBになっている筈なのに」と気が付いた。「そうか、あのパッチは mach-orion5x 用のものだから、cuboxの場合は適用されておらず、256 KiBのままなのね」と分かる。
「カーネルがdmapoolが足りないといっている(Please increase it with coherent_pool= kernel parameter!)なら、増やしてやろうじゃないか」という安易な解決方法を思い付きました。arch/arm/mach-dove/common.cがcubox用と分かったので、Lunn さんのパッチを多少アレンジして

--- a/arch/arm/mach-dove/common.c
+++ b/arch/arm/mach-dove/common.c
@@ -204,6 +204,13 @@ void __init orion5x_wdt_init(void)
 void __init dove_init_early(void)
 {
 	orion_time_set_base(TIMER_VIRT_BASE);
+
+	/*
+	 * Some Orion5x devices allocate their coherent buffers from atomic
+	 * context. Increase size of atomic coherent pool to make sure such
+	 * the allocations won't fail.
+	 */
+	init_dma_coherent_pool_size(SZ_32M);
 }

 static unsigned int dove_find_tclk(void)

というパッチをでっち上げる。結果は『一応』大成功でした。確認してませんが、これでflacファイルで4時間位は連続再生に耐えるはずです。まあ、ワグナーのオペラを幕間休憩なしに全曲聴き通したいという特殊(?)な方々を除いて実用上は問題ないと思います。
『一応』と書いた理由はlinux-arm環境のUDA3の再生に関するちゃんとした解決方法ではないからです。
Szyprowski さんの最初のパッチはディスクなど短時間でアクセスが完了するデバイス向けのもので、ARMアーキテチュアのLinux Kernel 3.6以降 + MPD + UDA3 という特殊な環境では、効かないということだと思います。彼にメールして「かくかくしかじか。何とかして頂戴」とお願いする手はありますが、linuxコアの部分のデバッグ、、特殊な組み合わせ、しかも英語となると、僕はパスです。誰かなんとかして頂けないですかね。

(PC_Audio)   2013/01/25

コメントする

MPD on Android(2)


前々回ご紹介した MPD on Android の Phoeniciaさんと僕が使っているシステムのイメージを公開します。
「MPD on Android」システムはPhoeniciaさんがハードを見つけ出し、カーネルのビルドに挑戦し、rootfs部分をcubox用のubuntu-core入れ換えることが出来ることを発見され、カーネルをベストにチューニングされたものです。僕はrootfsのubuntu-coreをandroid向けにごく僅かの修正を行っただけです。Phoeniciaさんに厚くお礼申し上げます。

イメージは以下のリンクからダウンロードできます。

boot部分はPhoeniciaさんが作成されたuImageとevb.bin、rootfs部分はcubox用のイメージのubuntu-coreパーティションの内容に多少手を加えたもので構成されています。
boot部分の内容についてはPhoeniciaさんの作成されたuImage、configとドキュメントをrootfsの「/build_files」に残してありますので、参照して下さい。ドキュメントは丁寧に書かれていますので、内容を知るには必見です。

nano /build_files/ドキュメント名

で読めます。また、Phoeniciaさんのサイトに詳しい情報がありますので、そちらもご参照下さい。

rootfs部分の内容は僕のcubox関連の記事にある通りですので、そちらを参照して下さい。変更点は

  • ホスト名とパスワードをandroidに変更
  • Phoeniciaさんの作成されたuImageを選択して起動するスクリプトを追加
  • snd-usb-asyncaudioの組み込み(uImage-26-No-opで組み込むことが出来ます)
  • rtパッチ関連の設定とCuboxLEDの表示のための操作を削除(コメントアウト)

です。

Phoeniciaさんの作成されたuImageの選択方法は以下の通りです。

selboot uImage名

uImage名は「uImage-2」の部分を省略して指定して下さい。例「2-Deadline」。
カーネルの設定を変えることで、どういう具合に音が変わるかの確認に便利かと思いますので、よろしければお試し下さい。
ディフォルトのuImageはuImage-24-Deadlineにしてあります。
selbootスクリプトは/usr/local/sbinに置いてあります。

snd-usb-asyncaudioについてはここに情報があります。
オランダの Michael Nazzareno Trimarchi さんが公開されているLinux対応のUSBオーディオ用ドライバで、以下のハードが linuxで使えるようになるようです。

  • North Star Design “Essensio”
  • CHORD QBD76HDSD
  • CHORD QuteHD
  • M2Tech hiFace

ディフォルトのsnd-usb-asyncaudioは「selboot 6-No-op」とすると有効になります。
snd-usb-asyncaudioは厳密にカーネルのチェックを行っているので、22及び24系列のuImageでは組み込みされません。組み込みたい場合は /root に置いてある snd-usb-asyncaudio-4D又は-4N で /lib/modules/3.0.52-t3_SmartTV_UAC2.0/kernel/sound/snd-usb-asyncaudio.ko を入れ換えて下さい。元に戻すための snd-usb-asyncaudio-6N.ko も置いてあります。
僕とPhoeniciaさんは上記のハードは持っていませんので、動作を確認していません。お持ちの方は動作状況を掲示板に書き込んで頂ければ幸いです。
snd-usb-asyncaudioについてはシンさんのサイトで情報を入手しました。まいどながらですが、シンさんにお礼申し上げます。alix版はシンさんのサイトで公開されています。

このイメージはSmartTVBox専用です。SmartTVBox上でのmpd再生に不要なモジュールは削除されています。類似の他の機種で動かないと思いますので、ご注意下さい。参考までにSmartTVBoxの写真です。



SmartTVBoxはかなり癖のあるハードです。
一部のUSB音源を認識しない件については前回の記事をご覧ください。
また、それ以外にデバッグ中に音楽DB更新にとんでもなく時間がかかるということがありました。原因は不明ですがタイミングでネットワーク関連の資源の競合が発生するようです。「挙動が変な場合は一旦シャットダウンして、接続機器の電源も入れ直す」ことで回避できる場合が多いので、お試し下さい。

公開されたバイナリイメージは無保証です。作者(僕とPhoeniciaさんのことです)は内容に関して一切の責任はもちませんので、ご自身のリスクでお試し下さい。


2013.01.19 追記
リンク名を誤っていましたので修正しました。

(PC_Audio)   2013/01/18

コメントする

MPD on Cubox(14)


12月末に公開したcuboxのイメージはcubox固有のパッチをかけたシステムをrt化したものですが、その方法を紹介します。

公開した記事に書きましたが、arm系列のハードに関しては通常linuxハードに対応する固有のパッチが公開されています。ところがcuboxの場合、カーネルに固有パッチがかかった状態で公開されています。普通にカーネルをビルドする場合はこれで十分なのですが、rt化をさせるためにはこれにrt化のためのパッチをかける必要があります。この場合、問題になるのは公開されているソースのパッチのバージョンとrtパッチの対象となるカーネルのバージョンが一致していることです。現時点の最新版cubox固有パッチのカーネルのバージョンは3.5.xなので対応するrtパッチが存在しません。
固有パッチのリビジョンを逆戻しすればいいのですが、どこに戻すか調べるが結構大変です。

という次第で、cubox固有のパッチがないか捜してみました。ありましたね。
ここ(http://www.xilka.com/sheeva/)にあります。「なんだ、SheevaPlugの固有パッチを公開しているサイトか」とビックリ。同じarm系列のマシンだから、間借りしているということですかね。3.4.x用のcubox固有パッチはここ(CuBox-3.4.patch)にあります。ちなみに3.5用のものも置いてありまして、ここです。

あとは、ご本家からカーネルソースとrtパッチを頂戴してきてビルドすればいいです。
やり方ですが、まずソースとパッチをダウンロードします。

3.4.19カーネルソールをget
wget http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.19.tar.xz
3.4.19に対応するrtパッチをget
wget http://www.kernel.org/pub/linux/kernel/projects/rt/3.4/older/patch-3.4.19-rt30.patch.bz2
cubox固有パッチをget
wget http://www.xilka.com/sheeva/3/3.4/3.4.7/source/CuBox-3.4.patch.xz

次に展開します。

tar -Jxvf linux-3.4.19.tar.xz
xz -dv CuBox-3.4.patch.xz

パッチをかけます。

cd linux-3.4.19
bzcat ../patch-3.4.19-rt30.patch.bz2 | patch -p1
patch -p1 -l < ../CuBox-3.4.patch

これでエラーが出なければ手間がいらないのですが、残念ながら

drivers/misc/Makefile.rej

というエラーが出ます。
内容を調べると

--- drivers/misc/Makefile       2012-07-06 03:21:43.762451613 -0600
+++ drivers/misc/Makefile       2012-05-08 16:00:04.942106631 -0600
@@ -49,3 +49,4 @@
 obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
 obj-$(CONFIG_ALTERA_STAPL)     +=altera-stapl/
 obj-$(CONFIG_MAX8997_MUIC)     += max8997-muic.o
+obj-$(CONFIG_DOVE_MRVL_BMM)    += bmm_drv.o

となっていますので

obj-$(CONFIG_DOVE_MRVL_BMM)    += bmm_drv.o

という行がうまく挿入できなかったことが分かります。であれば修正は簡単で

emacs drivers/misc/Makefile
で以下の行を捜し
 obj-$(CONFIG_USB_SWITCH_FSA9480) += fsa9480.o
 obj-$(CONFIG_ALTERA_STAPL)     +=altera-stapl/
 obj-$(CONFIG_MAX8997_MUIC)     += max8997-muic.o
その後ろに
obj-$(CONFIG_DOVE_MRVL_BMM)    += bmm_drv.o

を挿入します。
エラーになった理由は先にかけたrtパッチのため行の位置がずれたためです。
これで準備完了しました。
あとはdebian wheezyの記事で紹介したのと同じ手順でカーネルビルドします。
説明は省略して、コマンドだけ並べておきます。

export ARCH=arm
export CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-
make mrproper
make cubox_defconfig
emacs .config
編集する部分
#
# Graphics support
#
#
# Frame buffer hardware drivers
#
CONFIG_FB_DOVE=n
CONFIG_DOVE_GPU=n
CONFIG_DOVE_GPU_MEM_SIZE=0
#
# DMA Clients
#
CONFIG_UIO_VMETA=n
CONFIG_UIO_DOVE_VMETA_MEM_SIZE=0

make menuconfig
編集する部分
General setup  ---> 
(_CuboxAudioRTuned) Local version - append to kernel release
(cubox) Default hostname
Preemption Model (Preemptible Kernel (Basic RT))  --->
<*> Sound card support  --->
<*>   Advanced Linux Sound Architecture  --->
[*]   USB sound devices  ---> 
<*>   USB Audio/MIDI driver
File systems  --->
<*> XFS filesystem support
DOS/FAT/NT Filesystems  ---> 
<*> NTFS file system support 
[*]     NFS client support for NFS version 4 
<*>   CIFS support (advanced network filesystem, SMBFS successor)

make KALLSYMS_EXTRA_PASS=1 uImage

これでuImageは完成しました。あとはモジュールを組み込む必要があります。やり方は以下の通り。

make modules
mkdir ../modules
INSTALL_MOD_PATH=../modules/ make modules_install
cd ../modules
tar czf ../modules.tar.gz *
sdカードを開発環境にセットして
mkdir /media/rootfs
sudo mount /dev/sdb2 /media/rootfs
sudo cp ../modules.tar.gz /medis/rootfs
sync
sudo umount  /medis/rootfs
sdカードをcuboxにセット、起動後
cd /
tar pxvzf modules.tar.gz


(PC_Audio)   2013/01/11

コメントする

MPD on Android


パソコン部屋のシステムをSheevaPlugからSmart TV Boxに入れ換えました。



写真は左がPhaseTech HD-7a192の上に置いたSmart TV Box、右が引退したSheevaPlugです。性能はSmartTVBoxが倍くらい上ですから、大きさを比較すると、この4年間の技術の進歩を分かって頂けるかと思います。

タイトルについてはちょっと不正確で Android OSでMPDを動かすという意味ではなく、Androidハードウェアを使ってMPDを動かすという意味です。

システムの内容についてはPhoeniciaさんサイトで紹介されていて、掲示板でもコメントツリーが膨らんでいます。同じことを書いてもしょうがないので、関連する情報を紹介します。

Android端末で動くOSがLinuxをベースにしているということは知っていたのですが、今回いろいろいじって、どういう仕組みになっているかよく分かりました。
詳しい情報は以下のリンク先をご覧ください。


androidはlinuxのカーネルだけ利用して、rootfsはJavaの機械語で構成するという仕組みになっているのですね。従って、ubuntu-coreでrootfsを入れ換えれば、そのまま動きます。要するにarmアーキテクチュアの組み込みマシンと同じ構造です。
掲示板でPhoeniciaさんに「rootfsをcubox用のubuntu-coreのものに入れ換えたけど、ちゃんと動くよ」言われた時はホントにビックリ。上記リンク先を読んで、「なるほどなぁ」と思いました。

この仕組みが分かるとrootfs側をいじるのは簡単です。cubox用のrootfsと簡単に共用できます。ほとんど何もしなくても MPD on Android の出来上がりとなります。

問題はboot側です。これはAndroidハードに特化された構成になっているようで、いろいろやってみましたが、専用パッチをかけたカーネルにUSB Audioを有効にする以上のことはほとんど何も出来ません。rt化に挑戦したのだけど、android用の固有パッチがカーネルの核の部分にかかっていて、rtパッチとバッティングするため、手作業での修正も出来ません。お手上げ状態です(~~;;;。
Linuxカーネルの中味なら「俺にまかせろ」という方を募集します。

肝心の音ですが、これは素晴らしいと思います。cuboxに十分太刀打ちできます。音のクリアさならこっちの方が上じゃないかなと思います。

ハードは日本国内で簡単に入手できます(リンク先を参照して下さい)。ただし、問題点が一つ。他のハードで認識できる音源でも、このハードでは認識できない可能性があります。usbの電源使用の問題ですが、詳しくはこちらを参照して下さい。まあ、セルフパワー型のハブを使えば回避できるようなので、対応はできます。
それ以外は公式に公開されているカーネルソースを使えば、安定して動作すると思います。
ちょっと癖のあるハードなので、誰にでもお勧めは出来ませんが、勇気(^^;;;のある方はどうぞ。

(PC_Audio)   2013/01/06

コメントする

ガーディナーとORRのベートヴェンの第5と第7(新録音)


レコ芸今月号の宇野功芳氏の新譜批評。
曰く『フルトヴェングラーやワルターにこのガーディナー盤を聴かせたら、さぞかし嘆くことだろう。でも前2者の演奏はベートーヴェンにもぜひともきいてもらいたかった。ガーディナーのCDは絶対に耳に入れたくない。
第5番の第1楽章は速すぎ、聴いていて呼吸ができない。そのテンポに必然性がなく、無意味だし、オーケストラの機械力を誇示するにしては雑な感じがしてしまう。
第2楽章もフォルテのひびきが汚れており、(楽器のせいか、力みのせいか)、細かい強弱が小ざかしい。』
曰く『第7番は滅法明るい音だ。第5番以上にそれを感じるが、その奥に何もない。第1楽章の序奏はトランペットが主役を張っている。主部は第5番と同じく煽り立てられるようで息がつげない。どうしてこんなにあわてるのか。(略)。あまりにも影のないベートーヴェンだ。』

以下この調子でコテンパンに続きます。守旧頑迷のセンセイがこれだけけなすのだから、きっと良い演奏に違いないだろうと考え(^^;;;、さっそくgetしました。

素晴らしい演奏ですね。宇野センセイがおっしゃるようにどちらも超快速。胸をすくようなテンポで、切れ味のよい演奏です。特に第7は凄い。これだけの速いテンポなのに雑に弾いていると感じはしません。この曲の持ち味の先に先にと進む推進力を堪能しました。テンポは速いのだけど、色彩感が豊か。カルロス・クライバーも真っ青という感じの演奏です。
第5もいいです。曲のタイトルに騙される無駄な重々しさがまったく無い演奏です。軽快な「運命」というのがセンセイの気に触ったのですかね。第2楽章はとてもニュアンス豊かな演奏です。どこが「小ざかしい」のだろうか。これも聴いていてクライバーの演奏を思い出しました。
オーケストラは古楽器としては編成の大きなものだと思いますが、この2曲に関しては効果をあげていると思います。 腕前も素晴らしいです。 ベートーヴェンに聴かせたら、「フルトヴェングラーやワルターの古色蒼然とした演奏と比較し、これぞ自分の作曲意図通りだ」と喜ぶのではないでしょうか。

MPD on android で聴きましたが、演奏会場の雰囲気がよく感じられる素晴らしい録音だと思います。

(music)   2013/01/03

コメントする

MPD on Cubox(13)


Cuboxを使った音楽プレーヤ(MPD)用イメージの改版したものを公開します。
前回公開したものとの相違点は以下の四点です。

Cubox本体固有ハードに対応するパッチの適用
光spdifやesataが使用可能となり、cubox専用ハードによる浮動小数点演算への対応されていますので、高速化されるはずです。
ubuntu-coreとdebian-wheezyのマルチブートシステム化
debian-wheezy は Voyage MPD 0.90 と似たようなヴァージョン構成となりますので、比較するには便利かと思います。
MPD関連のワークファイル(tag_cache mpd.log pid state sticker.sql)のメモリ常駐(/run/shm)化
シンさんのcubox記事に触発され、やってみました。マイクロsdカードの書き込み回数の制限を考慮すると有効だと思います。
再生状態のLED表示
Cubox本体表のLEDを使い、MPDで再生中の音楽ファイルの内容を表示させています。DSD再生中なら Heartbeat 、それ以外のファイルを再生中なら Flash、非再生中なら default-onを表示。ランプの点滅で再生状態が分かります。また、電源オフ時はLEDを消灯させました。

一番目の「Cubox本体固有ハードに対応するパッチの適用」はcubox独自のmmc処理を含みます。前回の版で起動不可のsdカードで起動OKを確認しています。従って、こちらの方が安定度は高いと思います。
三番目のメモリ常駐化についてはシンさんから貴重なアドバイスを頂戴しました。また、LEDの点滅で再生状態を表示するという提案はPhoeniciaさんから頂戴しました。シンさんとPhoeniciaさんにお礼申し上げます。

使用している Linuxバージョンは以下の通りです。

Ubuntu-Core
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.4.19-rt30_CuboxAudioRTuned armv7l)

Debian
root@(cubox):~# cat /etc/debian_version
wheezy/sid

root@(cubox):~# uname -a
Linux (cubox) 3.4.19-rt30_CuboxAudioRTuned #3 PREEMPT Wed Dec 5 21:48:23 PST 2012 armv7l GNU/Linux

という次第で、こちらに乗り換えることをお勧めします。

ダウンロード

ファイルサイズは debian-wheezy を入れたため前回の倍の520MB位に膨らんでいます。

「システムの作成、Cuboxの起動、ネットワーク接続」については前回公開したものと同じですので、前回の記事を参照して下さい。イメージを書き込むsd/sdhcカードは4GB以上のものをお使い下さい。

圧縮率を高くするため、圧縮方式を7zipに変えています。この圧縮方式はLinux環境ではディフォルトではサポートされていないので、

apt-get install p7zip-full

でインストールする必要があります(debian/ubuntuの場合)。展開の仕方は

7za e cubox-audio121222.img.7z

です。

システムの内容

MPDの選択については前回のシステムと同じです。

selmpd [18g|172s|jk]

でお使いになるmpdを切り替えることができます(コマンド名は前回の版から変えています)。
光spdifが使えるようになったため、/etc/mpd.conf の audio_output は

	device          "hw:1,0"

をディフォルトにしてあります。光spdifを使う場合は “hw:0,0” に変更し、MPDを再起動して下さい。 システムの構成は以下の通りです。

パーティション1 ext2 boot   kernel3.4.19 + rt30.patch + CuBox-3.4.patch
パーティション2 xfs  rootfs ubuntu-core 12.04.1 LTS
パーティション3 ext2 rootfs debian 7.0 wheezy

初期状態ではパーティション2のubuntu-coreで起動されます ubuntu-core と debian-wheezy の切り替えは

selboot [d|(u)]

で行えます。切り替え用のスクリプトは/usr/local/sbinに置いてあります。
なお、カーネルはcubox専用ハードのパッチを適用してありますが、ディスプレイ関連の機能はオーディオ的に不利になるだけなので、削除し、1GBメモリを全てOSで使えるようにしてあります。詳しくはこのページ(Debian ArmHardFloatPort on CuBox)を参照して下さい。
esataは有効にしてあります。従って、esata接続されるディスクにイメージの内容をコピーしesataから起動するシステムに簡単に変更できると思います。esata用のboot.scrはパーティション1に入っています。

LED表示は /usr/local/sbin/led で行っています。ブート時の起動は ubuntu-core は /etc/rc.local から、debian は /etc/init.d/cifsrtset.conf で行っています。
ubuntu-core と debian で起動方法を変えているのは、debianは起動シーケンスの挙動が意味不明だからです(^^;;;。どうもよく分かりませんが、wheezy は systemd へ移行中だからということですかね。
LED表示のさせ方は2秒毎にmpcの表示メッセージを拾い変化があったら対応するLED点滅をさせるというヤクザな方法をとっています。音楽再生中に無駄なスクリプト処理が入るのは許せないという潔癖な方は自力で修正して下さい。起動している行をコメントアウトすればいいと思います。

また実験用のkernel 3.6.8+rt20のuImageを残してあります。興味のある方はお試し下さい。やり方は /usr/local/sbin/selboot をご覧下さい。ただし、かなり阿漕なやり方でビルドを通しているので、不安定です。

カーネルのコンフィグレーションはcubox専用パッチを適用すると作成される cubox_defconfig(arch/arm/configs/) を使いました。
menuconfigでの変更点は

Local version名 CuboxAudioRTuned 
Default hostname((cubox)) 
Preemption Model (Preemptible Kernel (Basic RT)) 
usbオーディオドライバ、xfsサポート、ntfsサポート、cifsネットワークサポートの各モジュールの常駐化 

です。

このイメージは sdカードメーカを選ぶという問題はクリアしているようです。よく分からないのですが、結局、mmcドライバがオリジナルかどうかの違いが問題を引き起こしていたようです。問題があった場合は掲示板に書き込んで頂ければと思います。

その他

公開にあたり、Phoeniciaさんにいろいろお世話になりました。ありがとうございました。また掲示板でお願いし、何人かの方に動作確認をお願いしました。ご協力頂いた皆様方にお礼申し上げます。

何故、cubox専用パッチが必要なのかについて、ちょっと分かりにくいかと思いますので、以下、Phoeniciaさんとのやりとりでの僕のメールを引用します。

Linuxの個別ハードへの対応ですが、
- 個別の機能がカーネルソースに最初から組み込まれていて、menuconfigで組み込む
- カーネルビルドする前にカーネルソースにパッチを当ててmenuconfigで組み込む
- 動いているカーネルに、後から、そのハードに対応するソースをビルドし組み込む
という三つの方法があります

armアーキテクチャのハードの場合、二番目の方法をとることが一般的です。

理由はインテルアーキテクチャの場合は数が多いので、カーネルソースに最初から
組み込まれている場合が多いのですが、armは特殊なものが多いので、カーネル
ソースには入っていないので、それぞれのハードのベンダーが独自にカーネルの
修正分をパッチとして提供しているからです。

cuboxの場合、個別のハード機能としては以下のものがあります。
- HDMIディスプレイ機能
- ハードによる浮動小数点演算機能
- esata接続
- 光spdif

cuboxのカーネルソースですが、個別ハードへのパッチが最初からかかっている
ものが公開されています。
このソースの問題点は、現時点の最新版がLinuxカーネルの3.5系のため、対応する
rtパッチが存在せず、rt化が出来ないことです。
gitを使って公開されているので、古いバージョンに戻すことはできるのですが、
僕が試した範囲では、うまくrtパッチがかかりません。

このため、公開しているubuntu-coreシステムは3.4系の標準のカーネルソースを
使い、rtパッチをかけて対応しているわけです。
従って、ビルドしたシステムはcubox固有の機能を使うことは出来ません。
標準のカーネルソースに組み込まれているmmc、lan、usbなどの機能を組み合わせ
オーディオサーバとして動かしているわけです。

オーディオサーバとして考えると、HDMIディスプレイ機能は不要だと思いますが、
それ以外の三つの機能を諦めるのはちょっと残念です。

という次第でcubox固有ハードのパッチがどこかにないかなと捜したら
http://www.xilka.com/sheeva/
にありました。

昨日お送りしたuImageこのパッチとrtパッチを組み合わせ、rt化しながら、cubox
固有の機能を使えるようにしたものです。
従ってesataによるssd、hdからの起動も可能となりますが、従来通りsdカードから
起動することが出来ます。

というところです。

このあたり、カーネルビルドする変な(^^;;;人々には常識なのだろうけど、cubox関連の
情報としては、どこにも書いてないので、ちょっと分かりにくいかと思います。
近いうち(?)にサイトを方にも書き込もうと思っています。


なお、公開されたバイナリイメージは無保証です。作者は内容に関して一切の責任はもちませんので、ご自身のリスクでお試し下さい。

(PC_Audio)   2012/12/30

コメントする

MPD on Cubox(12)


前回の続きです。Debianシステムの起動後にセットアップする内容です。
作成したDebianシステムへの設定方法は基本的には Ubuntu-Core のシステムと同じです。

モジュールの展開と初期設定

カーネルモジュールを展開します。

cd /
tar pxvzf modules.tar.gz
tune2fs -c 0 -o journal_data_writeback /dev/mmcblk0p1
apt-get update

ubuntu-coreはこれを省略した手順なので、行っていません。

時間合わせと自動設定を設定

日本を設定します。

dpkg-reconfigure tzdata

Cuboxは時刻保存用のメモリを持っていないので、時刻設定をネットで行う必要があります。ntpdateという機能を使います。

apt-get install ntpdate
ntpdate ntp1.jst.mfeed.ad.jp

これで正しい時間が設定されます。
しかし、このままでは電源を落とし、次に再起動した時、また1970年に戻ってしまいます。システムの立ち上げ時に自動的に設定されるよう rc.local を編集します。

nano /etc/rc.local
終わりに
exit 0
という行がありますので、その前に
ntpdate ntp1.jst.mfeed.ad.jp
を挿入します(逆にすると動きませんので、注意して下さい)

以上の内容はこのページを参考にしました。作者に感謝します。
なお、ubuntu-coreでは以上の処理はubuntu-minimalをインストールすると設定されますので、不要です。

日本語環境の設定

ubuntu-coreとはやり方が異なります。同じdebianですので、Voyage MPD と同じ方法をとります。

dpkg-reconfigure locales
export LANG=ja_JP.UTF-8
nano /root/.profile
以下を編集
#LANG=C
#LANGUAGE=C
LANG=ja_JP.UTF8


必要なパッケージのインストール

ubuntu-coreと異なり、ある程度のパッケージは最初から入っていますので、以下のものをインストールするだけです。

apt-get install cifs-utils
apt-get install alsa-base alsa-utils
apt-get install mpd mpc ncmpc

この後のmpdのビルドの仕方はubuntu-coreと同じなのでそちらを参照して下さい。

(PC_Audio)   2012/12/22

コメントする

MPD on Cubox(11)


Linux カーネル 3.5 と Debian Wheezy による MPD on Cubox を作成します。Ubuntu-Core との違いはカーネルにCubox専用のパッチがかかっているので、光S/PDIF端子が使えるようになることです。ただし、カーネルのRT化は対応するパッチがないので、出来ません。
カーネルのバージョンを3.4にすれば、Cubox専用のパッチとRTパッチの両方をかけることは可能です。実はこの方法で作成したシステムをベータテスト中です。こちらのやり方は、近いうちに(?)、別の記事で紹介します。

ここからの内容はCuBox に Debian Wheezy をインストールというページを参考にしています。とても丁寧に解説されていて、そのまま行えば、問題なくイントール出来ます。作者に感謝します。
このページからの変更点は2パーティションの構成を1パーティションにしただけです。

以下、クロス開発側での処理です。

カーネルのビルド

ビルドに必要なパッケージはUbuntu-Coreといっしょです。必要ならインストールして下さい。

git clone git://github.com/rabeeh/linux.git
cd linux

rabeeh版ソース(Linux本家のソースにCubox対応のパッチをかけたもの)をダウンロードします。一時間くらいかかります。
環境変数の設定。これもUbuntu-Coreと同じです。

export ARCH=arm
export CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-

コンフィグの生成。

make mrproper
make cubox_defconfig

メニューコンフィグを使い、USB Audio、NTFSと CIFS supportを組み込みモジュール化する。

make menuconfig

HDMI 出力用のメモリバッファを削除し、RAM を 1GB フルに使えるように設定を変更する。.configファイルはバカでかいので、エディターの検索機能を使って場所を見つけて下さい。

emacs .config

CONFIG_FB_DOVE=n
CONFIG_DOVE_GPU=n
CONFIG_DOVE_GPU_MEM_SIZE=0

CONFIG_UIO_VMETA=n
CONFIG_UIO_DOVE_VMETA_MEM_SIZE=0

cubox_defconfigはソースのarch/arm/configにあります。menuconfigの設定内容はUbuntu-Coreと同じです。
uImageとmodulesをビルド、作成します。

make KALLSYMS_EXTRA_PASS=1 uImage
make modules
mkdir ../modules
INSTALL_MOD_PATH=../modules/ make modules_install
cd ../modules
tar czf ../modules.tar.gz *


Debian Wheezy インストール用の USBメモリを作成

Debian Wheezy はネットワークインストールします。インストール用のカーネルとファイルシステムをUSBメモリに事前に書き込んでおき、それを使ってインストールします。まず、Wheezyに対応したファイルシスム(initrd)をuboot出来るようにします。

wget http://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/initrd.gz
mkimage -A arm -O linux -T ramdisk -C gzip -n "netboot image" -a 0x1a000000 -e 0x1a000000 -d initrd.gz uImage.initrd

uImage(インストール用カーネル)はオリジナル(同梱)のmicroSD に入っているものをそのまま使います。
1パーティション用のboot.scrを生成します。やり方はUbuntu-Coreと同じなので省略します。

2パーティションの構成も可能です。やり方は直前の記事を参照して下さい。

次の構成になるようUSBメモリを作成します。

/uImage            <- オリジナルのカーネル
/uImage.initrd     <- 上記の方法で作成した initrd
/debian/boot.scr   <- Ubuntu-Coreと同じ方法で作成したboot.scr
/debian/uImage     <- ビルドしたカーネル
/debian/modules.tar.gz <- ビルドしたDebian用モジュール

やり方は環境に合わせて対応して下さい。

sudo sync
sudo umount マイクロSDカードとUSBメモリ


ここから先はCubox本体での処理です。

Debian Wheezyをネットワークインストール

空の microSDカード(2GBあれば足ります)と直前の手順で作成した Debian Wheezyインストール用 USBメモリを Cubox に差して、電源を投入し、改行キーを連打します。Cuboxはシリアル接続しておきます。
コマンドプロンプト

CuBox>>

が表示されますので、以下次の通り順に操作します。

usb start
fatload usb 0:1 0x16000000 uImage
fatload usb 0:1 0x18000000 uImage.initrd
setenv bootargs console=ttyS0,115200 useNandHal=single
bootm 0x16000000 0x18000000

次のメッセージが約2分位表示されますが、じっと我慢します。言語選択のメニューが表示されますが、戻って、シェル起動に移ります。

udevd[88]: unable to receive ctrl connection: Function not implemented
 -> Execute a shell -> 

88番のudevdが諸悪の頑強ですので、こいつを殺します。

ps
kill 88
ps
exit

killの前後のpsは状況確認用です。
あとはメニュー一番上の言語の選択から再開して下さい。GUIなので、解説は省略します。インストールには結構時間がかかります(一時間半位)。このページに懇切丁寧な解説がありますので、参照して下さい。
パーティションの作成はディスク全体を ext3 ブータブルな1パーティションとして、swap領域は無しで、作成します。アプリの選択はsshのみ選択(ディフォルト)です。
インストール最後の Finish the installation で <Go Back> -> Execute a shell -> <Continue> シェルに入る。
そして USB メモリの debian/ ディレクトリに置いてある boot.scr, uImage, modules.tar.gz を microSD カードにコピーします。それぞれの置き場所は boot.scr, uImage は /boot、modules.tar.gz は / です。

mount /dev/sda1 /mnt

cp /mnt/debian/boot.scr /mnt/debian/uImage /target/boot/
cp /mnt/debian/modules.tar.gz /target/
sync
exit

あとは再起動します。

(PC_Audio)   2012/12/16

コメントする

MPD on Cubox(10)


前回の続きです。インストール用のsdカードを入れて、続けます。

パーティショニング


ブートするパーティションはext2/ext3である必要があるため

/dev/sdb1 10MB ブート ext3
/dev/sdb2 残り全部 xfs

という構成にパーティショニングします。
この時、インストールした partedを使わないとちゃんと起動できるシステムが使えません。さらに、Linux環境を再起動しないと、/dev/sdbを partedに認識させられません。
再起動したら

sudo parted /dev/sdb
構成を確認
print
必要ならデリート
(rm n)
パーティションを作成
mkpart
p -> ext2 -> 1.00MB -> 9.999MB
p -> xfs -> 10.00MB -> 1599.999MB
パーティション1をブート可能をセット
set 1 boot on
終了します
q

これで2パーティションのディスクのパーティショニングが完了です。
尚、2パーティションの起動ディスクを作るもう一つの方法があります。cuboxオリジナルのマイクロSDカードをリーダにセットして

パーティションを作る
cuboxオリジナルのマイクロsdカードをリーダにセット
sudo dd if=/dev/sdb of=./cubox-orig-sd.img
インストールするマイクロsdカードをリーダにセット
sudo dd if=./cubox-orig-sd.img of=/dev/sdb

これでもOKです。この方法はバックアップのイメージを作るのに使えるので、覚えておいて損はないです。

フォーマットとファイルシステムのチューニング

まず、ブートパーティション。

sudo mkfs.ext3 /dev/sdb1
sudo tune2fs -c 0 -o journal_data_writeback /dev/sdb1

次にルートパーティション。

xfs ファイルシステム
sudo mkfs.xfs -f /dev/sdb2
又は
sudo mkfs.xfs -f -l size=32768b,version=2 /dev/sdb3

ext4 ファイルシステムでジャナルレスにするとファイルアクセスの効率がよくなり、音に影響するかなと考え、やってみました。

sudo mkfs.ext4 /dev/sdb2
ジャーナルレスにチューンします
sudo tune2fs -c 0 -o journal_data_writeback /dev/sdb2
sudo tune2fs -O ^has_journal /dev/sdb2
sudo e2fsck -f /dev/sdb2

シンプルにext2ファイルシステムの場合は

sudo mkfs.ext2 /dev/sdb2
sudo tune2fs -c 0 /dev/sdb2

とすればいいです。

バックアップをマイクロSDカードに展開

マウント
sudo mount /dev/sdb1 /media/boot
sudo mount /dev/sdb2 /media/rootfs
展開
cd /media/boot
sudo tar -Jxvf /home/CuboxAudioRTuned_ubuntu-core-boot.tar.xz
cd /media/rootfs
sudo tar -Jxvf /home/CuboxAudioRTuned_ubuntu-core-root.tar.xz
アンマウント
cd /home
sudo sync
sudo umount /media/*

これでめでたくシステムの作成は完了しました。カードを抜いて、Cuboxに差して、電源を入れる。
それぞれのファイルシステムのCuboxAudioRTuned_ubuntu-coreが起動されるはずです。

(PC_Audio)   2012/12/09

コメントする

MPD on Cubox(9)


MPD on Cubox(5)の続きです。Cuboxのチューニングについて。前々々回の書き込みでイメージを公開しましたが、その作り方も含めて紹介します。

以下全て開発環境での作業です。開発環境を立ち上げ、インストール済のマイクロSDカードを差します。
また以下の書き込みで /dev/sdxN は環境依存です。

本題に入る前にCuboxシステムのブートの仕組みについて。
Cuboxに使われているarm系のCPUはIntelマシンのbiosがありません。代わりにubootという仕掛けを使ってブートプロセスが実行されます。このubootはSoCモデルにより使いかたがかなり違います(ブートの仕方はブートプロセスを司る内蔵RAMのファームウェアで決まります)。
Cuboxの場合はパーティション1のboot.scrというスクリプトでブートの仕方を指定する方式をとっています。
MPD on Cubox(2)で紹介したように、boot.scrは mkimage でテキストファイルを変換してブートスクリプト変換という方法で作成します。リンク先では1パーティション用のテキストファイルを説明していますが、ここではこれを2パーティション用に変更します。

2パーティション用のブートスクリプト(boot.scr)の作成

事前に1パーティション用に作成したマイクロSDカードを/media/rootfsにマウントしておきます。

sudo mkdir /media/boot /media/rootfs
sudo mount /dev/sdb1 /media/rootfs

エディタで以下の内容の新規ファイルを作成。

echo ======== Setting bootargs ========
setenv bootargs 'console=ttyS0,115200n8 root=/dev/mmcblk0p2 rootdelay=3 --no-log --verbose'
echo ======== Loading kernel ========
ext2load mmc 0:1 0x00200000 /boot/uImage
echo ======== Booting kernel ========
bootm

比較してご覧頂くとわかりますが、変更点は2行目カーネルのブートパラメータの root=/dev/mmcblk0p2 と vmallocの指定が無くなっていることです。
root=/dev/mmcblk0p2 は rootパーティションを二番目のパーティションの /dev/mmcblk0p2 に変えたということです。
vmalloc の指定を無くしたのは、前々回の記事で「RTカーネルを指定するとディスプレイバッファ用のメモリが指定されてしまい、使用できるメモリが620MB位になってしまう」と書いたのですが、この問題が解決したからです(詳しくは前々回の記事を参照して下さい)。

以上の内容をboot2.txtというファイルで保存し

mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n 'Boot setup script for SD' -d boot2.txt boot.scr

これでブート用のスクリプトを作成することが出来ます。作成したスクリプトをマイクロSDカードの/bootにコピーします。

cp boot.scr /media/rootfs/boot/


その他のパラメータについてはubootのマニュアル「本家日本語(Bishop用)」を参照して下さい。

この仕組みが分かれば、ファイルシステムの変更は簡単に出来ます。システムをブート部分(パーティション1)とルート部分(パーティション2)に分けて、ルート部分のファイルシステムをxfsなりext4にすればいいだけということです。

これで終わりにしてもいいのですが、一応解説します。

xfsと ext4をカーネルに組み込み(カーネルビルド)

まず、xfs と ext4 ファイルシステムをカーネルに組み込む必要があります。menuconfigで

File systems  ---> 
  <*> The Extended 4 (ext4) filesystem
  [*]   Ext4 extended attributes
  ・・・
  <*> XFS filesystem support

という具合に ext4 と xfs 関連のモジュールを組み込みます。カーネルのビルド方法については以前の記事を参照して下さい。



ビルドが終了したらカーネルをマイクロSDカードの/bootにコピー。

cp arch/arm/boot/uImage /media/rootfs/boot/


バックアップの作成

ファイルシステムを変更するためのバックアップを作成します。2パーティションに分けるためboot用パーティションのバックアップとrootfs用のパーティションのバックアップをそれぞれ作成します。
まず、boot用パーティションのバックアップ。
作成したboot.scrとuImageをブートパーティションにコピーしておきます。

cd /media/rootfs
sudo tar -Jcvf /home/CuboxAudioRTuned_ubuntu-core-boot.tar.xz ./boot

でブートパーティションのバックアップを作ります。
次にルートパーティション全体のバックアッフを作成します。

sudo tar -Jcvf /home/CuboxAudioRTuned_ubuntu-core-root.tar.xz ./*

/bootもバックアップされてしまいますが、どうせ使われないので、無視します(^^;;;。気になる方はrmdirして下さい。

必要なパッケージのインストール

xfsフォーマットのパーティションを作成するため必要なパッケージをインストール。parted と xfsパッケージをインストールします。

sudo apt-get install parted xfsprogs xfsdump

parted というのは fdisk の進化版です。これでないと、何故かうまくパーティショニングできません。

これで事前準備は完了です。マイクロSDカードを空の2GBのものに差し替えます。マイクロSDカードですが、ちゃんと起動出来るシステムを作成するには何故かメーカーを選びます。原因が謎なのですが、詳しくは以前の記事を参照して下さい。

sudo sync
sudo umount /media/*

としたあと、カードを差し替えます。
長くなったので以降は次回に。

(PC_Audio)   2012/12/01

コメントする

MPD on Cubox(8)


公開したイメージの紹介で「サイズを拡張したい場合は自力でなんとかして下さい(partedなどを使えばできると思います)」と書きましたが、ちょっと注意が必要のようです。

Phoeniciaさんから

XFS版(TDK製SD)が今日起動しなくなり、ext3版(elecom製SD)にメモリ拡大処置を行い
起動しようとしたところ同じく起動しませんでした。

というご連絡を頂戴し、ログを調べたのですが

・・・・
[    6.742727] XFS (mmcblk0p2): Mounting Filesystem
ここまでは問題なし

[    8.931959] XFS (mmcblk0p2): Starting recovery (logdev: internal)
電源を落とす前のxfsの処理に何か問題がありジャーナルログによるリカバリがスタート

[   29.603915] XFS: Internal error XFS_WANT_CORRUPTED_GOTO at line 1504 of file fs/xfs/xfs_alloc.c.  Caller 0xc0295714(kernel_thread_exit+0x0/0x8)
・・・・
[   29.814368] XFS (mmcblk0p2): Failed to recover EFIs
いろいろ頑張っているが、結局リカバリは出来ず

[   29.819227] XFS (mmcblk0p2): log mount finish failed
[   29.830646] VFS: Cannot open root device "mmcblk0p2" or unknown-block(179,2): error -117
ルートを呼び出すのに失敗したよ
・・・
[   29.867399] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(179,2)
・・・
というわけで、カーネルパニックでハング

ということのようです。

通常はジャーナルリカバリは動きませんので、直前の電源の落とし方で
クラスタ破損したのでしょう。

僕の環境で稼働中に電源を落とし再現させてみました。

[   10.377834] XFS (mmcblk0p2): Mounting Filesystem
[   17.549196] XFS (mmcblk0p2): Starting recovery (logdev: internal)
[   17.633704] XFS (mmcblk0p2): Ending recovery (logdev: internal)
[   17.639702] VFS: Mounted root (xfs filesystem) on device 179:2.
綺麗にリカバリ出来ています。

またshutdownして、普通に電源を落とした場合は

[   10.096699] XFS (mmcblk0p2): Mounting Filesystem
[   15.994540] XFS (mmcblk0p2): Ending clean mount
[   15.999166] VFS: Mounted root (xfs filesystem) on device 179:2.

という具合にジャーナルリカバリは走りません。

ジャーナルリカバリがうまくいかない理由は

> Gpartedで公開版からパーティションを拡大しているのが悪い?
この可能性があります。

> 起動する前にログインしに行こうとLAN経由で接続に行くと不味い?
これは無いと思います。

ext3でも発生したとなると、ファイルシステムは関係なさそうです。

Gpartedというのはパーティション処理専用のLinuxのディストリビューション
ですか。

ということでした。
回避方法としては(sdcは環境依存です)

リサイズの仕方ですが、Gpartedを使わない方法を試して頂けますか。
やり方は、開発環境(Voyage Mpd)で

partedをインストール
apt-get install parted
適当なバックアップ用のフォルダーを作成
mkdir /backup /media/rootfs
sdカードを差して
mount /dev/sdc2 /media/rootfs
rootfsをバックアップ
cp -av /media/rootfs/* /backup
sdカードをアンマウント
umount /media/rootfs
partedを立ち上げる
parted /dev/sdc
rootfsパーティションを削除
 rm 2
4GBのパティションを作成、partedを終了
 mkpart -> p -> xfs -> 10.000M -> 3860.000M -> q
xfsフォーマット
mkfs.xfs /dev/sdc2
もう一度rootfsをマウント
mount /dev/sdc2 /media/rootfs
バックアップした内容をリカバリ
cp -av /backup/* /media/rootfs
rootfsをアンマウント
sync
umount /media/rootfs

これで再発防止になるか確認して頂けますか。
再発しなければ、Gpartedが原因と特定できます。

とやれば問題は発生しないようです。
あと、Phoeniciaさんが

Gpartedを使ったのは、GUIであるのと、境界をシリンダー指定にしたら母艦でfdisk -lが綺麗に
見えることの2点でした。
しかしOSをインストールした状態のままでリサイズしたので、ここが不味いのかも知れません。
Gtardetでも、パーティション削除、パーティション作成、母艦からファイル書き戻し
を行えば変な矛盾はなくなるような気もします。
Gpartedでリサイズ中に、「OSが起動しなくなる危険性もありますが本当にいいですか」
というメッセージが出ていました。

という方法を提案され、確認されています。この方法でも問題ないようです。
なお、理由はよく分かりませんが、公開したイメージを書き込んだsd/sdhcカードはpartedを使ったリサイズは出来ないようですね。

(PC_Audio)   2012/11/23

コメントする

MPD on Cubox(7)


先週公開したイメージ(xfs、ext3共通)ですが、使用できるメモリが975MB位で1GBフルに使えないという問題がありました。掲示板でyanさんとやりとりし、解決しましたので、ブート用のパーティションのカーネルとブートスクリフトの改良版を公開します。いつものように、yanさんとPhoeniciaさんにはお世話になりました。お礼申し上げます。

1GB対応のカーネルとブートスクリプト

上のリンクからダウンロードできます。

レベルアップ方法

ダウンロードした CuboxAudioRTuned_ubuntu-core-boot20121115.tar.xz を/rootディレクトリにおいて下さい。nas経由でもってくるのが簡単です。usbメモリを使う場合はntfsかext2/3フォーマットにして下さい。fat16/32だとエラーになります。

# 公開したイメージでcuboxを立ち上げて、rootでログイン。
cp /music/CuboxAudioRTuned_ubuntu-core-boot20121115.tar.xz ./   # 共用ディレクトリがnas /musicの場合、usbメモリの場合はmountも必要
mkdir /media/boot
mount /dev/mmcblk0p1 /media/boot
cd /media/boot/
tar -Jxvf /root/CuboxAudioRTuned_ubuntu-core-boot20121115.tar.xz
# 以下のメッセージが表示されます。
./boot/
./boot/config_Basic-RT
./boot/.config
./boot/boot.scr
./boot/uImage
# 再起動します
reboot
# 起動後
cat /proc/meminfo
# MemTotal:        1028568 kB と表示されればOKです。

やり方はxfs、ext3共通です。ブートパーティションのバックアップを展開して、レベルアップさせているということです。

公開して一週間後に改版するとはどっかのソフト会社みたいですが(^^;;;、気分がよくないので、まあしょうがない。前の版に致命的な問題があるというわけではないので、掲示板で内容をご理解頂き、レベルアップして下さい。
気のせいか、こっち方が音がよくなったという気がします(^^;;;。

(PC_Audio)   2012/11/17

コメントする

MPD on Cubox(6)


Cuboxを使った音楽プレーヤ(MPD)用のUbuntu-Coreシステムのイメージを公開します。

ダウンロード

ファイルサイズはそれぞれ330MB位です。二つの版は違いはファイルシステムだけで、内容は同じものです。
ダウンロード先はGoogleドライブの僕の共用フォルダーです。ファイルサイズがバカでかいため

Sorry, we are unable to scan this file for viruses.
The file exceeds the maximum size that we scan

というメッセージがでますが、無視して

Download anyway

をクリックすればダウンロードできます。

システムの作成とCuboxの起動

Windowsの場合は、Alzipなどで解凍(gzip圧縮しています)して、ddwinでマイクロSD/SDHCカードに書き込めば、起動用のディスクを作成できます。やり方はシンさんのイメージ(alix用のもの)といっしょなので、yungさんのサイトに詳しい解説があります。そちらを参照して下さい。
Linuxの場合は、お手持ちのLinux環境(Voyage MPDでも大丈夫です)にカードを差して

zcat CuboxAudioRTuned_ubuntu-core-[xfs|ext3]-20121108.img.gz | dd of=/dev/sdb

でOKです(/dev/sdbの部分は機種依存です)。

使うマイクロSD/SDHCカードですが、2GB以上のものを使って下さい。また、起動できるカードはメーカーを選びます。
理由は分かりませんが、僕とPhoeniciaさんの環境での結果をまとめると

起動可能なメーカー
SanDisk、ELECOM、IODATA、HIDISC、TDK
起動不可のメーカー
KINGMAX、SiliconPower

となりました。駄目な場合はメーカを変えて、試してみて下さい。また、起動できるカードや起動できないカードの情報を掲示板に書き込んでもらえると助かります。
展開されるパーティショのサイズは2GBです。書き込んだ状態で0.73GB程度を使用しています。MPDサーバとして使う分には十分余裕はあると思いますが、サイズを拡張したい場合は自力でなんとかして下さい(partedなどを使えばできると思います)。

書き込んだマイクロSD/SDHCカードをCubox本体に差し込み電源を入れれば起動するはずですが、シリアル接続し(マイクロBタイプのUSBケーブルが必要です)、状況を確認しながら、起動することをお勧めします。以前の記事でも書きましたが、シリアル接続無しでの起動は羅針盤無しでLinuxの荒海を航海するようなもので、何かあった場合の対処は不可能と考えて下さい。

ネットワーク接続

ネットワーク接続はdhcpで行っています。ご使用の家庭内lanがdhcp対応していれば、Avahiとwinbindを有効にしてありますので、ホスト名でssh/nas接続することが可能です。Ubuntu-Coreシステムのホスト名はcuboxです。Windows からの場合はcubox.local となります。

シリアル接続またはsshでのログインはユーザ名(root)、パスワード(cubox)で行えます。

固定アドレスを使いたい場合は適当なLinux環境(Voyage MPD でOKです)にカードリーダを接続し、 マイクロSD/SDHCカードをマウントし、/etc/network/interfaces を編集して下さい。
Voyage MPDの場合だと

rootでログインして
viは使いづらいのでnanoをインストール
apt-get install nano
マウントポイントを作成(環境によっては自動マウントされているかもしれません。
その場合はdfで調べて以降rootfsの部分を読み替えて下さい)
mkdir /media/rootfs
マウント
mount /dev/sdb /media/rootfs
設定ファイルを読み込む
nano /media/rootfs/etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
# auto eth0
# iface eth0 inet dhcp
iface eth0 inet static
        address 192.168.mmm.nnn
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1

4行目と5行目をコメントアウト。6行目以降を追加。
mmm.nnn の部分はお使いの環境に合わせて下さい。

初期設定(音楽ディレクトリの登録)

UbuntuはDebian系列のディストリビューションなので、設定方法は Voyage MPD と同じです。

最初の起動・ログイン後、音楽ファイルの在り処を設定する必要があります。/etc/fstabに僕のテスト確認用の設定を残してありますので、参考にして、ご自分の環境に合わせて下さい。
エディターはvi、nanoが使えます。

nano /etc/fstab

# UNCONFIGURED FSTAB FOR BASE SYSTEM
# //debian/public/music /music cifs username=root,password=,uid=root,file_mode=0666,dir_mode=0766,iocharset=utf8,rsize=130048,wsize=4096 0 0

二行目の “# ” を削除して、//debian/public/music をお使いのnasのホスト名+ディレクトリ名に変えて下さい。パスワードなどは必要なら変更して下さい。

mkdir /music
mount -a
ln -s /music /var/lib/mpd/music/

で音楽ディレクトリを MPD の認識させることが出来ます。

システムの内容

システムの内容はこれまでの「MPD on Cubox」に書き込んだ通りですので、そちらを参照して下さい。
コンパイルしたカーネルの内容については .config を第1パーティションの/bootに入れてありますので、そちらを参照して下さい。

直前の記事のチューンアップの内容も適用済です。従って、そのままでオーディオ的にチューニングしたCuboxシステムとなります。もちろん、ubuntu-coreに音楽再生のための必要なものを入れただけなので、お好みで自由に改良することもできます。よい方法が見つかったら是非教えて下さい。

MPDの切り替え

MPDは 0.18git、0.172stable、jurgenさんのDSDネイティブ再生用公開版の三つがビルド済です(/root/mpdcuboxに置いてあります)。初期状態では0.18gitが有効になっています。
以下のコマンドで切り替えることができます。

select-mpd [18g|172s|jk]

select-mpdはDSDネイティブ再生用です。/usr/local/bin/ にスクリプトが置いてありますので、DSD-PCM変換再生したい場合は適当に修正してお使いください。

nano /usr/local/bin/select-mpd

#!/bin/sh

/etc/init.d/mpd stop
sleep 1s
if cp /root/mpdcubox/$1/mpd /usr/local/bin/; then
        if [ "$1" = "jk" ]
        then
                sed -i "s/\(dsd_usb[\t ]\+\)\"[noyes]\+\"/\1\"yes\"/" /etc/mpd.conf
                sed -i "s/\"[noyes]\+\"\([\t ]\+# DSD native\)/\"yes\"\1/" /etc/mpd.conf
        else
                sed -i "s/\(dsd_usb[\t ]\+\)\"[noyes]\+\"/\1\"no\"/" /etc/mpd.conf
                sed -i "s/\"[noyes]\+\"\([\t ]\+# DSD native\)/\"no\"\1/" /etc/mpd.conf
        fi
        /etc/init.d/mpd start
fi

でDSD-PCM変換再生用になると思います。

その他

公開にあたり、Phoeniciaさんにいろいろお世話になりました。ありがとうございました。また、インタネット上のソフトや情報に助けられ、このシステムをなんとか動かすことができました。素晴らしいソフトや情報を公開されている数多くの方々にお礼申し上げます。

システムに関するご質問は掲示板にお願いします。

なお、公開されたバイナリイメージは無保証です。作者(僕のことです)は内容に関して一切の責任はもちませんので、ご自身のリスクでお試し下さい。


11/10 追記
このシステムは Voyage MPD と異なり、ファイルシステムはリードオンリーの運用ではありません。従って、電源を落とす場合は必ず

poweroff

と入力して落として下さい。

(PC_Audio)   2012/11/09

コメントする

MPD on Cubox(5)


Ubuntu-Coreシステムのチューンアップ方法を紹介します。

システム設定のチューニング

RTカーネルの作成

本題に入る前に書き忘れていたこと。これが最重要のチューンアップです。
MPD on Cubox(5)でrtパッチをかけることまでは書いていますが、肝心のメニューコンフィグでrt化させる指定方法の記述が抜けていました(^^;;;。

Kernel Features  --->  Preemption Model (Fully Preemptible Kernel (RT))  ---> 
と辿って、こういう画面が表示されます。



スナップショット通り Fully Preemptible Kernel (RT) を選択します。
実はこの設定を忘れていて、しばらくディフォルト Voluntary Kernel Preemption (Desktop) のまま使っていたのですが、たまたま気が付いてrt化してみてビックリ。まるで変わりますね。解像度の向上、音の迫力などオーディオ的には断然こちらがお勧めです。

ただし、RTカーネルを指定するとディスプレイバッファ用のメモリが指定されてしまい、使用できるメモリが620MB位になってしまうのですが、この対処方はよく分かりません。まあ、620MBあればMPDサーバとして動かす分には十分ですが。

設定ファイルのチューニング

本題に戻ります。
Ubuntu-Coreはもともと組み込み開発用のディストリビューションですので不要なものはなにも付いていません。これにmpdを動かすための必要最小限のパッケージを導入しただけですので、チューニングの余地はほとんどありません。
あまり効果は感じられないけど、定番の /etc/security/limits.conf と /etc/sysctl.conf の設定。詳しくはここここを参照。

nano /etc/security/limits.conf
以下を追加
@audio - rtprio 99
@audio - memlock unlimited
@audio - nice -19

nano /etc/sysctl.conf
以下を追加
net.core.rmem_max=12582912
net.core.wmem_max=12582912
net.ipv4.tcp_rmem= 10240 87380 12582912
net.ipv4.tcp_wmem= 10240 87380 12582912
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_no_metrics_save = 1
net.core.netdev_max_backlog = 5000
vm.overcommit_memory = 2
vm.overcommit_ratio = 50

RTプライオリティの設定

次に優先度の設定。これも詳細は過去の記事、ここと関連する記事ここを参照して下さい。あとDSDネイティブ再生に関連しては掲示板にも情報があります(リンク先とその前後)。

nano /etc/mpd.conf
realtime_optionを追加
realtime_option {
        memlock                 "yes"
        stack_reserve           "2048"
        heap_reserve            "10240"

        main_priority           "OTHER:0"
        player_priority         "FIFO:52"
        decoder_priority        "FIFO:51"
        update_priority         "OTHER:0"
}
audio_outputに以下の行を追加
        priority        "FIFO:52"

プライオリティを指定するスクリプトを作成

nano /etc/init.d/rtset.conf
以下の内容で新規作成
#!/bin/sh
chrt -f -p 53 `pgrep irq/24-ehci_hcd`
chrt -f -p 53 `pgrep irq/29-eth0`
chrt -f -p 53 `pgrep cifsd`

rtset.confを次回からの起動で自動実行されるよう設定。

chmod 755 /etc/init.d/rtset.conf
update-rc.d rtset.conf defaults

再起動後、プライオリティの設定を確認

ps -eLo pid,lwp,rtprio,priority,cmd

不要なプロセスの削除

不要なプロセスの削除についてはこの記事を参照して下さい。

apt-get install sysv-rc-conf
sysv-rc-conf

ただ、sysv-rc-conf を起動し表示させてみると分かりますが、Ubuntu-Coreの場合、常駐しているプロセスは音楽再生のため起動したものばかりで、何もする必要がないと思います。強いて言えばsudoは不要 ?




あと、音をよくすることとは関係ありませんがホスト名を使って簡単にアクセスできるように

apt-get install avahi-daemon
apt-get install avahi-autoipd
apt-get install winbind

をインストールします。

長くなったので以降は次回に。

(PC_Audio)   2012/11/04

コメントする

Nexus 7




Googleが今月初めに日本発売開始したAndroid端末です。ご覧の通り、なかなかファッショナブルな箱に入っています。掲示板でも話題になっていますが、これはヘッドレス(ディスプレイを接続しないという意味)のMPDサーバをコントロールするのに便利ですよ。

10月に日本で発売開始になるという情報は前から知っていて、10月初めに近所の何軒かの電器店に行ったのですが、「発売開始と同時にあっという間に売り切れになって、予約しないと購入できない。入荷するのはいつになるかわからない」ということでした。いつ手に入るか分からないものを予約して購入するほどの根性もないので、気長に待つかと諦め、退却。
今週初め、藤沢のビックカメラに行ったら、驚いたことに店頭展示している、いじってみて良さそうなので、「これあるの」と聞いたら、「ありますよ」というご返事。早速、getしました。在庫が偏っているということなのですかね。

この端末が気に入ったのは、安い、シンプル、コンパクトというところですかね。本体はSDカードスロットもなく何もついていませんが、Bluetooth内蔵なのでワイヤレスキーボードが使えるし、大きさもこれ以上だと持ち運びに不便です。中国製でもっと安いやつも持っていますが、ハードスペックが貧弱で、使いづらいです。 Android OS バージョンが 4.1 と最新なのもいいですね。

これを使って、Cuboxをコントロールしていますが、快適です。
ネット接続は当然 Wifi、こういう端末は余計な線を接続せず、本体だけで使うというのが正しい作法です。何も繋がっていない端末からCuboxを自在にコントロールできるのは便利ですよ。

使い方ですが、普通はGoogleStoreにあるMPDroidなどの適当なクライアントを使うのでしょうが、僕はサーバにsshで入り、ncmpcでコントロールするというやり方をしています。まあちょっと(大いに ?)変な繫ぎ方なのだろうけど、AndroidってもともとLinuxなのだから、こっちが正統的なやり方だと思っています(^^;;;。
という次第で、その方法をご紹介します。

使用するアプリは

  • Connect Bot(SSHソフト)
  • Hacker’s Keybopad(カーソルキー、コントロールキーなどが簡単に使えるソフトウェアキーボード)

Connect Bot というのはAndorid定番のsshソフトです。簡単にログインできて、普通のsshソフトと同じ感じで使えます。VotexBoxルートの「ls -la」のスナップショット。



キーボードは標準のものでは使いづらいので、Hacker’s Keybopadというハッカー様ご愛用のもの使います。僕は入力量が多い(mpd.confの設定など)場合は Bluetooth接続のワイヤレスキーボードと併用しています。

Connect Bot を起動すると、



こういう画面が表示されますので、ここで「ユーザ名@ホスト名(またはipアドレス)」を入力し、改行すれば、接続できます。ここでパスワードを入力。あとは接続先のサーバの世界。何でもできます。
ところで、この画面で右下のメニューマークをタップすれば、



メニュー画面が表示され、ConnectBot全体の設定を行うことができます。設定をタップします。



設定はほとんどディフォルトのままでOKですが、僕は「画面の向き」を「縦のみ」、「全画面」を指定しています。
さて元に戻って、一度ログインすると、ログインした情報は画面のようにホスト選択のメニューとして自動的に登録されます。以降はこのメニューをタップするだけでログインできるようになり、便利です。 またこのホスト名を長押しすれば。メニューの内容を編集削除することができます。長押ししてみましょう。



こういう画面が表示されますので、「接続ホストの編集」をタップ。



ほとんどディフォルトのままで問題ないはずですが、僕はフォントサイズを20に変更しています。
ここでipアドレスなども変更することができます。 さて root@cubox をタップしてみましょう。



パスワードの入力画面からパスワードを入れてみましょう。



あとは Cubox Linuxですので、コマンドプロンプトから「ncmpc」と起動。 ここで、メニュー画面とソフトキーボードを共存させるために画面右下のメニューボタンをタップ。



「サイズ強制」というメニューを選びます。



ここで60×25を選択(60×25は使っているフォントによって変わります。画面ギリギリの列と行を指定するのがポイント)。



キーボード画面は自動的に表示されるはずですが、画面左下の「戻る」をタップで消すことができます。また、再表示させるには画面の適当なところタップし、右下に表示されるキーボードマークをタップすれば表示させることができます。 Hacker’s Keybopadが便利なのはコントロールキーとかカーソルキーが使えることです。カーソルキーを表示させるには設定メニューで



Configure input methods -> Hacker’s Keybopad の設定アイコンをタップ -> keyboard mode,portrait/landscape を full 5 row layout を選択。


p.s. Android の sshクライアントとしては Better Terminal Emulator Pro というのもなかなかいいです。有料(300円)ですが、これだとソフトウェアキーボードと画面の分割を自動でコントロールしてくれます。使い方は Connect Bot とほとんど同じです。ただ、日本語表示が出来ないので、使い分けるしかないかな。

p.p.s. ncmpcの使い方については、以前、ここここに書きましたので、よろしければご覧ください。軽量で、反応のよい、とても使いやすいクライアントだと思います。

(PC_Audio)   2012/10/27

コメントする

MPD on Cubox(4)




写真はaitlaboDACを使いDSDネイティブ再生中のCuboxです。DACと比較すると大きさの差がお分かり頂けるかと思います。Cuboxは「馬の尻尾」という感じですね。

Ubuntu 12.04 のapt-getでインストールされるmpdは16.0です。最新ではないので、DSD再生などには対応していません。
という次第で、Ubuntu-CoreシステムのCuboxでMPDをビルドします。せっかくなので、yanさんのパッチも適用します。これでPC-Audio的には最強システムに出来ます。
やり方は基本的には Voyage MPD の場合といっしょです。また、かずひこさんから安定版と開発版の両方を指定する必要はないというアドバイスを頂戴したので、それでいきます。

必要なパッケージのインストール

apt-get install aptitude git make autoconf automake autotools-dev libtool
apt-get install build-essential libncurses5-dev libncursesw5-dev libglib2.0-dev

インストールされるgcc、g++は4.6です。MPD 0.17 stable をインストールするには4.4でないと駄目なのでこちらもインストールしておきます。

apt-get install gcc-4.4 g++-4.4

これで、4.4と4.6が併用される環境となりました。新しいディストリビューションだと楽ですね。

個別ライブラリのインストール

apt-get install libflac-dev libogg-dev libvorbis-dev libid3tag0-dev libmad0-dev libcue-dev libasound2-dev
apt-get install libsamplerate0-dev libshout3-dev libaudiofile-dev libresample1-dev libsamplerate0-dev
apt-get install libavformat53 libavcodec53 libavutil51 libavformat-dev libavcodec-dev libavutil-dev
apt-get install libsndfile1-dev libmms-dev libavahi-client-dev libavahi-glib-dev
aptitude install libcurl-dev libcurl4-openssl-dev

それぞれの内容についてはこの記事を参考にして下さい。

MPDのソースをgetし、yanさんのrtoptパッチああてる

yanさんのパッチはカレントにあるものとします。
まず、0.18gitの場合。

git clone git://git.musicpd.org/master/mpd.git
cd mpd/

次に、0.17.2stableの場合

wget http://sourceforge.net/projects/musicpd/files/mpd/0.17.2/mpd-0.17.2.tar.bz2
tar -xjf mpd-0.17.2.tar.bz2
cd mpd-0.17.2/

次にyanさんのパッチをあてます。

mpd 0.18gitの場合
patch -p1 < ../mpd-0.17git-20120819rtopt.diff
mpd 0.17.2stableの場合
patch -p1 < ../mpd-0.17git-20120226rtopt.diff
共通
patch -p1 < ../buffer.c.diff


ただし、只今(20121020)、rtoptパッチの最新版は改版中でgitを9月25日位に戻さないと、パッチがかからないようです。gitをリワインドするため、パッチをかける前に

git checkout 9cdbde4f5e421b7a1ca28d5268d5c31de9d6ad5d

と操作して下さい。

configファイルを編集

emacs my-config
以下の通り新規作成
#!/bin/sh
./configure \
--disable-bzip2 \
--disable-iso9660 \
--disable-zzip \
--enable-id3 \
--disable-sqlite \
--enable-alsa \
--disable-wave-encoder \
--enable-pipe-output \
--enable-httpd-output \
--disable-recorder-output \
--enable-sndfile \
--enable-oss \
--enable-shout \
--disable-pulse \
--disable-ao \
--disable-mad \
--disable-inotify \
--disable-ipv6 \
--enable-curl \
--enable-mms \
--disable-wavpack \
--disable-lame-encoder \
--disable-twolame-encoder \
--enable-vorbis \
--enable-lsr \
--enable-rtopt \
--enable-ffmpeg \
--with-zeroconf=auto \
CC=gcc-4.6 CXX=g++-4.6 CFLAGS="-O2"

CFLAGSに-march=nativeを設定しようとしたが、エラーになってしまう(armv7lも駄目)。何でだろう。
MPDが0.17.2stable場合は最終行を以下の通り変更します。

CC=gcc-4.4 CXX=g++-4.4 CFLAGS="-O2"


AutoGenerate、Configure、make、make installの実行

pkill mpd
./autogen.sh
sh ../my-config
make && make install

mpd start

echo DAEMON=/usr/local/bin/mpd >>/etc/default/mpd
mpdの在り処の変更。これは初めての時だけ必要です。 
/etc/init.d/mpd start


これで Ubuntu-Core システムは完成です。次回は Debian-wheezy システムの作成です。

(PC_Audio)   2012/10/20

コメントする

MPD on Cubox(3)


さて、前回に続き、Ubuntu-Coreシステムの作り方です。本題に入る前にシリアル接続について。

Cuboxのシリアル接続

詳しい解説はこのページにあります。とても丁寧に解説されているので、付け加えることはありません。ただ、僕の環境(Windows 7 32bit & 64bit)では Windows用のUSBドライバは動きませんでした。しかたがないので、VortexBox に minicomをインストールして対応しました。

yum install minicom

この状態で盛大に文字化けするので、更にWindows側からVortexBoxを呼び出しminicomを起動するという方法で凌いでいます。かなり極道な繫ぎ方だと思いますが、問題なく動きます。

Cuboxをシリアルケーブルなしに使うというのは羅針盤なしに嵐の海(^^;;;を航海するようなものなので、とてもお勧め出来ません。microB USBケーブルは必須だと思います。


それでは、クロス開発側で作成したmicroSDカードをCuboxに差して、電源を入れます。Cubox側は上記の方法でシリアル接続して下さい。順調にいけば、Linux loginのプロンプトが表示される筈です。

Cubox Ubuntu-Coreでネットワークを立ち上げる

ネットワークを立ち上げます。

login as: root
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.4.10-rt18 armv7l)

 * Documentation:  https://help.ubuntu.com/
root@localhost:~#/usr/lib/klibc/bin/ipconfig eth0

ここでipアドレスが表示される筈ですので、しっかりメモしておいて下さい。
とりあえず、シリアルではやっていられないので、sshをインストールします。

apt-get update
apt-get install openssh-server
passwd

パスワードを入力して下さい。sshログインには必須です。
これでシリアルとはオサラバします。お好みの方法でメモしたアドレスでsshログインしましょう。

最小限のパッケージをインストール

あとは勝手知ったる Voyage(Debian) の世界です。とりあえずこの状態を維持するために ubuntu-minimalをインストールします。これでネットワーク環境はVoyageとほぼ同じになります。viも入ちゃうけど、まあ仕方がない。

apt-get install ubuntu-minimal

途中でコードの選択の問い合わせ画面(Configuring console-setup)が二つ表示されます。こんな具合です。



このショッキングピンクは何だろうと思いますが、次も



それぞれディフォルトのままで大丈夫だと思います。
上の画面は何故かシリアル接続ではうまく表示されません。シリアル接続をSSHに切り換えたのはこのためです。

参考までに、ubuntu-minimalの内容を以下に。

The following extra packages will be installed:
  apt-utils bzip2 console-setup cron debconf-i18n dmsetup eject file iputils-ping isc-dhcp-client
  isc-dhcp-common kbd keyboard-configuration less libapt-inst1.4 libdevmapper1.02.1 libexpat1
  libfribidi0 liblocale-gettext-perl liblockfile-bin liblockfile1 libmagic1 libnewt0.52 libpopt0
  libsqlite3-0 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl lockfile-progs
  logrotate lsb-release mime-support net-tools netbase netcat-openbsd ntpdate python python2.7
  resolvconf rsyslog sudo ucf ureadahead vim-common vim-tiny whiptail xkb-data
Suggested packages:
  bzip2-doc anacron checksecurity exim4 postfix mail-transport-agent cdtool setcd avahi-autoipd
  apparmor mailx lsb python-doc python-tk python2.7-doc binutils rsyslog-mysql rsyslog-pgsql
  rsyslog-doc rsyslog-gnutls rsyslog-gssapi rsyslog-relp indent
The following NEW packages will be installed:
  apt-utils bzip2 console-setup cron debconf-i18n dmsetup eject file iputils-ping isc-dhcp-client
  isc-dhcp-common kbd keyboard-configuration less libapt-inst1.4 libdevmapper1.02.1 libexpat1
  libfribidi0 liblocale-gettext-perl liblockfile-bin liblockfile1 libmagic1 libnewt0.52 libpopt0
  libsqlite3-0 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl lockfile-progs
  logrotate lsb-release mime-support net-tools netbase netcat-openbsd ntpdate python python2.7
  resolvconf rsyslog sudo ubuntu-minimal ucf ureadahead vim-common vim-tiny whiptail xkb-data

次にemacsを入れます。このあたりは好みなので、お好きにどうぞ。「俺はLinux原理主義者だ。vi以外は許せん」という方はパスして下さい(^^;;;。

apt-get install emacs

30分位時間がかかります。じっと我慢。めでたく何でもできる環境になりました。

タイムゾーン、日時の設定と必要なパッケージのインストール

試しにdateと入力してみて下さい。

root@localhost:~# date
Thu Jan  1 00:09:22 UTC 1970

という具合に表示されるかと思います。
Cuboxは日時を保持するためのメモリを持っていないようなので、電源を落とすと40年前に戻ってしまいます。
そのままにしておくと、後々mpdのビルドなどでいろいろ不都合を引き起こすので、ここでちゃんと処理されるようにしておきましょう。やり方は簡単で

dpkg-reconfigure tzdata
でとりあえずタイムゾーンを東京にします。その後
ntpdate ntp1.jst.mfeed.ad.jp

なお、次回の起動時からは日時は自動的に設定されます。ntpdate はubuntu-minimal に入っています。
あとは必要なパッケージをまとめてインストールします。

apt-get install smbclient smbfs usbutils alsa-base alsa-utils


日本語環境のセットアップ

次に日本語環境のセットアップ。このページを参考にしました。綺麗にセットアプ出来ます。作者に感謝です。

apt-get install language-pack-ja
/var/lib/locales/supported.d/jaがあることを確認
export LANG=ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

mpdのインストール

Ubuntu-Coreのディフォルトのソースリストの設定は必要最小限ですので、source.listを編集する必要があります。

emacs /etc/apt/sources.list
前半部分に
# deb http://ports.ubuntu.com/ubuntu-ports/ precise universe
# deb-src http://ports.ubuntu.com/ubuntu-ports/ precise universe
# deb http://ports.ubuntu.com/ubuntu-ports/ precise-updates universe
# deb-src http://ports.ubuntu.com/ubuntu-ports/ precise-updates universe
という行がありますので、全てコメントアウト(有効に)して下さい。その後
apt-get update
apt-get install mpd mpc ncmpc

これで mpd 0.16がインストールされ、音を鳴らすことが出来ます。この後の環境設定方法(音源の設定、音楽ディレクトリの認識など)は Voyage MPD と全く同じですから省略します。

mpdのビルドの仕方は次回に。

(PC_Audio)   2012/10/12

コメントする

top page     previous page     next page

mail