2012年12月29日

BeagleBoard-xMでAngstrom Linuxを動かす

前記事で紹介したBeagleBoard-xMはQt移植・開発のために買ったボードなので、さっそくこのボードでQtを動作させるまでの手順を記事に書きたいところだが、その前にLinuxカーネルを移植することを先にやならいといけない。QtやwxWidgetsなどのUIフレームワークやGStreamerやFFmpegなどのミドルウェアもすべてLinux上で動作するので、Linuxカーネルの移植はBeagleBoard-xMのようなボードで組込みシステムを構築する際の必須条件だ。さすがにこれについての説明を省略する訳にはいかないので、先にBeagleBoard-xMへLinuxカーネルを移植する方法について記事を書く(Linuxカーネル移植についての説明はスキップしても良いかなぁいう気もしたんだけど、元組込みプログラマのプライドがどうしてもそれを許さなかった)

BeagleBoard-xMの開発元であるBeagleBoard.orgプロジェクト紹介ページに掲載されているとおり、多くの組込みLinuxディストリビューションやモバイルOSがこのボードへ移植されているが、この中でもっとも多く使われているのはやはりUbuntuだと思うが、それと同じかあるいは二番目位に使われているのがÅngström Distributionだ。これはOpenZaurus(Sharp Zaurus向けのオープンソースOSを開発するプロジェクト)から派生したプロジェクトで、PDA、ハンドヘルドデバイスなどの機器に特化した組込みLinuxディストリビューションを開発することを目的としている。日本ではAngstromについて知っている人は少ないかもしれないが、対応デバイスやボードの種類も多く、海外では結構使われているメジャーな組込みLinuxディストリビューションの一つだ。私がAngstromについて知ったのは、Archosというフランスの家電メーカーのAndroidタブレットを入手したのがきっかけで、これはBeagleBoardについて調べ始めるより前にあたる。ArchosのタブレットにAngstromが移植されていることを知って、「へぇー、こういうものがあるのかぁ。ちょっと動かしてみたいなぁ」と思ったことを記憶している(手持ちのAndroidタブレットを処分中だが、Angstrom移植のためにArchos製タブレットだけは残すつもり)。BeagleBoard-xMを入手したことにより最近またAngstromに調べているが、結構面白そうなディストリビューションなので、Qt移植・開発のベースOSとして使うだけじゃなく、いずれは本格的に研究するテーマに加えたいと思っている。

●オンラインビルダーを使ってAngstromのシステムイメージを作成する

Linuxカーネルの移植と言うと、難易度の高い作業のように聞こえかもしれないが(BSPが用意されていない段階から始めると、実際に難易度の高い作業なんだけど)、Angstromの場合、 Linuxカーネルや追加パッケージをオンラインでビルドできるサイトが用意されているので、このサイトを利用すれば目的は簡単に達成できてしまう。

まず最初に、WebブラウザでAngstromのこちらのサイトにアクセスしよう。すると、下のようなページが開く。これがAngstromのオンラインビルダー・ページだ。
Angstrom_Online_Builder_Page-Scrnshot01-1138x1084
このページの使い方は全然難しくない。初めに、画面の最上段にある"Select the machine you want to build your rootfs image for:"というプルダウンメニューから「beagleboard」という項目を選択する。これが、ビルド対象となるターゲットボードの種類に相当する。今回のターゲットボードはBeagleBoard-xMだが、BeagleBoardとBeagleBoard-xMのカーネルやパッケージはほとんど共通化されているので、ターゲットボードの種類は「beagleboard」で問題ない。
Angstrom_Online_Builder_Page-Scrnshot04-1009x1098
二段目の"Choose your image name."というエディットボックスには、ページを開いた時点でランダムに生成された文字列が自動的に入るようになっている。この文字列がビルド後に生成されるファイル名に相当するので、自動生成された名前をそのまま使うか、あるいは任意の名前を入力する。

その下の"Choose the complexity of the options below."というプルダウンメニューはrootfsイメージのバージョンやBase Systemの種類などを変更するために用意されており、このメニューから「advanced」という項目を選択すると、これらの項目を設定することができるようになっている。これらについて特にこだわりを持っていければ、取りあえず、ここは「simple」のままで良いだろう。

さらに、その下の"User environment selection:"というプルダウンメニューは、その名のとおり、UI環境の種類を選択するためのもの。取りあえず、カーネルの動作確認だけが目的なら、このメニューは「Console only」を選択すれば良い。メニューの説明に書かれているとおり、他にX11やOPIE(Open Palmtop Integrated Environment:PDAなどのLCD搭載機器向けのオープンソースのQt EmbeddedベースGUI)も用意されている。

上のスクリーンショットの選択状態だとカーネルとBase Systemだけが含まれた最小限のシンプルなコンソールベース・システムが出来上がるが、最下段の"Additional packages selection:"に存在するカテゴリ内の項目を選択すれば、色々な種類のパッケージをあらかじめシステムに組み込むことが可能だ。Angstromにはopkgというパッケージマネージャが含まれていて、これを使うと、Ubuntuのaptみたいにオンラインでパッケージを追加することもできる。そのため、オンラインビルダーで作成するシステムはできるだけシンプルな構成にしておいて、必要に応じて、後からパッケージを追加していくという方法もある。コンソールだけではあまりにも味気ないと思ったので、今回は、"Platform specific packages:"というカテゴリから「Beagleboard validation GNOME image」という項目を追加してみた。
Angstrom_Online_Builder_Page-Scrnshot06-1009x1998
オンラインビルダーのすべての項目の設定が済んだら、この画面の一番下に存在する「Build me!」というボタンを押す。そうすると、下のような画面にページが切り換わり、システムイメージのビルドが始まる。
Angstrom_Online_Builder_Page-Scrnshot07-1009x969
そして、ビルドのすべての工程が終了すると、下のような画面になる。
Angstrom_Online_Builder_Page-Scrnshot09-1009-1113
カーネルとBase Systemのみのコンソールベース・システムだと5分程度でビルドが終了するが、今回は追加パッケージがあるので20分位かかった。追加パッケージの数が多ければ、当然その分ビルドに時間がかかる。上のビルド終了画面の一番下に表示されている「*.tar.gz」というファイルに、最終的に生成されたシステムのイメージが格納されている。このファイル名のリンクをクリックすれば、当該ファイルをダウンロードすることができる。

●AngstromのブートSDを作成する

ここまででAngstrom Linuxのシステムイメージが作成できたので、続いて、このシステムイメージからBeagleBoard-xM用のブートSDを作成する手順を説明しよう。以降では、Angstromのオンラインビルダー・ページで作成したファイルの名前がangstrom-image-beagleboard.tar.gzであると仮定して説明する。

まずは、容量4GB以上のMicroSDを用意してこれを初期化するが、BeagleBoard-xM用ブートSDのフォーマットには一定のルールがある。最初のパーティションがFAT32で、二番目以降のパッーティションはext3でなければならないというのがそれだ。fdiskコマンドを使って手動でSDカード上にパーティションを作成することも可能だが、ここではスクリプトを使おう。下のサイトからmkcard.txtというファイルを入手する。

 Beagleboard demo files

上の準備が済んだら、SDを挿入したUSBカードリーダーをPCに接続し、Terminalを開いて、以下のコマンドを実行しよう。
 $ sudo umount /dev/sdb1
$ chmod +x mkcard.txt
$ sudo ./mkcard.txt /dev/sdb
$ sync

※最初のumountコマンドは、すでにパーティションが存在するSDカードを挿入した場合に必要となる。バーティションが存在しないSDではこれは不要。
/dev/sdb, /dev/sdb1がUSBカードリーダーとSD上の既存バーティションのデバイスファイルだが、PCのディスク構成によってこれは変わることがある。

初期化が済んだら、一旦SDカードを取り外して再度PCに挿入する。Ubuntuの場合、挿入されたSDのパーティションを認識して自動的にマウントするようになっているので、上記の手順で初期化したSDのパーティションは以下のマウントポイントにマウントされるはずだ。

 FAT32 → /media/boot
 ext3  → /media/Angstrom

SDのパーティションがマウントされているかどうかは、次のコマンドにより確認できる。
 $ df -h

続いて、マウント済みのSDへAngstromのシステムイメージを書き込む訳だが、これは以下のコマンドで行う。
 $ sudo tar -xvz -C /media/Angstrom -f angstrom-image-beagleboard.tar.gz
$ sync
$ cd /media/Angstrom
$ cd boot
$ sudo cp MLO /media/boot
$ sudo cp u-boot.bin /media/boot
$ sudo cp uImage /media/boot
$ sync

※FAT32パーティションへコピーしているMLO, u-boot. uImageの3つがブートに必要なファイルで、これらのファイルのうちMLOは一番最初に書き込まなればならない。

ここまでの手順によって一応ブートSDは出来上がりだが、BeagleBoard(とBeagleBoard-xM)Rev Cに限って追加でやらないといけない作業がある。SD上のFAT32パーティションへuEnv.txtというファイルを追加することがそれ。エディタを使って、以下のような内容を含んだuEnv.txtというファイルを作成して、SDのFAT32パーティションへコピーする。
 $ sudo vi uEnv.txt

dvimode="hd720 omapfb.vram=0:8M,1:4M,2:4M"
vram=16M
optargs="consoleblank=0"
console="tty0 console=ttyO2,115200n8"

$ sudo cp uEnv.txt /media/boot
$ sync

uEnv.txtの書き込みが済んだら、SDのパーティションをすべてアンマウントした上で、PCから取り外す。
 $ cd
$ sudo umount /media/boot
$ sudo umount /media/Angstrom

以上で、BeagleBoard-xM用のブートSDは完成だ。

●Angstromの動作確認と環境設定

Angstrom LinuxのブートSDが作成できたので、さっそくこのSDでBeagleBoard-xMが起動・動作することを確認してみよう。

BeagleBoard-xMのMicroSDスロットにブートSDを挿入し、USBキーボード、USBマウス、LANケーブルを接続する。さらに、HDMIケーブル(または、HDMI−DVI-D変換ケーブル)でモニタを接続した上で、ACアダプターにより電源を投入すると、Angstrom Linuxのブートシーケンスが始まる。

最初の起動時はブートシーケンスが終了するのに20〜30分位かかる。ブート中にカーネルとGnomeモジュールの構成設定処理が自動的に実行されるからだ。すべてのブートシーケンスが終了するまで気長に待つと、いきなり画面が暗転し、この状態が1分位続いた後、Auto Login画面が現れ、最後に下のスクリーンショットのようなGnomeのデスクトップ画面が表示される。
BB_xM-Angstrom_Gnome_Desktop-Scrnshot01-1280x720
めでたくシステムが起動したら、しばらく感慨に浸ろう。移植を試みたOSが初めて起動した瞬間こそ組込み開発の醍醐味なので、この瞬間をじっくりと味わないともったいない(なんてことを言っているようじゃ、組込み分野からの離脱はほど遠い。OSが動き始めた瞬間なんかに大した意味はなく、アプリを含めたシステム全体が仕様どおりかつ高パフォーマンスで動くことの方がずっと重要な課題。組込みプログラマはもっとアプリ側へ関心を向けるべきなんだ)。これでAngstrom Linuxの移植は完了した訳だが、このブートSDのシステム環境を継続して使うつもりなら、起動後にネットワークとタイムゾーンの設定をやっておいた方が良い。

内蔵Ethernetのデバイス名はusb0で認識され、デフォルトのネットワーク構成は、DHCPによりIPアドレスなどの情報を自動的に取得するように設定されている。DHCPからIPアドレスが正常に取得できているかどうかは、「Applications > Accessories > Terminal」メニューでターミナル画面を開いて、次のコマンドを実行すると確認できる。
 # ifconfig

ネットワーク構成をスタティックIPに変更する場合は、/etc/network/interfacesを以下のように編集する。
 #iface usb0 inet dhcp
iface usb0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

さらに、DNSサーバーのIPアドレスを/etc/resolv.confに追加する(ファイルが存在しない場合は、新しく作成すること)。
 nameserver 192.168.1.10

タイムゾーンの設定は、以下のコマンドを実行すれば良い。
 # cd /etc
# mv localtime localtime.orig
# ln -s /usr/share/zoneinfo/Asia/Tokyo localtime

いずれも変更を行ったら、ターミナル画面からrebootコマンドを実行するか、あるいは、「System > Shut Down...」メニューの画面で「Restart」ボタンを押してシステムを再起動する。設定内容は、再起動後にシステムに反映される。

以上で基本的なシステム設定は終わりだが、最後に、インストール済みパッケージの更新をやっておいた方が良いだろう。前述のとおり、Angstrom Linuxにはopkgというパッケージマネージャーが存在し、デフォルトでこれがインストールされている。このopkgはUbuntuのaptと同じような機能を持っており、オンラインでパッケージの追加、削除、検索ができるので非常に便利なものだ。後々必ずopkgコマンドを使うことになるので、一度は以下のコマンドを実行しておくべきだ。
 # opkg update
# opkg upgrade

上の2つのコマンドは、それぞれパッケージ管理情報の更新と既存パッケージのアップデートを行なっている。ただし、これらのコマンドはすでにインターネット回線に接続されていることを前提としているので、先に上記のネットワーク構成の設定を終わらせておく必要がある。

結構長くなってしまったが、この記事は以上で終わりだ。Linuxベースの組込みシステムを構築する場合、カーネルの移植が最初の大きなハードルとなることが多いが、Angstromでは、オンラインビルダーを利用すればこのハードルがかなり低くなる。すでにAngstromが移植済みの対応ボードに限定されるが、Linuxカーネルは手っ取り早くを動かしてしまって、本来の目的であるミドルウェア移植やアプリケーション開発などにすぐに着手できるメリットは大きいじゅないだろうか。プロの組込みLinuxエンジニアから見ると、あまりにも手抜きのカーネル移植方法だと思われるかもしれないが(私自身自分でそう思えてならないが・・・)、Linuxベースの組込みシステムを開発する場合、カーネルの移植自体が最終目的になるケースは少ない。ほとんどの組込みプロジェクトでは、アプリを含めたシステム全体をいかに少ない工数で開発するかということが本当の課題であるはずだ。実際にやってみた感想になるが、Angstromのオンラインビルダーのようなお手軽な手段が用意されているなら、こういうものを利用してカーネルの移植はさっさと終わらせてしまうのも、いまどきのカジュアルなやり方として有りかもしれないと思えた。

別の記事で紹介するつもりだが、この後さらにBeagleBoard-xMへのQtの移植も試みたが、その際にopkgコマンドで簡単にパッケージを追加できることがすごく役に立った。カスタムボードの場合は当然オンラインビルダーを使えないので、AngstromのビルドフレームワークであるOpenEmbeddedのツール群を使ってLinuxカーネルを移植しなければならないが、一旦カーネルの移植が終われば、対応ボードと同じように、opkgコマンドを使ってオンラインでパッケージを追加インストールすることができるんじゃないかと想像している(ただし、CPUコアが既存の対応ボードと同じであることが条件となるはず)。本当にこれが可能なのか、いつか他のボードへAngstrom Linuxを移植することにトライしてみたいと思っている。
タグ:BeagleBoard
posted by とみやん at 12:09| Comment(0) | TrackBack(0) | Embedded Linux > その他
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/61108732

この記事へのトラックバック