メモ

調べたり思いついたりしたことをメモします

Raspberry Pi (ラズベリーパイ) でFirefoxOSを動かしてみました その2

RaspberryPiでのFirefoxOS第二弾です。試しに前回とは別な手順もやってみました。

今回はこちらの手順になります。
http://www.philipp-wagner.com/ffos-for-rpi/manual/index.html

手順は書いてあるそのままですが、すこし日本語化しておきます。

環境の準備

私の作業環境は ubuntu12.04 64bit版です。
Yoctoプロジェクトの一式をビルドできるようにします。必要な環境は openembedded と poky ですのでこれらの必要とするものを入れておきます。

https://www.yoctoproject.org/docs/current/yocto-project-qs/yocto-project-qs.html
http://www.openembedded.org/wiki/Getting_started#Ubuntu

上記2カ所が参考URLです。どちらにも同じような事が書いてありますとおり下記インストールを実行します。

sudo apt-get install gawk wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev xterm

git clone

Yoctoプロジェクトのpocyと、メタファイル一式をもらってきます。作業用ディレクトリをつくってその中で下記のようにします。

$ git clone git://git.yoctoproject.org/poky
$ cd poky
$ git clone git://git.yoctoproject.org/meta-raspberrypi
$ git clone git://git.openembedded.org/meta-openembedded
$ git clone git://github.com/imphil/meta-b2g.git

ビルドディレクトリ作成

pokyディレクトリの直下に「oe-init-build-env」というファイルが出来ているはずです。これはAndroidで言うところの「envsetup.sh」みたいなもので、各種環境変数をセットしてくれるスクリプトです。

. ./oe-init-build-env rpi-build

こうやって実行します。rpi-buildという名前は任意の名前です。この名前でpokyの直下にビルドディレクトリが作成されます。

bbplayers.confの書き換え

rpi-build/conf/bbplayers.conf というファイルが出来上がっているはずです。これを今回の構成にあわせて書き換えます。
参考リンク先と同じですが記載します。BBLAYERSの箇所にmeta-raspberrypi~meta-b2g の5行を追加です。

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/USERNAME/src/poky/meta \
  /home/USERNAME/src/poky/meta-yocto \
  /home/USERNAME/src/poky/meta-yocto-bsp \
  /home/USERNAME/src/poky/meta-raspberrypi \
  /home/USERNAME/src/poky/meta-openembedded/meta-oe \
  /home/USERNAME/src/poky/meta-openembedded/meta-networking \
  /home/USERNAME/src/poky/meta-openembedded/meta-gnome \
  /home/USERNAME/src/poky/meta-b2g \
  "
BBLAYERS_NON_REMOVABLE ?= " \
  /home/USERNAME/src/poky/meta \
  /home/USERNAME/src/poky/meta-yocto \
  "

local.confの書き換え

こちらはビルド環境に依存した設定です。修正は4カ所あります。

  • BB_NUMBER_THREADS
    使っている「CPUコア数×2」を設定すると良いようです。
  • PARALLEL_MAKE
    使っている「CPUコア数×2」を設定すると良いようです。
  • MACHINE
    「MACHINE ?= "raspberrypi"」 を「MACHINE ??= "qemux86"」の前に行追加
  • BBMASK、DISABLE_OVERSCAN、GPU_MEM それぞれ下記の例のように最下行へ追加
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"

MACHINE ?= "raspberrypi"
MACHINE ??= "qemux86"

DISTRO ?= "poky"

PACKAGE_CLASSES ?= "package_rpm"

EXTRA_IMAGE_FEATURES = "debug-tweaks debug-tools nfs-server"

USER_CLASSES ?= "buildstats image-mklibs image-prelink"

PATCHRESOLVE = "noop"

BB_DISKMON_DIRS = "\
    STOPTASKS,${TMPDIR},1G,100K \
    STOPTASKS,${DL_DIR},1G,100K \
    STOPTASKS,${SSTATE_DIR},1G,100K \
    ABORT,${TMPDIR},100M,1K \
    ABORT,${DL_DIR},100M,1K \
    ABORT,${SSTATE_DIR},100M,1K" 

CONF_VERSION = "1"

BBMASK = "meta-raspberrypi/recipes-multimedia/libav|meta-raspberrypi/recipes-core/systemd"
DISABLE_OVERSCAN = "1"
GPU_MEM = "64"

※ BB_NUMBER_THREADS と PARALLEL_MAKE の説明に関して、参考にしたサイトではCPUコア数を指定するのが良いとされていますが、YoctoのQuickStartの説明にはCPUコア数の2倍とされていました。上記ではYoctoのQuickStartに準じて記載しました。

ビルド

pocy直下で下記を実行するとソースの取り込みとビルドが動きます。かなり時間が掛かります。

. ./oe-init-build-env rpi-build
bitbake -v rpi-b2g-image

私の環境ではいくつかのエラーが出ていました。足りないモジュールがあった模様で・・・。 追加でapt-getしました。

sudo apt-get install libxml-parser-perl libsqlite3-dev python-pysqlite2

あといくつかエラーメッセージに請われるままに入れたかも!?しれません。
ですがそれでも最後まで消えなかったエラー「ntp-utilsが無い」というのだけはうまく解決できませんでしたので rpi-b2g-image.bb から ntp-utils を消してしまいました。
特に問題動作はしていないようです。

最後までビルドが通れば poky/rpi-build/tmp/deploy/images/rpi-b2g-image-raspberrypi.rpi-sdimg というファイルができあがるはずです。

書き込み

Raspberry PiなのでSDカードです。できあがったイメージを dd コマンドでSDに入れましょう。 下記で/dev/sdb としたのは私の環境での例です。必要に応じて変更してください。アンマウントの状態から書き込みます。

$ sudo dd -if=your-image.rpi-sdimg of=/dev/sdb
$ sync

動作確認

できあがったSDをRaspberry Piへ入れます。マウス、キーボード、LANケーブル、HDMIを接続したのち、電源となるUSBを刺せば起動します。
起動はHOMEとなるURLを環境変数に指定してから「b2g」を手でたたきます。

$ B2G_HOMESCREEN=http://www.mozilla.org b2g &

これで固定サイズブラウザにmozillaのトップページが表示されます。

覚え書き

パスワード無しのrootアカウントでログインするステキな仕様です。b2gだけでなくplugin-containerもrootで動いていました。

立ち上がるプロセスは b2g と plugin-container が1つです。

参考サイトの Limitations の項に、マウスが使えないようなことが書いてありますが、なんとか使えなくもないです。 マウスポインタが見えないだけで、ポインタ移動やフォーカス・クリックのイベントを送ることができている模様です。

最後に

このレイヤ構成ではGonkを取っ払ってopenembeddedを入れています。openembeddedを土台に構成されているので組み込みソフトとして様々なハードウエアへ搭載することを想定するなら「スジがいい」と言えるのではないでしょうか。