ラズベリーパイにB2Gをハッキング

(訳注:https://wiki.mozilla.org/Hacking_b2g_on_Raspberry_Pi のページを例によって乱暴に訳したものです。内容の正確性は保証しかねます。アンカーとかは埋めていません。私家版です。)

このページはラズベリーパイデバイス上にB2Gを構築・実行することに興味がある人々を対象としています。

NBB:ビデオメモリ用のRAM割り当てパラメータは、現在512MBのRAMを搭載したラズベリーパイ(モデルBのREV2とモデルB+)用にチューニングされています。 256MBを搭載したラズベリーパイでは動作はするはずですが、パフォーマンスが最適ではないかもしれない。

Contents

1 Status
2 Flash an existing build
3 Enable touchscreen output
4 Building b2g for RPi
5 Preparing to flash b2g onto your SD card
6 Flashing b2g onto an SD card
7 Preparing a development environment
8 Rebuilding b2g and updating your RPi

Status

ラズベリーパイのB2Gはまだ進行中で非常に多くの仕事があります。最終的には素敵な互換性マトリックスが掲載されます。また、全体的なトラッキングのためにbug 1001404を参照してください。今のところ、最悪のバグがあるため注意を要します

  • OpenGLのレンダリングはまだサポートされていません。これは、グラフィックス性能が悪くなることを意味します。また、WebGLのいずれかは正しく動作しません。bug 10846
  • RPiはの出力解像度は、人為的に当分の間、480pに制限されています。 bug 1072148
  • オーディオ出力は、完全に動作していません。 bug 1072499
  • カメラやGPIOアクセスのようなシステムの機能は、まだB2Gランタイムによってサポートされていません。

Flash an existing build

最初にビルドをダウンロードします。そして次のように実行します。

tar jxvf ffos-rpi-*.img.tar.bz2

“ffos-rpi-*.img”というファイルを生成します。カードリーダ/ライタにあなたのSDカードを挿入します。お使いのOSによっては、/dev/mmcblk0、/dev/sdc、または/dev/disk2のようなデバイスとしてSDカードが追加されます。以下にそのデバイスを$diskとします。

重要警告:SDカードは完全かつ永久的に消去されます。よく注意して、SDカード用のデバイスを確実に確認してください。

最後に、以下のように実行します。

sudo dd bs=4M if=ffos-rpi-*.img of=$device

注:このディスクイメージは、4GBのディスク用に事前にパーティショニングしてあります。あなたがより大きなSDカードを持っているときでかつ、SDカードのパーティションの残りのスペースを割り当てたい場合は、GPartedのようなツールで、そのパーティションのサイズを変更してください。

Enable touchscreen output

ラズベリーパイにB2Gは、拡張タッチスクリーンのクラスをサポートしています。これまでのところ、唯一、PiTFTでテストされていますので、そのモデルを強くお勧めします。デフォルトのビルド済みB2Gイメージと、あなたが構築するイメージは、デフォルトでタッチスクリーン出力をサポートしています。ただし、デフォルトでは無効になっています。

あなたはラズベリーパイ(これはもちろん、電源がオフのとき)にタッチスクリーン(PiTFT意味します)を接続したら、あなたはADBを通じて次のコマンドを実行して、有効にすることができます(下記参照)

adb shell setprop persist.fbtft adafruitts

これはB2Gを再起動し、それにPiTFTデバイスへの出力を行います。いつでも以下のコマンドを実行することで、HDMI出力に戻すことができます

adb shell setprop persist.fbtft none

もちろん、この設定は、再起動後も持続します。

注:タッチスクリーンを介して出力するように構成している時、あなたが(RPiはもちろん、電源がオフになっている)タッチスクリーンを切断した場合、その後RPiは再起動後にも、存在しないスクリーンを介して出力するように試みます。このバグはまだ理解されておらず、カーネルの問題であると考えられておりません。しかしその場合でも、あなたはHDMI出力に戻す上記のコマンドで戻すことが可能です。

Building b2g for RPi

B2Gビルドの前提条件をインストールします。当分の間、唯一のLinuxは正式にビルド環境としてサポートされています。あなたは、OS Xを使うことはできますが、手動で最初のフラッシュのためにあなたのRPiはSDカードを分割する必要があります。 Ubuntuの12.04が最高のサポートされている開発のOSであることに注意してください。あなたの開発マシン上のUbuntu12.04を実行していない場合は、仮想マシンとしてインストールし、そこに構築することができます。
(訳注:個人的にはUbuntu 14.04 LTS日本語 Remixがお勧めです)

B2Gビルド環境は、15~20 GBの間で、ディスクスペースのかなりの量を消費します。開発マシン(またはVM)上に十分な空き容量があることを確認してください。

RPi用にB2Gをビルドするには、最初のB2Gヘルパースクリプトをダウンロードします

git clone https://github.com/mozilla-b2g/B2G.git

次にラズベリーパイのためにB2Gを構成します

cd B2G
./config.sh rpi

それは大量のデータをダウンロードするためconfig.shのステップは、かなり時間がかかることがあります。それが終了したら、geckoのチェックアウトにパッチを適用する必要があります(今のところ、パッチはレビューなどを通じてその方法を行っている)。ここからパッチをダウンロードしてから、コマンドを実行して、B2G/geckoサブディレクトリに適用されます。

(cd gecko && git apply [the patch you downloaded])

注:gitのApplyに障害が発生した場合、あなたはpatch -p1を使用する必要があります。変更がアップストリームに反映されているとしても、パッチの内容は、時間をかけて縮小する必要があります(訳注:パッチの内容が大元に反映されてもパッチ自体の内容はすぐに削除できないといっているかと思います)。あなたがrepo syncでチェックアウトした後に、このページに戻り、新しいバージョンのパッチを適用する必要があるかもしれません。うまくいけば、すぐに余分なパッチは必要とされなくなります。

注意:bug 1085599のため、geckoはこのバージョンに凍結され、そしてgaiaは(geckoバージョンが凍結されているという理由だけで)このバージョンに凍結されている。あなたが使用するように期待していた機能が利用できない場合、これはわかりません。しかし、通常、あなたはこれについて心配する必要はありません。

次に、あなたのgaia/build/config/ディレクトリ内のファイルdevice/rpi/rpi/custom-settings.jsonおよびdevice/rpi/rpi/custom-prefs.jsをコピー、または—すでにカスタム設定や環境設定を持っている場合—既存のcustom-*のファイルにそれらのファイルの内容を追加のどちらか。

最後に、b2gをビルドします

./build.sh

それは、オペレーティングシステム全体をビルドするのため、この手順はまた、いくつかの時間がかかります。ビルドが完了したら、それはあなたのRPiは用のSDカードに、それをフラッシュする時間です。

構築済みのLinuxカーネルイメージはB2Bのソースのチェックアウトに含まれています。ただし、あなたが、自分でカーネルをビルドする場合$B2G/device/rpi/rpi/READMEの指示に従ってください。

Preparing to flash b2g onto your SD card

注:便利かつ簡単な指示に従い、既存のイメージをフラッシュすることがあります。

イメージをフラッシュするのに次のものが必要です

  • 少なくとも4ギガバイトの容量を持つSDカード
  • SDカードリーダ/ライタとマシン
  • スーパーユーザー権限を持っているLinuxホストOS

Ubuntuの12.04 OSは、構築するために推奨されるが、どのLinuxディストリビューションでも、イメージをフラッシュできます。VMでUbuntuの12.04を実行している場合、それはまったく問題ありません:ホストからフラッシュしてから、ホストOSにビルドをミラーとすることができます。
(訳注:VmwareなどならSD RD/WRを仮想OSのUSBに割りつければ実機と同じ手順で問題ありません)

Ubuntuの12.04では、USBドライブの自動マウントを無効にする必要があります

あなたは、ホストOSでB2Gをビルドした場合は、次の手順をスキップすることができます。

あなたのB2Gは、まず、あなたのホストOSにミラーリングして組み込むため、あなたのゲストVM内で次のコマンドを実行して、ゲストVMのIPアドレスを調べます。

ifconfig

<以下コピーの手順なので後日>

You’ll see a line printed that says something like inet addr:AAA.BBB.CCC.DDD. That AAA.BBB.CCC.DDD is your guest VM’s IP address.

Next install sshd on your guest OS. On ubuntu, use the command

sudo apt-get install openssh-server

Other distributions require similar commands.

Next, on your linux host, install sshfs. On ubuntu, use the command

sudo apt-get install sshfs

Other distributions require similar commands. You also need to enable “other users” to access your sshfs mounts. (The other user will be superuser, when you flash your image following the instructions below.) First run the command

sudo gedit /etc/fuse.conf

Then find the line that reads

# user_allow_other

And edit it to

user_allow_other

Save the file by pressing Ctrl-s and then close the editor.

Finally, mount your guest VM’s build image by running the following commands

mkdir B2G
sshfs $user@$AAA.BBB.CCC.DDD:/home/$user/$B2G B2G -o allow_root

Be sure to replace $user with your username in your guest VM, $AAA.BBB.CCC.DDD with your guest VM’s IP address that you found following the instructions above, and $B2G with the path to the B2G checkout you made above within your home directory.

To ensure that your build has been mirrored correctly, run the following command in your host OS

ls B2G

You should see listed all the files and directories from your B2G/ directory in your guest VM.

You’ll usually want to unmount the remote B2G directory when you’ve finished flashing your SD card. To unmount it, run the command

fusermount -u B2G

<ここまで>

Flashing b2g onto an SD card

あなたは一度だけこの手順に従う必要があります。あなたのSDカードが一度準備されれば、二度目移行はそれを削除せずに新しいビルドファイルを更新することができます。これらの部分的な更新手順を以下に説明する。

注:便利かつ簡単な指示に従い、既存のイメージをフラッシュすることがあります。

B2Gを持つSDカードが、初めて構築する場合以下のコマンドを実行しフラッシュする。 (ゲストVMでビルドした場合、ホストマシンにビルドイメージをミラーリングする上記の手順に従ってください。)

cd $B2G
sudo ./flash.sh -f

直接SDカードのブロックデバイスに書き込むためにスーパーユーザーとしてflash.shコマンドを実行する必要があります。セットアッププロセスを完了するためにflash.shによって提示された命令や指示に従います。

スクリプトは、あなたのSDカードを自動検出しようとします。それが失敗した場合は、次のように手動でスクリプトにあなたのSDカードデバイスを渡します。

sudo DISK="/dev/your-sd-card" ./flash.sh -f

フラッシュスクリプトが終了すると、あなたのSDカードは準備ができています。おめでとう! 、ホストマシンから取り出してし、あなたのラズベリーパイに挿入し、B2Gを起動!:)

Preparing a development environment

RPi上のB2Gをハックするには、adbの接続を作成する必要があります。 ADBは「アンドロイドデバッグブリッジ」上で、診断出力を受信し、開発コマンドが送信します。通常のadb接続はUSBを介して行われますが、RPiはのUSBポートは、スレーブモードに設定することはできません。(モデルB以降で。)

TCP/IP上のadbを接続することができます。あなたは、WiFiまたはイーサネット経由で接続するオプションがあります。Wifiで接続する場合は、ホストマシンのWifiをオンにしてください。

重要警告:RPi用FFOSビルドは開発者を対象としています。ワイルドで安全ではありません完全なものだと思ってネットワークに接続しないでください。

次に、gaiaの設定アプリを通して、あなたの無線LANカードのIPアドレスを見つけます。このアドレスを$IPとします。最後に、ホストマシン上で以下のコマンドを実行します。

adb connect $IP:5555

(5555はあなたのRPiは上のadbサーバが受け付けるポートです。)

あるいは、イーサネット経由で接続をLANにRPiのEthernetケーブルを接続します。セキュリティと同様の注意事項が適用されます。次に、あなたのRPiを起動し、LAN上のIPアドレスを見つけます。 (シリアルコンソールをセットアップする方法については、以下の手順を参照してください。少し難しいです)あなたは(簡単に)、ネットワークルータのクライアントテーブルを見たり、あなたRPiはシリアルコンソールで次のコマンドを実行しているいずれかの方法でこれを行うことができます

netcfg

RPiのアドレス$IPとします。ホストマシン上で次のコマンドを実行して、ADBを接続します。

adb connect $IP:5555

adbの接続をテストするには、ホスト上で次のコマンドを実行します。

adb logcat

あなたは診断メッセージの長いリストが表示されるはずです。 [CTRL] + [C]を押すと、logcat出力を停止します。

ADBに加えて、シリアルコンソールを強くお勧めします。シリアルコンソールは、基本的にはネットワークやカーネル開発のために必要とされます。次の例のように、adafruitからRPi用のUSB-to-serialアダプタを購入することができます。いくつかのRPiはキットには、こういったものが含まれます。上に示したアダプタは、黒のリード線をピン6(GND)、白のリード線をピン8(GPIO14, UART0_TXD)、緑のリードはピン10(GPIO15,UART0_RXD)に接続します。すでに電源がある場合は赤いリードを接続する必要はありません。
(訳注:国内での入手先はこちら:http://www.amazon.co.jp/Physical-Computing-Lab-TSI-PI012-Pi用コンソールケーブル/dp/B00O6J08IU/)

警告:正しい端子にリード線を接続することを非常に注意してください! 少なくとも一人の開発者が間違ったピンに接続したことにより、USB-to-serialアダプタが燃え尽きました。

B2GカーネルはRPiのシリアルコンソールを開くようにあらかじめ設定されています。ホストマシンにUSBケーブルを接続し、ターミナルエミュレータを起動します。minicomがうまく動作します。 Ubuntuでは、以下のコマンドでminicomのをインストールできます。

sudo apt-get install minicom

次に、コマンドを使用してRPiに接続します

minicom -b 115200 -o -D /dev/ttyUSB0

(ちがうデバイス名にを割り当てられている場合には、USB-to-serialアダプタのデバイス名を、/dev/ttyUSB0から置き換えてください)。端末出力が表示され、シェルプロンプトが表示されます。

注:「スマート端末」でminicomを実行する必要があります。 minicomのはやや不可解なメッセージ(「No cursor motion capability(CM)」)を用いて、Emacsのシェルの内部で実行したときにエラーが表示されます。

Rebuilding b2g and updating your RPi

最新のソースでB2Gビルドディレクトリを更新するには、次のコマンドを実行します。

cd $B2G
./repo sync
./build.sh

あなたのRPiは、デバイスがB2Gを実行している間、定期的にB2G更新コマンドを使用して、これらのファイルを同期することができます。あなたのRPiは電源を切ったり、それを更新するために、そのSDカードを取り外す必要はありません。コマンドは以下の通り

  • ./flash.sh : update the system and data files
  • ./flash.sh system : update the system files
  • ./flash.sh data : update the data files
  • ./flash.sh gecko : update the b2g runtime
  • ./flash.sh gaia : update the gaia apps and data

さらに、以下の非標準の更新コマンドを実行することができます

  • ./flash.sh boot : update the RPi firmware, bootloader files, and kernel
  • ./flash.sh kernel : update the kernel only

また、上記の指示に従うことにより、いつでも新たにSDカードをフラッシュすることができます。しかし、これは通常は必要ありません。