2014/06/29

BeagleBoard-xM の USER ボタンでシャットダウンさせる方法

@ Ubuntu 13.10 (GNU/Linux 3.13.3-armv7-x10 armv7l)

私は、BeagleBoard-xM を MPD サーバとして使用しているのですが、キーボードもディスプレイも外してしまっています。
そのため、シャットダウンするためにはキーボードとディスプレイをつなぐか、SSH でログインしないといけません。
どっちにせよ、結構面倒くさいです。

というわけで、普段使われていない USER ボタンをシャットダウンボタンに変更してみました。
USER ボタン

/etc/init.d/user_button_shutdown.pl を作成
#!/usr/bin/perl

my $pid = fork;
die "$!" unless defined $pid;

my $comm = $ARGV[0];

if ($pid) {
  exit 0;
}

print $comm;
if ($comm ne "start") {
  exit 0;
}

open (INPUT, '/dev/input/event0') or die "$!";

my $inp = 0;
while( !($inp) ){
    read(INPUT, $inp, 1);
}
close(INPUT);

exec("poweroff");

exit 0;

起動時に実行されるようにする。
$ sudo chown root:root
$ sudo chmod 744
$ sudo update-rc.d user_button_shutdown.pl defaults
update-rc.d: warning: /etc/init.d/user_button_shutdown.pl missing LSB information
update-rc.d: see 
 Adding system startup for /etc/init.d/user_button_shutdown.pl ...
   /etc/rc0.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc1.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc6.d/K20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc2.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc3.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc4.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl
   /etc/rc5.d/S20user_button_shutdown.pl -> ../init.d/user_button_shutdown.pl

問題点

すごく雑に作ったので、 missing LSB information が出ちゃうけど、現実的には問題ないから放置しております…

あと、キーボード等がつながっていると、USR Switch が /dev/input/event1 や event2 に割り当てられてしまう問題が。
動的に確認する方法はないものだろうか?
2014/02/22

BeagleBoard-xM 上に Ubuntu 環境を構築する (Windows 編)

以前、BeagleBoad-xM 上に Ubuntu 環境を構築する方法を書きました。

ただ、この方法、Ubuntuまたは、他の Linux でも可能なはず を使うこと前提で書いたので、今回は Windows で行う方法を書いてみようと思います。
と言っても、Cygwin 使って raw image を焼くだけなので、Linux でも可能です。
以下、Cygwin がインストールされ、基本的なコマンドもインストールされているものとして書いていきます。
参考
BeagleBoardUbuntu - eLinux.org
Method 1: Download a Complete Pre-Configured Image - raw microSD img

Raw Image を用意

Cygwin のコンソール上では以下のようにダウンロードします。
ブラウザ等を用いてもダウンロード可能でしょう。
$ wget https://rcn-ee.net/deb/microsd/saucy/bbxm-ubuntu-13.10-2014-02-16-2gb.img.xz

正しくダウンロード出来たか確認します。
$ echo "3cb914ae8fb848139ba7311b980b54c0 bbxm-ubuntu-13.10-2014-02-16-2gb.img.xz" | md5sum -c
bbxm-ubuntu-13.10-2014-02-16-2gb.img.xz: 完了

解凍します。
Cygwin の unxz で簡単に解凍できますが、Explzh for Windows 等でも解凍出来ました。
$ unxz bbxm-ubuntu-13.10-2014-02-16-2gb.img.xz

SD Card スロットの確認

SD Card をスロットに差し込み、そのデバイスノードを確認します。
$ cat /proc/partitions
major minor  #blocks  name

    8     0 250064896 sda
    8     1  13302784 sda1
    8     2    102400 sda2
    8     3 236657664 sda3
    8    16  15110144 sdb
    8    17  15106048 sdb1

今回、16GB の SDカードを用意しましたので、sdb が対象のデバイスノードだとわかります。

イメージの書き込み

Cygwin コンソールを管理者権限で実行します。

以下のように書き込みます。
注意:/dev/sdb はご自分のデバイスと読み替えてください。誤ったデバイスを指定すると、その内容を全消去してしまいます!
$ dd if=./bbxm-ubuntu-13.10-2014-02-16-2gb.img of=/dev/sdb
3481600+0 レコード入力
3481600+0 レコード出力
1782579200 バイト (1.8 GB) コピーされました、 16.0868 秒、 111 MB/秒

Cygwin が無くとも、Windows 上で dd を行うソフトが様々公開されているようなので、それらを使用すれば可能だと思います。
参考
私は使用していないのですが、以下の様なソフトです。
DD for Windows

パーティションサイズを広げる

起動したら、以下のユーザとパスワードでログインします。
User: ubuntu
pass: temppwd

現時点ではSDカードの 2GB しか使用していないので、サイズを広げます。
$ cd /opt/scripts/tools
$ git pull
$ sudo ./grow_partition.sh
$ sudo reboot

パスワード変更

必須ではないですが、セキュリティ的にはパスワードを変更しておいた方が良いでしょう。
$ passwd
Changing password for ubuntu.
(current) UNIX password: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

以上でOSのインストール終了です。

2013/09/17

ミュージックサーバ用に SONY SRS-D5 を買ってみた

BeagleBoard-xM でミュージックサーバを構築したので、新たにスピーカーを買ってみました。

最初は、以前から持っている audio-technica AT-SP92を使いまわそうと思っていたのです。

このスピーカー、小さい割には良い音なので BeagleBoard-xM にはピッタリなのですが、既に別の用途で使ってたので、別のものも検討してみようかなと。
古い AT-SP92

で、検討した結果、SONY SRS-D5を買ってみました。
決め手は、5000円を切る値段とオートパワーオン/オフ機能です。
BeagleBoard-xM がせっかく低消費電力なのに、スピーカーがつきっぱなしというのは残念ですから。

で、買ってみてどうかというと、今のところ、かなり満足しています。
少し大きいのが玉にキズですかね。
音響に関しては素人なので、音質云々は語れないのですが、結構良い音なのではないかと思います。
オートパワーオン/オフ機能もうまく動いています。
サブウーファーがコンポの本体みたい
本物の本体は普段は後ろに隠しておきます

今回はリビングに設置するので、大きめでも良いという結論になって買ってみました。
とはいえ、BeagleBoard-xM と比べるとその大きさが際立ちます。
まー、どうせ本体は見えない所にあるわけですから、別に構わないんですけど。

しかし、MPDは便利です。
家中に設置したら面白いだろうなー。狭い家なんで全く意味ないですけどね…。



ちなみに、他にもオートパワーオン/オフ機能がついたスピーカーを探したのですが、そんなに数は無さそうです。
今回の用途に使えそうなのは、以下くらいでしょうか。
2013/09/15

BeagleBoard-xM 上で MPD を動かし、ミュージックサーバを構築する

我が家では NAS を設置して、その中に音楽ファイルを入れています。
PC間で音楽をシェアして便利に使っているのですが、一つ問題が。

私の持っているノートPCは音がひどいのです。
音楽を聴くのにはとても使えません。
リビングなどで作業する時には、小さなスピーカーも一緒に持って行くのですが、これがとても面倒臭い。

そこで、リビングに MPD (Music Player Daemon) サーバを設置してみることにしました。
MPD はリモートで音楽を再生するためのサーバで、スマホなどから遠隔操作で音楽再生を行うことが出来ます。

しかし、リビングに新しいPCを設置するなんて本末転倒ですリビングで作業するときにはそのPCを使えば良い訳ですから
そんな時こそ、BeagleBoard-xM の出番以前、購入したもの。
新規購入の場合は BeagleBone BlackRaspberry PiCubox 等も候補に上がりそうです。

小さいし、低消費電力なので、MPDサーバにはぴったりと言えます。
5W 以下のようなので、電気代は100円/月以下で抑えられそう。

というわけで、実際にやってみました。
構成の簡略図は以下のような感じ。

NAS に入っている音楽ファイルを、BeagleBoard-xM にネットワークマウントし、それをスピーカーから鳴らすわけです。
音楽の再生・停止や音量のコントロールはスマホ等、同一ネットワーク内にある MPD クライアントから行います。

以降は、BeagleBoard-xM に Ubuntu 13.04 がインストールされていて、 ディスプレイ、キーボード、スピーカーが接続されている状態を前提としています。
2013/09/12

BeagleBoard-xM 上に Ubuntu 環境を構築する

BeagleBoard-xM で MPD サーバを構築しようと思い立ちまして、やってみました。
OS の選択はいくつかあるのですが、今回は扱いやすい Ubuntu 13.04 にしてみました。
参考
http://elinux.org/BeagleBoardUbuntu
Method 1: Download a Complete Pre-Configured Image

以下は、デスクトップマシン(Ubuntu 12.04 LTS)での作業です。
2014/2/22 追記
Raw Image を直接書き込む方法を書きました。
この方法ならば Windows でも大丈夫です。
穀風: BeagleBoard-xM 上に Ubuntu 環境を構築する (Windows 編)

Raw Image を用意

まずは、イメージをダウンロードして解凍。
その後、チェックサムを確認します。
$ wget https://rcn-ee.net/deb/rootfs/raring/ubuntu-13.04-console-armhf-2013-08-24.tar.xz
$ echo "026d8809821c9b6438f1d8ec4991aa58  ubuntu-13.04-console-armhf-2013-08-24.tar.xz" | md5sum -c - 
ubuntu-13.04-console-armhf-2013-08-24.tar.xz: OK
$ tar xJf ubuntu-13.04-console-armhf-2013-08-24.tar.xz

micro SD カードスロットの確認

カードリーダに micro SD card を入れ、以下のコマンドを実行。
$ cd ubuntu-13.04-console-armhf-2013-08-24/
$ sudo ./setup_sdcard.sh --probe-mmc
Are you sure? I Don't see [/dev/idontknow], here is what I do see...

fdisk -l:
Disk /dev/sda: 120.0 GB, 120033041920 bytes
Disk /dev/sdb: 1000.2 GB, 1000203804160 bytes
Disk /dev/sdc: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdd: 1000.2 GB, 1000203804160 bytes
Disk /dev/sde: 3951 MB, 3951034368 bytes
Disk /dev/mapper/isw_ecbcbgbcii_Volume0: 1000.2 GB, 1000201129984 bytes
Disk /dev/mapper/isw_ecbcbgbcii_Volume0p1: 1000.2 GB, 1000199946240 bytes

# 以下略
今回は 4GB の micro SD Card を用意したので、/dev/sde が対象であることがわかります。

イメージの書き込み

以下のコマンドでイメージを micro SD Card に書き込みます。
注意:/dev/sde はご自分のデバイスと読み替えてください。誤ったデバイスを指定すると、その内容を全消去してしまいます!
$ sudo ./setup_sdcard.sh --mmc /dev/sde --uboot beagle_xm --swap_file 512

確認のメッセージが表示されます。
くどいようですが、間違ったデバイスを指定していないことを確認の上、y を入力します。
Are you 100% sure, on selecting [/dev/sde] (y/n)?

書き込みが始まります。
少々、時間がかかります。
以下のようなメッセージが表示されたら終了です。
Finished populating rootfs Partition
-----------------------------
setup_sdcard.sh script complete
-----------------------------
The default user:password for this image:
ubuntu:temppwd
-----------------------------
デフォルトのユーザ名とパスワードが表示されているので覚えておきます。
ユーザ名: ubuntu
パスワード: temppwd

起動

micro SD Card を BeagleBoard-xM に挿入し、電源をつなぎます。
この時、ディスプレイ、キーボード、イーサネットはつないでおいた方がよいです。

ディスプレイに起動画面が表示され、数秒でログイン画面になりました。
先ほどの ubuntu:temppwd でログインします。

パスワード変更

必須ではないですが、セキュリティ的にはパスワードを変更しておいた方が良いでしょう。
$ passwd
Changing password for ubuntu.
(current) UNIX password: 
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

以上でOSのインストール終了です。
2011/11/28

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (4) - SDカードへ書き込み

2011/11/27

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (3) - ビルド

2011/11/26

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (2) - ソースコード取得

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (1) - 前準備 で環境は整ったので、次はソースコードをダウンロードします。
まず、最初にコードをダウンロードしてくるディレクトリを作成します。名前は何でも良いのですが、今回は“mydroid”にしました。
$ cd ~
$ mkdir mydroid
$ cd mydroid

repository を initialize します。今回は、Ice Cream Sandwich を取ってくるため、android-4.0.1_r1 タグを指定しました。
2011/11/27 追記 Ubuntu 11.10 では、android-4.0.1_r1 はコンパイルできないようです。現時点で最新のソースは11.10 にも対応しているようなので、新たなタグが打たれるまでの間は、masterブランチから取ってきてやる必要がありそうです。(参考: ICS full_x86-eng build failure (Ubuntu 11.10 x64)
$ repo init -u https://android.googlesource.com/platform/manifest -b master

ユーザ名とメールアドレスを聞かれるので、入力します。
ソースコードを取得するだけなら、何を入力しても大丈夫のようですが、正確な情報を入れておいた方が良いでしょう。
2011/11/25

Ice Cream Sandwich を BeagleBoard-xM 用にビルドしてみた (1) - 前準備

@ Ubuntu 11.10

大分、放ったらかしになっていた BeagleBoard-xM がかわいそうなので、 Ice Cream Sandwich (ICS) をインストールして遊んであげようかと思い立ちました。
(実は、ICS が動いている端末を買う余裕がないだけ…)

Windows XP (32bit) 上の VMware に Ubuntu (64bit) をインストールしてみた ところなので、一から環境作り直し。
ブログネタとしては丁度良いですな。

というわけで、Initializing a Build Environment を参考に、まずは環境構築から。