この記事は編集レビューを必要としています。ぜひご協力ください。
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/
ファイルのパーミッションを訂正します。つまり、これは ファイルシステムを read/write とマウントする行の後に行います:system
/b2g/plugin-container
chmod 0755 //b2g/b2g chmod 0755 /
system
/b2g/updater chmod 0755 /
system
/b2g/plugin-container
system
ビルドシステムによって提供される 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
- B2G OS
- B2G source code on Github
- Android web site
-
いくつかの端末にB2G OSを移植したDietrich Ayalaのブログの既存プロジェクト一覧(英語)