mozilla
Your Search Results

    Firefox OSを移植する

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

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

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

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

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

    次に、B2Gのテストビルドを使ってAndroid 端末を調理する前に、端末をバックアップするべきです。それに加えて、ビルドとインストール処理にちょっとした内容が必要です。

    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

    テストとデバッグ

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

    FAQ

    そのうち

    See also

     

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

    タグ: 
    Contributors to this page: Uemmra3
    最終更新者: Uemmra3,
    サイドバーを隠す