Gumstix開発環境構築

この投稿では、Gumstixの基本的な開発環境の構築方法を書きます。

ハードウェア準備

今回は、ハードウェアとして

    • Gumstix Overo Fire Storm COM
    • 拡張IFボードTOBI
    • マイクロSDカード(4GB)

を用いました。

下の写真の左がGumstix本体、右が拡張ボード(TOBIボード)になります。拡張ボードの中央にコネクタが2ヶ所あるので、そこに嵌めこむようにします。

gumstix boardTOBI board

マイク、スピーカ以外の外部IFを接続すると下図のようになります。ただし、HDMIは、Xを出力しない場合には、使用しません。

Xは、見た目の雰囲気がわかるのでいいですが、そこまで軽くはないので、今回は、Xなしのイメージを作ることにします。他にも

USBも一口あり、USBカメラなどを接続して使用することができます。

gumstix with TOBI

開発環境(OpenEmbedded)の準備

Gumstixは、DSPを備えていることが大きな特徴の一つですが、そのDSPに対応したプログラムを開発するためには、DSPのドライバがサポートされているOpenEmbedded環境を利用して、カーネルとルートファイルシステムを構築する必要があります。ここでは、例として、Ubuntu12.04 64bit環境にOpenEmbedded環境を構築する方法を記します。

以下、下記の公式サイトの英語ドキュメントから情報をかいつまんで説明します。

http://gumstix.org/software-development/open-embedded/61-using-the-open-embedded-build-system.html

また、hostpc$ は、開発用ホストPCでの作業を、GX$ はGumstix側での作業を示すものとします。

まずは、ホストマシン側で、以下のパッケージをaptでインストールします。

hostpc$ sudo apt-get install git-core subversion help2man texinfo diffstat libncurses-dev cvs python-dev unzip chrpath ccache texi2html gawk g++

次に、/bin/sh が /bin/dashへのリンクになっていたら、/bin/bashへのリンクに変更します。

hostpc$ sudo ln -sf /bin/bash /bin/sh

そして,gitで開発環境のソース一式を持ってきます。

hostpc$ mkdir -p ~/overo-oe
hostpc$ cd ~/overo-oe
hostpc$ git clone git://gitorious.org/gumstix-oe/mainline.git org.openembedded.dev
hostpc$ cd org.openembedded.dev
hostpc$ git checkout --track -b overo-2011.03 origin/overo-2011.03

次に、ビルドのためのテンプレート群があるので、それをコピーしてbashで読み込むようにします。

hostpc$ cd ~/overo-oe
hostpc$ cp -r org.openembedded.dev/contrib/gumstix/build .
hostpc$ cp ~/.bashrc ~/bashrc.bak
hostpc$ cat ~/overo-oe/build/profile >> ~/.bashrc

OpenEmbedded環境では、クロスビルドを行うためにbitbakeというコマンドを使用しますが、そのbitbakeはaptで入るものでなく、gitで特定のバージョンを持ってくるようにします。

hostpc$ sudo apt-get remove bitbake
hostpc$  cd ~/overo-oe
hostpc$ git clone git://git.openembedded.org/bitbake bitbake
hostpc$ cd bitbake
hostpc$ git checkout 1.12.0

ここまで来たら、以下の手順を行うことで、ルートファイルシステムのイメージを作ることができます。

hostpc$ cd ~/overo-oe/
hostpc$ source ~/.bashrc
hostpc$ bitbake omap3-console-image

ちなみに、マルチコアな環境であれば、~/overo-oe/build/conf の site.conf にマルチコアコンパイルの設定をするとmakeが速くなります。体感では1/3程度になります。

PARALLEL_MAKE = "-j 4"
BB_NUMBER_THREADS = "4"

をそれぞれアンコメントし、PARALLEL_MAKEの方はCPU数+1の数字にすると良いです。

【トラブルシューティング】

◯OpenSSLのコンパイルが失敗する

ホストPCが64bitの場合OpenSSLのコンパイルが失敗することがあります。その場合、以下のようにしてパッチを戻す作業を行います。

hostpc$ patch -R ~/overo-oe/tmp/work/x86_64-linux/openssl-native-1.0.0d-r14.0/openssl-1.0.0d/Makefile.shared ~/overo-oe/tmp/work/x86_64-linux/openssl-native-1.0.0d-r14.0/openssl-1.0.0d/patches/libdeps-first.patch

この後に再度bitbake omap3-console-imageを行えば通るはずです。

◯pango_1.24.4.bb failed となる

なぜか.hファイルが足りないようなので、下記のようにします。

hostpc$ bitbake -c clean pango
hostpc$ bitbake pango
hostpc$ bitbake omap3-console-image

とするか、

hostpc$ bitbake -c clean cairo-native
hostpc$ bitbake -c clean pango-native
hostpc$ bitbake cairo-native
hostpc$ bitbake pango-native
hostpc$ bitbake omap3-console-image

とすると良いようです。何度か試すと通ることもあります。

◯linux-omap3_git.bb failed が出る

リンクが死んでるらしいのでリンクの差し替えを行います。

…/org.openembedded.dev/recipes/linux/linux-omap3_git.bb

を開いて、

git://www.sakoman.com/git/linux-omap-2.6.git を
git://www.sakoman.com/git/linux.git に変更します。

◯rt73-firmware_1.8.bb failed が出る

RT71W_Firmware_V1.8.zip がおかしい(ハッシュが違う)のでファイルを直接ダウンロードして ~/overo-oe/sources に上書きをします。

OpemEmbedded環境によるカーネルイメージの構築

次に,http://wiki.gumstix.org/index.php?title=Kernel_Reconfiguration

を参照して,カーネルをコンパイルします。

hostpc$ bitbake -c clean virtual/kernel
hostpc$ bitbake -c menuconfig virtual/kernel

でmenuconfigできます。menuconfigが無反応になってしまう場合には、bitbake -c menuconfig を実行した端末とは違う端末で

hostpc$ screen –r

を実行すると新たなウィンドウに選択肢が表示されるようになります。実際のカーネルのコンパイルは以下のコマンドで行います。

hostpc$ bitbake virtual/kernel

 

SDカードへの書き出しとカーネルパラメータの設定

今までのところで、カーネルとルートファイルシステムはできましたが、Gumstixを起動するには更に、対応するMLOとu-boot.binが必要です。そのコンパイルもbitbakeで行うことができますが、ここでは、

 http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/MLO

http://cumulus.gumstix.org/images/angstrom/factory/2011-03-25-1619/u-boot.bin

にあるAngstrom用のprebuiltバージョンのものを利用することにします。

それ以外は、

~/overo-oe/tmp/deploy/glibc/images/overo/ にある

Angstrom-omap3-console-image-glibc-ipk-2011.03-overo.rootfs.tar.bz2

uImage-3.2-r103-overo.bin

modules-3.2-r103-overo.tgz

を用います。上から順に、ルートファイルシステム、カーネルイメージ、カーネルモジュールに対応しています。

次に、以下の要領で、SDカードのパーティションを切ります。マイクロSDカードのパーティション作成は、

http://www.gumstix.org/create-a-bootable-microsd-card.html

を参考にします。

まずは、microSDをSDカードアダプタに指して、Ubuntuマシンで認識できるようにします。USBカードリーダにSDカードアダプタにさしたものを入れて、Ubuntu側で認識させます。

hostpc$ sudo tail -f /var/log/syslog

でどこに割り当てられたかを確認します。もし,既にマウントされているようであれば,unmountしておきます。今回は/dev/mmcblk0に割り当てられたことがわかったので、次のようにしてcfdiskを起動します。

hostpc$ sudo cfdisk /dev/mmcblk0

ここでで,mmcblk0p1 をBootable, Primary, W95 FAT32, 64MBで作り,mmcblk0p2は Primary, Linuxで残りとして,Writeします。

次に,各々のパーティションをフォーマットします。

hostpc$ sudo mkfs.vfat -F 32 /dev/mmcblk0p1 -n boot
hostpc$ sudo mke2fs -j -L rootfs /dev/mmcblk0p2

最後に,マウントポイントを作り,マウントした後、マイクロSDへのデータ書き込みを行います。

hostpc$ sudo mkdir /media/boot
hostpc$ sudo mkdir /media/rootfs
hostpc$ sudo mount -t vfat /dev/ mmcblk0p1 /media/boot
hostpc$ sudo mount -t ext3 /dev/mmcblk0p2 /media/rootfs

この時、/media/bootには,MLO, u-boot.bin, uImageを,/media/rootfsには,ルートファイルシステムをコピーします。ルートファイルシステムは下記のように展開します。

hostpc$ sudo tar xvaf tmp/deploy/glibc/images/overo/Angstrom-omap3-console-image-glibc-ipk-2011.03-overo.rootfs.tar.bz2 -C /media/rootfs/

続いて、カーネルイメージとモジュールをそれぞれ、SDカードにコピーします。

hostpc$ sudo cp tmp/deploy/glibc/images/overo/uImage-3.2-r103-overo.bin  /media/boot/uImage
hostpc$ sudo cp tmp/deploy/glibc/images/overo/uImage-3.2-r103-overo.bin  /media/rootfs/boot/uImage
hostpc$ cd /media/rootfs/
hostpc$ sudo tar xvzf /home/username/overo-oe/tmp/deploy/glibc/images/overo/modules-3.2-r103-overo.tgz

SDカードの内容を書き換える際には,今動いているもののコピーをとるのが良い習慣です。

hostpc$ sudo dd if=/dev/sdc bs=256M | gzip -c > backupimg.gz

で、バックアップコピーを残すことができます。戻すときには,

hostpc$ gunzip –c backupimg.gz | sudo dd of=/dev/sdc bs=256M

とすれば戻せます。

これで,全てSDカードの準備は完了したので、/media/boot, /media/rootfsをumountして、マイクロSDをGumstixにさして、電源投入します。起動確認はまずはシリアルコンソールで行います。ホストマシンがUbuntuの場合、cuというコマンドがあるので、それを利用します。なければ、sudo apt-get install cuをおこなってcuをインストールします。コマンドラインからは、

hostpc$ sudo cu -s 115200 -l /dev/ttyUSB0

で接続を行うことができます。

もし、

cu: open (/dev/ttyUSB0): Permission denied
cu: /dev/ttyUSB0: Line in use

と表示されたら、権限を与えるために以下をおこなってから再度接続を行います。

hostpc$ sudo chmod 666 /dev/ttyUSB0

或いは、dialoutグループにローカルユーザをaddすると、sudoなしでも接続できるようになります。Windowsから接続する場合には、Teraterm等のターミナルソフトで115200 8Nでシリアル設定をして開きます。バスパワー駆動はできないため,電源を繋いでおくことが必要です。

これで、正しいイメージが読み込まれれば、無事起動して、Loginと出てくるので、ユーザはroot、パスワードなしでログインすることができます。

以上で基本的な開発環境は整いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>