Firefox OSを移植する

この記事は編集レビューを必要としています。ぜひご協力ください

B2G OS はAndroidから得られるカーネルを使用し、Geckoに基づいたユーザインターフェイスを最上位に持ちます。この記事には新しい端末にOSをポーティング(移植)する方法の基本的なガイドを載せます。

このガイドではすでにAndroid端末が動いている新しい端末にポーティングすることを前提とします。そうでない端末にはもっと複雑な仕事になります。

注記: 移植に関するヘルプは、IRCチャンネルの #fxos と Mozilla Discourseで見つけられます。

ビルドシステムのセットアップ

最初のステップはビルドシステムを設定することです。B2G OS ビルドの必要条件のガイドにならうことができます。

オリジナルのAndroidシステムをローカルにバックアップする

次に、B2Gのテストビルドを使ってAndroid 端末を調理する前に、端末をバックアップするべきです。それに加えて、ビルドとインストール処理にちょっとした内容が必要です。端末id名を選ぶ時、 '-'(ハイフン) の代わりに '_'(アンダースコア) を使うのをお勧めします。その背景の根拠は、 バグ 1243349 を見てください。

mkdir my_device_backup
cd my_device_backup
adb pull /system system

B2Gリポジトリをクローンする

最初の手順でB2Gリポジトリをクローンし、マニフェストのリポジトリも同様にします。

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

config.shに新しい端末を追加する

次の手順では、B2G リポジトリ内の config.sh に新しい端末を追加します;つまりすでに存在するファイルをテンプレートとして使うことができます。これは基本的にビルドするための正しいファイルを取得する指示を提供することにもなります。

新しい端末用のマニフェストを作成する

今度は新しい端末向けのマニフェストファイルを追加する必要があります。すでにあるマニフェストをテンプレートとして参考にします。hamachi のマニフェストをリファレンスとして使えます。一旦終えたら、ローカルの b2g-manifest リポジトリに、マニフェストファイルを追加・コミットしておきます:

git add my-new-device.xml
git commit

次に、config.sh ファイルが、公式リポジトリの代わりにローカルの b2g-manifest リポジトリを使うようにします。このためには、config.sh ファイル内の GITREPO と BRANCH 変数を、ローカルのリポジトリの好きなブランチに変更します。例えば:

GITREPO=${GITREPO:-"file:///home/yourname/b2g-manifest"}
BRANCH=${BRANCH:-master}

新しい端末用のコンフィギュレーションツリーを作成する

新しい端末用のコンフィギュレーションツリーを作成します。これは device/<manufacturer>/<device_id>にあります。このツリーは少なくとも、以下を含むべきです:

  • AndroidBoard.mk
  • AndroidProducts.mk
  • BoardConfig.mk
  • extract-files.sh
  • full_<device_id>.mk
  • idc files for touchscreen
  • init files (init.rc, init.<target>.rc, uevent.rc, ...)

この内容は端末ごとに大変異なっており、特に、BoardConfig.mk と extract-files.sh は目立って異なる可能性があります。この部分はハック、テスト、デバッグを行って、どのバイナリブロブを引き出すべきかを理解していく必要があります。そこに何が入っているべきかの良い考えを得るには、hamachi端末用の設定を見てみましょう。新端末用に作成したマニフェストから、自身の設定へ正しく参照させることを忘れないでください。

記: あなたの端末用の CyanogenMod がすでにある場合、その情報によってポーティング速度は上がります。XDA Forum (英語)も議論したり、リソースを探すのに良い場所です。

boot.imgをリビルドする

すべてを完了してしまってから、ブートイメージをリビルドする必要があります。通常はカーネル自身は不要ですが、init.rc への変更を拾うことになります。

init.rcを変更する

init.rc は B2G から提供されるものではなく; 代わりに端末から抜き出すものです。

修正が必要となる主な箇所は:

init.b2g.rcをインポートする

init.b2g.rcをインポートするため、下記の行を追加します:

on early-init
    start ueventd
    import /init.b2g.rc

パーミッションを修正する

/system/b2g/b2g/system/b2g/updater/system/b2g/plugin-container ファイルのパーミッションを訂正します。つまり、これは ファイルシステムを read/write とマウントする行の後に行います:

chmod 0755 /system/b2g/b2g
chmod 0755 /system/b2g/updater
chmod 0755 /system/b2g/plugin-container

ビルドシステムによって提供される init.rc を使う代わりに、新しい端末から得た init.rc を修正したい場合もあるでしょう。そうであるなら、BoardConfig.mk 内の TARGET_PROVIDES_INIT_RC をセットし忘れないでおく必要があります。

事前にビルドされたカーネル vs. ソースからカーネルをビルドする

事前ビルドされたカーネルを使うことも、ソースからカーネルをビルドすることも可能です。ソースからカーネルをビルドするには、AndroidKernel.mk とカーネル設定とを、コンフィギュレーションツリーに追加します。

古いビルドシステム上の maguro は、ソースからカーネルをビルドする例です。

既存のブートイメージを引き出し、修正する

電話機のブートイメージを修復するのに、/dev/mtd/mtd1 または /dev/mtd/mtd2 端末の内容をダンプする方法が可能です。生成されるイメージファイルは容易に復元できます:

adb shell 'cat /dev/mtd/mtd1 > /sdcard/boot.img'
adb pull /sdcard/boot.img

一旦ブートイメージファイルを入手したらunmkbootimgのようなヘルパーツールでアンパックできます。このツールはカーネルイメージ (zImage) とRAMディスク (initramfs.cpio.gz) の両方を展開し、オリジナルと同一のパラメータでイメージをリビルドするコマンドを出力します。例えば:

$ unmkbootimg boot.img 
Kernel size 3872576
Kernel address 0x208000
Ramdisk size 265102
Ramdisk address 0x1500000
Secondary size 0
Secondary address 0x1100000
Kernel tags address 0x200100
Flash page size 2048
Board name is ""
Command line "androidboot.hardware=aphone"
Extracting kernel to file zImage ...
Extracting root filesystem to file initramfs.cpio.gz ...
All done.
---------------
To recompile this image, use:
  mkbootimg --kernel zImage --ramdisk initramfs.cpio.gz --base 0x200000 --cmdline 'androidboot.hardware=aphone' -o new_boot.img
---------------

RAMディスクのファイルを修正するには、出力ディレクトリを作成してそこへ展開します:

mkdir initramfs_dir
cd initramfs_dir
gunzip -c ../initramfs.cpio.gz | cpio -i

必要な変更 (例えば init.rc の修正)を完了して、mkbootfs を使ってRAMディスクを再パックします。他のB2Gホストツールによってビルドされているのと同じバージョンを使っていることを確認します。:

/path/to/your/B2G/out/host/linux-x86/bin/mkbootfs . | gzip > ../newinitramfs.cpio.gz

最後に、最上位ディレクトリに戻り、 mkbootimg を使ってブートイメージを再パックします。同様に他のB2Gホストツールによってビルドされているのと同じバージョンを使っていることを確認します。:

/path/to/your/B2G/out/host/linux-x86/bin/mkbootimg --kernel zImage --ramdisk newinitramfs.cpio.gz --base 0x200000 --cmdline 'androidboot.hardware=aphone' -o newboot.img

ここで新しいブートイメージを、 out/target/product/$device/boot.img ($deviceは端末名)の下にコピーすると、 flash.sh を実行した時に自動的に書き込まれます。あるいは手動で下記のコマンドを用いて書き込むこともできます:

adb reboot bootloader
fastboot flash boot newboot.img
fastboot reboot

flash.shに新しい端末を追加する

新しい端末を flash.sh に追加します。すなわち、どうやってやるかという詳細は、新しい端末に書き込むのにどのツールが必要となるかに依存します。

新しい端末をConfigure, build, and flashする(設定し、ビルドし、焼く)

今や新しい端末のビルド、書き込みを試すことができます:

ANDROIDFS_DIR=my_device_backup ./config.sh <device_id> '../b2g-manifest/default.xml'
./build.sh
./flash.sh

テストとデバッグ

詳細情報をここに追加する必要がある; 実際の所、記事全体が何らかの助けとなりうる。

See also

 

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: hamasaki, T.Ukegawa, Uemmra3
 最終更新者: hamasaki,