以前のコラムで第1世代CuBox上のMuBoxを検証した。
ミュージックサーバーにしたいという問い合わせや質問が多いので、再度、CuBox-i上での検証もします。Voyageのサイト http://store.voyage.hk/ でもCuBox-iのSDカードを販売し始めたとのことですが、ここはちょっとだけLinux操作を自分でやってみてからにしても遅くはない。
Linuxの基本だけでも触れていると楽しいものです。ここは是非チャレンジしてもらいたい。ここで検証する方法は基本的に公式サイトの通りです。
http://mubox.voyage.hk/cubox-i
MuBox自体は同じなので、機能には言及せず今回はインストールだけの検証記事だけとします。
自分で試みてうまくいかない、というほとんどの場合が、起動しないというものです。ほとんどはU-Bootの問題で、普通のPCとCuBoxのようなマシンとの違いの最初の一つです。これを含め、ちょっと基礎に立ち返ってみましょう。
- 起動の仕方
U-Bootという仕組みがあり、CPUの内部ROMにあるBootローダーがU-Bootを読み込み、その読み込まれたローダーからさらにシステムが読み込まれる仕組みになっています。U-BootがSDに書き込まれていても、通常のファイルビューワーからは見ることができません。そのために気がつかない場合が多いのですが、起動する仕組みだと分かってしまえば、何だそんなものかということだ。
- ARMアーキテクチャー
通常のPCはインテルのX86アーキテクチャーが一般的です。CuBoxなどは熱の発生が少ないかわりにCPU処理能力が低いARMアーキテクチャーのCPUを使います。モバイル(携帯・タブレット)やルーター装置、ネット対応ディスク、ビデオ装置などの組込み用途にも広く使われています。
例えば同じUBUNTUが走っていても、PC上のUBUNTUのソフトがARMアーキテクチャーCPU上で同じに走るわけではない。特にドライバソフトなどは大きな違いがあるので、ソースレベルでビルドしなおせば動くというわけにもいかない。実際、一昔前ではPC上にインストールしたLinuxではPCのハードウェアが使いきれない場合が当たり前でした。(例えばWiFiやBluetooth,USB機器などは動かないのがむしろ当たり前だった)次世代の頃にはARMマシンでも同様にドライバソフトが豊富になるといいですね。
- OSとアプリケーションの関係
通常のPCはWindows7とかWindows8などが載っており、アプリケーションソフトがその上で動作する仕組みとなっている。アプリケーションごとにOSを入替えたりはしません。CuBoxでもOSとアプリケーションがある仕組みには違いがない。しかし、組込みシステムでは、組み込むライブラリを目的に応じて必要最小限にまで削ぎ落とすのが当然です。しかも1つの目的に使われるわけなので、OS部分とアプリソフトの組み合わせで1つのアプリソフトのようになっていることが多い。ちょうどMuBox、GeeXboXなどがそのような例です。
以上のような違いを受け入れた上でCuBox-iへのインストールを検証していきましょう。以前の第1世代CuBoxでは、USBメモリにアプリソフトのローダーをセットして、ネットワークからアプリを直接SDに書き込む方法をとっていた。しかしながら、CuBox-iからはその方式ではなく、PCホストを使ってSDカードに書き込みをして、CuBox-i本体に挿し込んで使う方式となった。従って、SDの作成には母艦となるLinuxPCが必要となる。(ないという人もWindows7にしなかったXPマシンをLinuxとして有効活用することをおすすめしたい。
ここから先はLinuxPCの方で作業を行うので、どのLinuxを使うのかでコマンドなどが微妙に異なってくる。また、同じディストリビューションであっても、ハードウェアの構成などでコマンドにたいする出力も異なってくるので、この手の記事を読む際には注意されたい。
各ステップの詳細の前に、このあとの作業の概要から説明します。
インストール方法の概要
SDカードへのインストールをする場合、イメージと呼ばれるファイルをSDへ書き込む方法と、フォーマットされたSD上に一般のPCのディスクへのインストールと同様にファイルを転送、書き込んでインストールする方法の2種類があります。
イメージを使う方法は復元が容易なのでよく使われる方法です。一般のPCでも、バックアップのためにハードディスク全体をイメージファイルにして保存します。この方法が有効なのは同じハードウェアを前提として同じものを複製するときです。2番目の方法は一般のPCなどと同様です。この方法は手間がかかります。ファイルを転送するだけでなくSDをフォーマットして、ブート環境を整える必要もあります。
MuBoxの場合には、この2番目の方法となります。ただし、インストールの手間を省くために手順がスクリプトのかたちで用意されています。
手順としては、最初にこの「インストールスクリプト」をダウンロードしてくる。いろいろな条件の違いなどを吸収してちゃんとインストールしてくれるありがたいシェルスクリプトです。これがうまくいけば実に簡単で、作業が物足りないくらいです。
もし、何か特別な事情があってエラーで止まってしまったり、うまくいかない場合は、マニュアルで実行することになる。その場合には
SDをカードのパーティションとフォーマットを行う。
その上にrootファイルシステムをダウンロードしてきて書き込む
カーネルとモジュールをダウンロードしてきて書き込む。
そして次にブートローダーをダウンロードしてきてU-Bootも書き込む
最後にシリアルポート設定やセッティングをする。
これでSDカードが出来上がります。
それでは、最後に元ネタページに従ってトレースしてみます。
ちなみにCuBoxi1,i4Proで確認されていますが、i2では確認されていません。
LinuxPCの次にSDをカードを準備します。CuBox-i4Proをお使いの場合には特に注意が必要ですが、スピードの早いclass10を選んでいただきたい。ブログなどには安いSDでも動いたというような勇猛な記事を掲載してあっても、動作保証はありません。
SDはLinucPCに挿入しておきます。
PCにログインしたあと、rootとしてログインします。(コマンドで sudo xxxxとしたのではうまくいかないことがあります。su(sudo su)としてパスワードを入れてrootとなってください)
# ./install-mubox-cubox-i.sh /dev/sdX
ここで、sdXとは、SDカードのマウントポイントを指します。自分のマシンで挿したSDがどのように認識されているのかを確認するには、#cat /proc/partitionsするとか、# mountを実行して確認できます。USBに何もなければ通常はsdbになっていることが多いです。
.shはシェルスクリプトファイルを意味し、これを実行することがスクリプトを実行するということになります。スクリプトがうまく動けば、とても簡単にすみます。
あとは、CuBox-iにSDをさせばそれで終了です。
マニュアルでプロセスを行うとすると、次のようになります。一度自分でやってみるとなるほど、と理解できることがあります。
最初はSDカードのパーティションとフォーマットです。
# fdisk -u /dev/sdX |
プロンプトが表示されたら、o を入力します、ドライブの現在のパーティションを除くコマンドです。
続いてnを入力、新しいパーティションを作るコマンドです。次にprimary のp そして数字の1を入力、これはパーティション1つにするという意味です。続いて最初のセクタに2048とし、最終セクタの入力となりますが、デフォルトのままでよいのでただ単にreturnを押します。
最後に書き込みを実行するためにwを入力します。
次にext4のフォーマットをするのですが、volume labelの値をいれ、journalモードをdisableにします。
# mkfs.ext4 /dev/sdX1 # tune2fs -i 0 -c 0 /dev/sdX1 -L voyage-mubox -O ^has_journal |
ディレクトリを新たに作ってそこにSDカードを割当てます。そのディレクトリへroot file systemをダウンロードしてきて解凍をしたものを書き込みます
# mkdir /tmp/cf # mount /dev/sdX1 /tmp/cf # curl http://mirror.voyage.hk/download/voyage-mubox/voyage-mubox-current.tar.xz | tar --numeric-owner -Jxf - -C /tmp/cf |
同様にカーネルとモジュールをダウンロードして書き込みます
# curl http://mirror.voyage.hk/download/voyage-mubox/cubox-i/kernel-cubox-i-latest.tar.xz | tar --numeric-owner -Jxf - -C /tmp/cf #sync |
さらにブートローダーをダウンロードしてコピーして書き込みます。
dd の2行がU-Bootとなっており、これがないとブートシーケンスに入れないのでCuBox-iのフロントのLEDが光らない状態となってしまいます。
# curl http://mirror.voyage.hk/download/voyage-mubox/cubox-i/boot-cubox-i.tar.xz | tar --numeric-owner -Jxf - -C /tmp/cf/boot # sync # dd if=/tmp/cf/boot/SPL of=/dev/sdX bs=512 seek=2 # dd if=/tmp/cf/boot/u-boot.img of=/dev/sdX bs=1K seek=42 # sync |
最後に以下の設定を行います。
# sed -i -e "s/ttyS0/ttymxc0/" /tmp/cf/etc/inittab # sed -i -e "/^options.*snd-usb-audio/s/^/#/" /tmp/cf/etc/modprobe.d/alsa-base.conf # ln -sf boot/zImage /tmp/cf/zImage # ln -sf boot/uEnv.txt /tmp/cf/uEnv.txt # sync # umount /tmp/cf # sync |
以上で終了です。
SDカードを抜いてCuBox-i本体に挿して起動を確認してください。
各コマンドの意味はLinuxのマニュアルを参照ください。オプション設定などが実践的にこのようにつかわれているのが確認できて勉強になると思います。
コメントをお書きください