mozilla

Revision 358359 of Portando a Boot to Gecko

  • Enlace amigable (slug) de la revisión: Mozilla/Firefox_OS/Portando
  • Título de la revisión: Portando a Boot to Gecko
  • Id de la revisión: 358359
  • Creada:
  • Creador: Gioyik
  • ¿Es la revisión actual? No
  • Comentario

Contenido de la revisión

Boot to Gecko (FirefoxOS) utiliza un kernel derivado de Android, con una interfaz de usuario basada en Gecko sobre él. Este artículo provee la guía básica de cómo portar el sistema operativo en nuevos dispositivos.

Esta guía asume que tu estas portando en un dispositivo nuevo que está funcionando con Andriod; Si estás portando a otro dispositivo, el trabajo va a ser más enredado.

Prequisitos

Configurando la compilación de tu sistema

El primer paso es configurar la compilación del sistema; puedes seguir la guía en prerequisitos para compilar B2G.

Crear una copia de seguridad local del sistema original de Android

A continuación, deberás hacer una copia de seguridad de tu dispositivo Android antes de empezar a bombardearlo con tu compilación de pruebas de B2G. Además, algunos de estos comandos serán necesarios para el proceso de compilación e instalación.

mkdir my_device_backup
cd my_device_backup
adb pull /system system

Nota: Esto es opcional pero es recomendado, ya que algunas veces es posible tener perdidas mayores ocasionadas por problemas de compilaciones, en donde si no posees una copia de los archivos propietarios de tu telefono, lo mas probable es que el problema sea irreparable.

B2G

Clonar el repositorio B2G

El primer paso es clonar el repositorio de B2G.

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

Crea tu propio repositorio de B2G

Para empezar a portar B2G a tu nuevo dispositivo, es necesario que el repositorio que acabas de clonar en el paso anterior, sea hosteado por una cuenta de Github tuya en donde puedas hacer las modificaciones especiales para tu dispositivo. Quedando de la siguiente manera:

git clone https://github.com/Your-User-Name/B2G.git

Agrega un nuevo dispositivo al config.sh

El siguiente paso es agregar un nuevo dispositivo a config.sh; puedes usar uno de los existentes como plantilla. Esto básicamente consiste en proporcionar las instruciones para obtener los archivos correctos para hacer la compilación.

Busca la linea siguiente en tu archivo config.sh:

case "$1" in

Seguidamente agrega:

"device-name")

echo DEVICE=device-name >> .tmp-config &&

repo_sync $1

;;

Nota: Debes remplazar la parte en que dice device-name, con el nombre de tu dispositivo, como por ejemplo si tu dispositivo fuera el Samsung Galaxy S3, quedaria asi:

"i9300")

echo DEVICE=i9300 >> .tmp-config &&

repo_sync $1

;;

Como ultima paso (opcional, no influye en nada si realizas o no este paso), buscas esta parte en tu archivo config.sh:

echo Usage: $0 \(device name\)

echo

echo Valid devices to configure are:

echo - galaxy-s2

echo - galaxy-nexus

echo - nexus-s

echo - nexus-s-4g

echo - otoro

echo - unagi

echo - pandaboard

echo - emulator

echo - emulator-x86

exit -1

;;

Y agregas tu dispositivo:

echo - device-name

Nota: Debes remplazar la parte en que dice device-name, con el nombre de tu dispositivo, como por ejemplo si tu dispositivo fuera el Samsung Galaxy S3, quedaria asi:

echo - i9300

Crear un árbol de configuración para el nuevo dispositivo

Crear un nuevo árbol de configuración para el nuevo dispositivo. Esto debería estar en device/<manufacturer>/<device_id>. Este árbol debería incluir, al menos:

  • AndroidBoard.mk
  • AndroidProducts.mk
  • BoardConfig.mk
  • extract-files.sh
  • full_<device_id>.mk
  • archivos idc para pantallas táctiles
  • archivos de inicio (init.rc, init.<target>.rc, uevent.rc, ...)

El contenido aquí puede variar en gran medida entre un dispositivo y otro. En particular, BoardConfig.mk y extract-files.sh podrían variar significativamente. Esta parte requiere un conjunto de hacking, pruebas, y depuración para averiguar que pedazos binarios deberán ser extraidos.

Nota: No es necesario que crees estos archivos por tu propia cuenta, por lo general la mayoria de los telefonos y dispositivos que corren CyanogenMod o AOKP tienen un repositorio en Github con todos estos archivos del arbol de configuracion, puedes distinguirlos, porque la mayoria de estos repositorios llevan el nombre de: ej "android_device_samsung_i9300" (como es caso ejemplo, el nombre varia dependiendo de tu dispositivo). Asi que es recomendable que antes de que empieces a crear estos archivos por tu cuenta, revises algunos de los repositorios de CyanogenMod o AOKP, para ver si el arbol de configuracion de tu dispositivo ya esta creado por alguien mas.

Caso contrario ocurre con los dispositivos ZTE o algunos otros dispositivos a los cuales CyanogenMod o AOKP aun no han llegado, que requieren que crees estos archivos por tu propia cuenta desde 0. El Foro XDA  es otro buen lugar para debatir y ver recursos.

Una vez que tengas estos archivos, si te ha tocado crearlos desde 0, es totalmente necesario que los subas a un repositorio en tu cuenta de Github, mas o menos quedaria asi tu repo:

https://github.com/Your-User-Name/android-device-your-new-device

Si por el contrario has tenido suerte de encontrar que CyanogenMod o AOKP, o algun otro usuario ya ha creado estos archivos, tienes que hacer un fork del repo en tu cuenta. En cuestiones simples es necesario que tengas todos los repos de tu dispositivo ha realizar el port de FirefoxOS, alojados en tu cuenta de Github.

El Archivo Manifest

Clonar el repositorio b2g-manifest

De nuevo clonamos el repositorio de b2g-manifest.

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

Crea tu propio repositorio de b2g-manifest

Una vez mas, es necesario que el repositorio que acabas de clonar en el paso anterior, sea hosteado por una cuenta de Github tuya en donde puedas hacer las modificaciones especiales para tu dispositivo. Quedando de la siguiente manera:

git clone https://github.com/Your-User-Name/b2g-manifest.git

Crear el archivo de manifiesto para el nuevo dispositivo

Ahora necesitas agregar los repositorios requeridos para el archivo de manifiesto para el nuevo dispositivo; este archivo de manifiesto es llamado device-name.xml (el nombre de este archivo debe ser cambiado por el nombre de tu dispositivo, conservando la extension que lo caracteriza, el .xml). Este archivo debe tener la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>

<manifest>


  <remote name="aosp"

           fetch="https://android.googlesource.com/" />

  <remote name="b2g"

          fetch="git://github.com/mozilla-b2g/" />

  <remote name="linaro"

           fetch="git://android.git.linaro.org/" />

  <remote name="mozilla"

fetch="git://github.com/mozilla/" />

  <remote name="mozillaorg"

      fetch="https://git.mozilla.org/releases" />

  <default revision="refs/tags/android-4.0.4_r1.2"

           remote="linaro"

           sync-j="4" />


  <!-- Gonk specific things and forks -->

  <project path="build" name="platform_build" remote="b2g" revision="master">

    <copyfile src="core/root.mk" dest="Makefile" />

  </project>

  <project path="dalvik" name="fake-dalvik" remote="b2g" revision="master" />

  <project path="gaia" name="gaia.git" remote="mozillaorg" revision="master" />

  <project path="gecko" name="gecko.git" remote="mozillaorg" revision="master" />

  <project path="gonk-misc" name="gonk-misc" remote="b2g" revision="master" />

  <project path="rilproxy" name="rilproxy" remote="b2g" revision="master" />

  <project path="external/moztt" name="moztt" remote="b2g" revision="master" />


  <!-- Stock Android things -->

  <project path="abi/cpp" name="platform/abi/cpp" />

  <project path="bionic" name="platform/bionic" />

  <project path="bootable/recovery" name="platform/bootable/recovery" />

  <project path="device/common" name="device/common" />

  <project path="device/sample" name="device/sample" />

  <project path="external/apriori" name="platform_external_apriori" remote="b2g" revision="master" />

  <project path="external/bluetooth/bluez" name="platform/external/bluetooth/bluez" />

  <project path="external/bluetooth/glib" name="platform/external/bluetooth/glib" />

  <project path="external/bluetooth/hcidump" name="platform/external/bluetooth/hcidump" />

  <project path="external/bsdiff" name="platform/external/bsdiff" />

  <project path="external/bzip2" name="platform/external/bzip2" />

  <project path="external/dbus" name="platform/external/dbus" />

  <project path="external/dhcpcd" name="platform/external/dhcpcd" />

  <project path="external/dnsmasq" name="platform/external/dnsmasq" />

  <project path="external/elfcopy" name="platform_external_elfcopy" remote="b2g" revision="master" />

  <project path="external/elfutils" name="platform_external_elfutils" remote="b2g" revision="master" />

  <project path="external/expat" name="platform/external/expat" />

  <project path="external/fdlibm" name="platform/external/fdlibm" />

  <project path="external/flac" name="platform/external/flac" />

  <project path="external/freetype" name="platform/external/freetype" />

  <project path="external/giflib" name="platform/external/giflib" />

  <project path="external/gtest" name="platform/external/gtest" remote="linaro" revision="master" />

  <project path="external/harfbuzz" name="platform/external/harfbuzz" />

  <project path="external/icu4c" name="platform/external/icu4c" />

  <project path="external/iptables" name="platform/external/iptables" />

  <project path="external/jpeg" name="platform/external/jpeg" />

  <project path="external/libgsm" name="platform/external/libgsm" />

  <project path="external/liblzf" name="platform/external/liblzf" />

  <project path="external/libnfc-nxp" name="platform/external/libnfc-nxp" />

  <project path="external/libnl-headers" name="platform/external/libnl-headers" />

  <project path="external/libpng" name="platform/external/libpng" />

  <project path="external/libvpx" name="platform/external/libvpx" />

  <project path="external/mksh" name="platform/external/mksh" />

  <project path="external/opensans" name="platform_external_opensans" remote="b2g" revision="master" />

  <project path="external/openssl" name="platform/external/openssl" />

  <project path="external/protobuf" name="platform/external/protobuf" />

  <project path="external/safe-iop" name="platform/external/safe-iop" />

  <project path="external/screencap-gonk" name="screencap-gonk" remote="b2g" revision="master" />

  <project path="external/sonivox" name="platform/external/sonivox" />

  <project path="external/speex" name="platform/external/speex" />

  <project path="external/sqlite" name="platform/external/sqlite" />

  <project path="external/stlport" name="platform/external/stlport" />

  <project path="external/strace" name="platform/external/strace" />

  <project path="external/tagsoup" name="platform/external/tagsoup" />

  <project path="external/tinyalsa" name="platform/external/tinyalsa" />

  <project path="external/tremolo" name="platform/external/tremolo" />

  <project path="external/webp" name="platform/external/webp" />

  <project path="external/webrtc" name="platform/external/webrtc" />

  <project path="external/wpa_supplicant" name="platform/external/wpa_supplicant" />

  <project path="external/wpa_supplicant_8" name="platform/external/wpa_supplicant_8" />

  <project path="external/zlib" name="platform/external/zlib" />

  <project path="external/yaffs2" name="platform/external/yaffs2" />

  <project path="frameworks/base" name="platform/frameworks/base" />

  <project path="frameworks/opt/emoji" name="platform/frameworks/opt/emoji" />

  <project path="frameworks/support" name="platform/frameworks/support" />

  <project path="hardware/libhardware" name="platform/hardware/libhardware" />

  <project path="hardware/libhardware_legacy" name="platform/hardware/libhardware_legacy" />

  <project path="hardware/ril" name="platform/hardware/ril" />

  <project path="libcore" name="platform/libcore" />

  <project path="ndk" name="platform/ndk" />

  <project path="prebuilt" name="platform/prebuilt" />

  <project path="system/bluetooth" name="platform/system/bluetooth" />

  <project path="system/core" name="platform/system/core" />

  <project path="system/extras" name="platform/system/extras" />

  <project path="system/media" name="platform/system/media" />

  <project path="system/netd" name="platform/system/netd" />

  <project path="system/vold" name="platform/system/vold" />


  <!-- Cosas de tu dispositivo  -->

  

</manifest>

El archivo manifesto es muy facil de crear, simplemente necesitaras el codigo anterior y entenderlo un poco. Copia el codigo anterior

Booteo de B2G

Recompilar boot.img

Una vez lo tengas todo hecho, necesitas recompilar la imágen de arranque. Esto no suele ser necesario para el propio Kernel, pero recoge los cambios en  init.rc.

Cambios a init.rc

El init.rc que utilizas no es el proporcionado por B2G; en su lugar, tienes que tirarlo desde el dispositivo

Las principales cosas que necesitarás modificar son:

Importar init.b2g.rc

Añade las siguientes líneas para importar init.b2g.rc:

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

Corrige los permisos en los archivos /system/b2g/b2g, /system/b2g/updater, /system/b2g/plugin-container; esto se deberá hacer después de las líneas que montan los archivos del sistema de lectura/escritura:

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

Es posible que quieras iniciar modificando init.rc del nuevo dispositivo en vez de usar el init.rc proveido por la compilación del sistema; si es así, necesitas recordar configurar TARGET_PROVIDES_INIT_RC en BoardConfig.mk.

Kernel precompilado vs. compilando el kernel desde una fuente

Puedes usar un Kernel precompilado, o podrías compilar el Kernel desde una fuente. Para compilar el Kernel desde una fuente, añade AndroidKernel.mk  y la configuración del kernel al árbol de configuración del dispositivo.

El maguro en la vieja compilación del sistema es un ejemplo de compilación del kernel desde una fuente.

Flasheo del dispositivo

Añade el nuevo dispositivo a flash.sh

Añade el nuevo dispositivo a  flash.sh; las especificaciones de como hacer esto dependerán de que herramientas necesitas usar para flashear el nuevo dispositivo.

Configura, compila y  flashea el nuevo dispositivo

Ahora puedes probar compilando y flasheando tu nuevo dispositivo:

ANDROIDFS_DIR=my_device_backup ./config.sh <device_id> default.xml
./build.sh
./flash.sh

Probar y depurar

Necesitamos añadir algunos detalles aqui; de hecho, este artículo podría usar algo de ayuda.

FAQ

Próximamente

Mira también

Fuente de la revisión

<p>Boot to Gecko (FirefoxOS) utiliza un kernel derivado de <a href="http://www.android.com/" title="http://www.android.com/">Android</a>, con una interfaz de usuario basada en <a href="https://developer.mozilla.org/es/docs/Gecko" title="/en-US/docs/Gecko">Gecko</a> sobre él. Este artículo provee la guía básica de cómo portar el sistema operativo en nuevos dispositivos.</p>
<p>Esta guía asume que tu estas portando en un dispositivo nuevo que está funcionando con Andriod; Si estás portando a otro dispositivo, el trabajo va a ser más enredado.</p>
<h2 id="Prequisitos">Prequisitos</h2>
<h3 id="Configurando_la_compilaci.C3.B3n_de_tu_sistema">Configurando la compilación de tu sistema</h3>
<p>El primer paso es configurar la compilación del sistema; puedes seguir la guía en <a href="https://developer.mozilla.org/es/docs/Mozilla/Boot_to_Gecko/Firefox_OS_build_prerequisites" title="/en-US/docs/Mozilla/Boot_to_Gecko/B2G_build_prerequisites">prerequisitos para compilar B2G</a>.</p>
<h3 id="Crear_una_copia_de_seguridad_local_del_sistema_original_de_Android">Crear una copia de seguridad local del sistema original de Android</h3>
<p>A continuación, deberás hacer una copia de seguridad de tu dispositivo Android antes de empezar a bombardearlo con tu compilación de pruebas de B2G. Además, algunos de estos comandos serán necesarios para el proceso de compilación e instalación.</p>
<pre>
mkdir my_device_backup
cd my_device_backup
adb pull /system system</pre>
<div class="note">
  <p><strong>Nota:</strong> Esto es opcional pero es recomendado, ya que algunas veces es posible tener perdidas mayores ocasionadas por problemas de compilaciones, en donde si no posees una copia de los archivos propietarios de tu telefono, lo mas probable es que el problema sea irreparable.</p>
</div>
<h2 id="B2G">B2G</h2>
<h3 id="Clonar_el_repositorio_B2G">Clonar el repositorio B2G</h3>
<p>El primer paso es clonar el repositorio de B2G.</p>
<pre>
git clone https://github.com/mozilla-b2g/B2G.git</pre>
<h3 id="Crea_tu_propio_repositorio_de_B2G">Crea tu propio repositorio de B2G</h3>
<p>Para empezar a portar B2G a tu nuevo dispositivo, es necesario que el repositorio que acabas de clonar en el paso anterior, sea hosteado por una cuenta de Github tuya en donde puedas hacer las modificaciones especiales para tu dispositivo. Quedando de la siguiente manera:</p>
<pre>
git clone https://github.com/Your-User-Name/B2G.git</pre>
<h3 id="Agrega_un_nuevo_dispositivo_al_config.sh">Agrega un nuevo dispositivo al config.sh</h3>
<p>El siguiente paso es agregar un nuevo dispositivo a <a href="https://github.com/mozilla-b2g/B2G/blob/master/config.sh" title="https://github.com/mozilla-b2g/B2G/blob/master/config.sh"><code>config.sh</code></a>; puedes usar uno de los existentes como plantilla. Esto básicamente consiste en proporcionar las instruciones para obtener los archivos correctos para hacer la compilación.</p>
<p>Busca la linea siguiente en tu archivo <a href="https://github.com/mozilla-b2g/B2G/blob/master/config.sh" title="https://github.com/mozilla-b2g/B2G/blob/master/config.sh"><code>config.sh</code></a>:</p>
<pre>
<span class="k">case</span> <span class="s2">"$1"</span> in</pre>
<p>Seguidamente agrega:</p>
<pre class="line">
<span class="s2">"<strong>device-name</strong>"</span><span class="o">)</span>

<span class="nb">echo </span><span class="nv">DEVICE</span><span class="o">=</span><strong>device-name</strong> &gt;&gt; .tmp-config <span class="o">&amp;&amp;</span>

repo_sync <span class="nv">$1</span>

;;</pre>
<div class="note">
  <p><strong>Nota:</strong> Debes remplazar la parte en que dice <strong>device-name</strong>, con el nombre de tu dispositivo, como por ejemplo si tu dispositivo fuera el Samsung Galaxy S3, quedaria asi:</p>
  <pre class="line">
<span class="s2">"<strong>i9300</strong>"</span><span class="o">)</span>

<span class="nb">echo </span><span class="nv">DEVICE</span><span class="o">=</span><strong>i9300</strong> &gt;&gt; .tmp-config <span class="o">&amp;&amp;</span>

repo_sync <span class="nv">$1</span>

;;</pre>
</div>
<p>Como ultima paso (opcional, no influye en nada si realizas o no este paso), buscas esta parte en tu archivo <a href="https://github.com/mozilla-b2g/B2G/blob/master/config.sh" title="https://github.com/mozilla-b2g/B2G/blob/master/config.sh"><code>config.sh</code></a>:</p>
<pre class="line">
<span class="nb">echo </span>Usage: <span class="nv">$0</span> <span class="se">\(</span>device name<span class="se">\)</span>

<span class="nb">echo</span>

<span class="nb">echo </span>Valid devices to configure are:

<span class="nb">echo</span> - galaxy-s2

<span class="nb">echo</span> - galaxy-nexus

<span class="nb">echo</span> - nexus-s

<span class="nb">echo</span> - nexus-s-4g

<span class="nb">echo</span> - otoro

<span class="nb">echo</span> - unagi

<span class="nb">echo</span> - pandaboard

<span class="nb">echo</span> - emulator

<span class="nb">echo</span> - emulator-x86

<span class="nb">exit</span> -1

;;</pre>
<p>Y agregas tu dispositivo:</p>
<pre class="line">
echo - device-name
</pre>
<div class="note">
  <p><strong>Nota:</strong> Debes remplazar la parte en que dice <strong>device-name</strong>, con el nombre de tu dispositivo, como por ejemplo si tu dispositivo fuera el Samsung Galaxy S3, quedaria asi:</p>
  <pre class="line">
echo - i9300</pre>
</div>
<h3 id="Crear_un_.C3.A1rbol_de_configuraci.C3.B3n_para_el_nuevo_dispositivo">Crear un árbol de configuración para el nuevo dispositivo</h3>
<p>Crear un nuevo árbol de configuración para el nuevo dispositivo. Esto debería estar en <code>device/<em>&lt;manufacturer&gt;</em>/<em>&lt;device_id&gt;</em></code>. Este árbol debería incluir, al menos:</p>
<ul>
  <li><code>AndroidBoard.mk</code></li>
  <li><code>AndroidProducts.mk</code></li>
  <li><code>BoardConfig.mk</code></li>
  <li><code>extract-files.sh</code></li>
  <li><code>full_&lt;device_id&gt;.mk</code></li>
  <li>archivos idc para pantallas táctiles</li>
  <li>archivos de inicio (<code>init.rc</code>, <code>init.&lt;target&gt;.rc</code>, <code>uevent.rc</code>, ...)</li>
</ul>
<p>El contenido aquí puede variar en gran medida entre un dispositivo y otro. En particular, BoardConfig.mk y extract-files.sh podrían variar significativamente. Esta parte requiere un conjunto de hacking, pruebas, y depuración para averiguar que pedazos binarios deberán ser extraidos.</p>
<div class="note">
  <p><strong>Nota:</strong> No es necesario que crees estos archivos por tu propia cuenta, por lo general la mayoria de los telefonos y dispositivos que corren <a href="http://www.cyanogenmod.com/" title="http://www.cyanogenmod.com/">CyanogenMod</a> o AOKP tienen un repositorio en Github con todos estos archivos del arbol de configuracion, puedes distinguirlos, porque la mayoria de estos repositorios llevan el nombre de: ej "android_device_samsung_i9300" (como es caso ejemplo, el nombre varia dependiendo de tu dispositivo). Asi que es recomendable que antes de que empieces a crear estos archivos por tu cuenta, revises algunos de los repositorios de CyanogenMod o AOKP, para ver si el arbol de configuracion de tu dispositivo ya esta creado por alguien mas.</p>
  <p>Caso contrario ocurre con los dispositivos ZTE o algunos otros dispositivos a los cuales CyanogenMod o AOKP aun no han llegado, que requieren que crees estos archivos por tu propia cuenta desde 0. El <a href="http://forum.xda-developers.com/" title="http://forum.xda-developers.com/">Foro XDA&nbsp;</a> es otro buen lugar para debatir y ver recursos.</p>
</div>
<p>Una vez que tengas estos archivos, si te ha tocado crearlos desde 0, es totalmente necesario que los subas a un repositorio en tu cuenta de Github, mas o menos quedaria asi tu repo:</p>
<pre>
https://github.com/Your-User-Name/android-device-your-new-device</pre>
<p>Si por el contrario has tenido suerte de encontrar que CyanogenMod o AOKP, o algun otro usuario ya ha creado estos archivos, tienes que hacer un fork del repo en tu cuenta. En cuestiones simples es necesario que tengas todos los repos de tu dispositivo ha realizar el port de FirefoxOS, alojados en tu cuenta de Github.</p>
<h2 id="El_Archivo_Manifest">El Archivo Manifest</h2>
<h3 id="Clonar_el_repositorio_b2g-manifest">Clonar el repositorio b2g-manifest</h3>
<p>De nuevo clonamos el repositorio de b2g-manifest.</p>
<pre>
git clone https://github.com/mozilla-b2g/b2g-manifest.git</pre>
<h3 id="Crea_tu_propio_repositorio_de_b2g-manifest">Crea tu propio repositorio de b2g-manifest</h3>
<p>Una vez mas, es necesario que el repositorio que acabas de clonar en el paso anterior, sea hosteado por una cuenta de Github tuya en donde puedas hacer las modificaciones especiales para tu dispositivo. Quedando de la siguiente manera:</p>
<pre>
git clone https://github.com/Your-User-Name/b2g-manifest.git</pre>
<h3 id="Crear_el_archivo_de_manifiesto_para_el_nuevo_dispositivo">Crear el archivo de manifiesto para el nuevo dispositivo</h3>
<p>Ahora necesitas agregar los repositorios requeridos para el archivo de manifiesto para el nuevo dispositivo; este archivo de manifiesto es llamado <strong>device-name.xml </strong>(el nombre de este archivo debe ser cambiado por el nombre de tu dispositivo, conservando la extension que lo caracteriza, el .xml). Este archivo debe tener la siguiente estructura:</p>
<div class="highlight">
  <pre class="line">
<span class="cp">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span>

<span class="nt">&lt;manifest&gt;</span>


  <span class="nt">&lt;remote</span> <span class="na">name=</span><span class="s">"aosp"</span>

           <span class="na">fetch=</span><span class="s">"https://android.googlesource.com/"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;remote</span> <span class="na">name=</span><span class="s">"b2g"</span>

          <span class="na">fetch=</span><span class="s">"git://github.com/mozilla-b2g/"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;remote</span> <span class="na">name=</span><span class="s">"linaro"</span>

           <span class="na">fetch=</span><span class="s">"git://android.git.linaro.org/"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;remote</span> <span class="na">name=</span><span class="s">"mozilla"</span>

<span class="na">fetch=</span><span class="s">"git://github.com/mozilla/"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;remote</span> <span class="na">name=</span><span class="s">"mozillaorg"</span>

      <span class="na">fetch=</span><span class="s">"https://git.mozilla.org/releases"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;default</span> <span class="na">revision=</span><span class="s">"refs/tags/android-4.0.4_r1.2"</span>

           <span class="na">remote=</span><span class="s">"linaro"</span>

           <span class="na">sync-j=</span><span class="s">"4"</span> <span class="nt">/&gt;</span>


  <span class="c">&lt;!-- Gonk specific things and forks --&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"build"</span> <span class="na">name=</span><span class="s">"platform_build"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span><span class="nt">&gt;</span>

    <span class="nt">&lt;copyfile</span> <span class="na">src=</span><span class="s">"core/root.mk"</span> <span class="na">dest=</span><span class="s">"Makefile"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;/project&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"dalvik"</span> <span class="na">name=</span><span class="s">"fake-dalvik"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"gaia"</span> <span class="na">name=</span><span class="s">"gaia.git"</span> <span class="na">remote=</span><span class="s">"mozillaorg"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"gecko"</span> <span class="na">name=</span><span class="s">"gecko.git"</span> <span class="na">remote=</span><span class="s">"mozillaorg"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"gonk-misc"</span> <span class="na">name=</span><span class="s">"gonk-misc"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"rilproxy"</span> <span class="na">name=</span><span class="s">"rilproxy"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/moztt"</span> <span class="na">name=</span><span class="s">"moztt"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>


  <span class="c">&lt;!-- Stock Android things --&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"abi/cpp"</span> <span class="na">name=</span><span class="s">"platform/abi/cpp"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"bionic"</span> <span class="na">name=</span><span class="s">"platform/bionic"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"bootable/recovery"</span> <span class="na">name=</span><span class="s">"platform/bootable/recovery"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"device/common"</span> <span class="na">name=</span><span class="s">"device/common"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"device/sample"</span> <span class="na">name=</span><span class="s">"device/sample"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/apriori"</span> <span class="na">name=</span><span class="s">"platform_external_apriori"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/bluetooth/bluez"</span> <span class="na">name=</span><span class="s">"platform/external/bluetooth/bluez"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/bluetooth/glib"</span> <span class="na">name=</span><span class="s">"platform/external/bluetooth/glib"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/bluetooth/hcidump"</span> <span class="na">name=</span><span class="s">"platform/external/bluetooth/hcidump"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/bsdiff"</span> <span class="na">name=</span><span class="s">"platform/external/bsdiff"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/bzip2"</span> <span class="na">name=</span><span class="s">"platform/external/bzip2"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/dbus"</span> <span class="na">name=</span><span class="s">"platform/external/dbus"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/dhcpcd"</span> <span class="na">name=</span><span class="s">"platform/external/dhcpcd"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/dnsmasq"</span> <span class="na">name=</span><span class="s">"platform/external/dnsmasq"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/elfcopy"</span> <span class="na">name=</span><span class="s">"platform_external_elfcopy"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/elfutils"</span> <span class="na">name=</span><span class="s">"platform_external_elfutils"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/expat"</span> <span class="na">name=</span><span class="s">"platform/external/expat"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/fdlibm"</span> <span class="na">name=</span><span class="s">"platform/external/fdlibm"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/flac"</span> <span class="na">name=</span><span class="s">"platform/external/flac"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/freetype"</span> <span class="na">name=</span><span class="s">"platform/external/freetype"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/giflib"</span> <span class="na">name=</span><span class="s">"platform/external/giflib"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/gtest"</span> <span class="na">name=</span><span class="s">"platform/external/gtest"</span> <span class="na">remote=</span><span class="s">"linaro"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/harfbuzz"</span> <span class="na">name=</span><span class="s">"platform/external/harfbuzz"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/icu4c"</span> <span class="na">name=</span><span class="s">"platform/external/icu4c"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/iptables"</span> <span class="na">name=</span><span class="s">"platform/external/iptables"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/jpeg"</span> <span class="na">name=</span><span class="s">"platform/external/jpeg"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/libgsm"</span> <span class="na">name=</span><span class="s">"platform/external/libgsm"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/liblzf"</span> <span class="na">name=</span><span class="s">"platform/external/liblzf"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/libnfc-nxp"</span> <span class="na">name=</span><span class="s">"platform/external/libnfc-nxp"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/libnl-headers"</span> <span class="na">name=</span><span class="s">"platform/external/libnl-headers"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/libpng"</span> <span class="na">name=</span><span class="s">"platform/external/libpng"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/libvpx"</span> <span class="na">name=</span><span class="s">"platform/external/libvpx"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/mksh"</span> <span class="na">name=</span><span class="s">"platform/external/mksh"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/opensans"</span> <span class="na">name=</span><span class="s">"platform_external_opensans"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/openssl"</span> <span class="na">name=</span><span class="s">"platform/external/openssl"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/protobuf"</span> <span class="na">name=</span><span class="s">"platform/external/protobuf"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/safe-iop"</span> <span class="na">name=</span><span class="s">"platform/external/safe-iop"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/screencap-gonk"</span> <span class="na">name=</span><span class="s">"screencap-gonk"</span> <span class="na">remote=</span><span class="s">"b2g"</span> <span class="na">revision=</span><span class="s">"master"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/sonivox"</span> <span class="na">name=</span><span class="s">"platform/external/sonivox"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/speex"</span> <span class="na">name=</span><span class="s">"platform/external/speex"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/sqlite"</span> <span class="na">name=</span><span class="s">"platform/external/sqlite"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/stlport"</span> <span class="na">name=</span><span class="s">"platform/external/stlport"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/strace"</span> <span class="na">name=</span><span class="s">"platform/external/strace"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/tagsoup"</span> <span class="na">name=</span><span class="s">"platform/external/tagsoup"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/tinyalsa"</span> <span class="na">name=</span><span class="s">"platform/external/tinyalsa"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/tremolo"</span> <span class="na">name=</span><span class="s">"platform/external/tremolo"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/webp"</span> <span class="na">name=</span><span class="s">"platform/external/webp"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/webrtc"</span> <span class="na">name=</span><span class="s">"platform/external/webrtc"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/wpa_supplicant"</span> <span class="na">name=</span><span class="s">"platform/external/wpa_supplicant"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/wpa_supplicant_8"</span> <span class="na">name=</span><span class="s">"platform/external/wpa_supplicant_8"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/zlib"</span> <span class="na">name=</span><span class="s">"platform/external/zlib"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"external/yaffs2"</span> <span class="na">name=</span><span class="s">"platform/external/yaffs2"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"frameworks/base"</span> <span class="na">name=</span><span class="s">"platform/frameworks/base"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"frameworks/opt/emoji"</span> <span class="na">name=</span><span class="s">"platform/frameworks/opt/emoji"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"frameworks/support"</span> <span class="na">name=</span><span class="s">"platform/frameworks/support"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"hardware/libhardware"</span> <span class="na">name=</span><span class="s">"platform/hardware/libhardware"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"hardware/libhardware_legacy"</span> <span class="na">name=</span><span class="s">"platform/hardware/libhardware_legacy"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"hardware/ril"</span> <span class="na">name=</span><span class="s">"platform/hardware/ril"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"libcore"</span> <span class="na">name=</span><span class="s">"platform/libcore"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"ndk"</span> <span class="na">name=</span><span class="s">"platform/ndk"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"prebuilt"</span> <span class="na">name=</span><span class="s">"platform/prebuilt"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/bluetooth"</span> <span class="na">name=</span><span class="s">"platform/system/bluetooth"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/core"</span> <span class="na">name=</span><span class="s">"platform/system/core"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/extras"</span> <span class="na">name=</span><span class="s">"platform/system/extras"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/media"</span> <span class="na">name=</span><span class="s">"platform/system/media"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/netd"</span> <span class="na">name=</span><span class="s">"platform/system/netd"</span> <span class="nt">/&gt;</span>

  <span class="nt">&lt;project</span> <span class="na">path=</span><span class="s">"system/vold"</span> <span class="na">name=</span><span class="s">"platform/system/vold"</span> <span class="nt">/&gt;</span>


  <span class="c">&lt;!-- Cosas de tu dispositivo  --&gt;</span>

  

<span class="nt">&lt;/manifest&gt;</span></pre>
  <p><span class="nt">El archivo manifesto es muy facil de crear, simplemente necesitaras el codigo anterior y entenderlo un poco. Copia el codigo anterior</span></p>
  <h2>Booteo de B2G</h2>
</div>
<h3 id="Recompilar_boot.img">Recompilar boot.img</h3>
<p>Una vez lo tengas todo hecho, necesitas recompilar la imágen de arranque. Esto no suele ser necesario para el propio Kernel, pero recoge los cambios en&nbsp; <code>init.rc</code>.</p>
<h4 id="Cambios_a_init.rc">Cambios a init.rc</h4>
<p>El init.rc que utilizas <strong>no</strong> es el proporcionado por B2G; en su lugar, tienes que tirarlo desde el dispositivo</p>
<p>Las principales cosas que necesitarás modificar son:</p>
<h5 id="Importar_init.b2g.rc">Importar init.b2g.rc</h5>
<p>Añade las siguientes líneas para importar <code>init.b2g.rc</code>:</p>
<pre>
on early-init
    start ueventd
    import /init.b2g.rc</pre>
<h5 id="Fijar_permisos">Fijar permisos</h5>
<p>Corrige los permisos en los archivos <code>/system/b2g/b2g</code>, <code>/system/b2g/updater</code>, <code>/system/b2g/plugin-container</code>; esto se deberá hacer después de las líneas que montan los archivos del sistema de lectura/escritura:</p>
<pre>
chmod 0755 /system/b2g/b2g
chmod 0755 /system/b2g/updater
chmod 0755 /system/b2g/plugin-container</pre>
<p>Es posible que quieras iniciar modificando <code>init.rc</code> del nuevo dispositivo en vez de usar el <code>init.rc</code> proveido por la compilación del sistema; si es así, necesitas recordar configurar <code>TARGET_PROVIDES_INIT_RC</code> en <code>BoardConfig.mk</code>.</p>
<h3 id="Kernel_precompilado_vs._compilando_el_kernel_desde_una_fuente">Kernel precompilado vs. compilando el kernel desde una fuente</h3>
<p>Puedes usar un Kernel precompilado, o podrías compilar el Kernel desde una fuente. Para compilar el Kernel desde una fuente, añade AndroidKernel.mk&nbsp; y la configuración del kernel al árbol de configuración del dispositivo.</p>
<p>El <a href="https://github.com/andreasgal/B2G/tree/master/glue/gonk/device/toro/maguro" title="https://github.com/andreasgal/B2G/tree/master/glue/gonk/device/toro/maguro">maguro</a> en la vieja compilación del sistema es un ejemplo de compilación del kernel desde una fuente.</p>
<h2>Flasheo del dispositivo</h2>
<h3 id="A.C3.B1ade_el_nuevo_dispositivo_a_flash.sh">Añade el nuevo dispositivo a flash.sh</h3>
<p>Añade el nuevo dispositivo a&nbsp; <code>flash.sh</code>; las especificaciones de como hacer esto dependerán de que herramientas necesitas usar para flashear el nuevo dispositivo.</p>
<h2 id="Configura.2C_compila_y.C2.A0_flashea_el_nuevo_dispositivo">Configura, compila y&nbsp; flashea el nuevo dispositivo</h2>
<p>Ahora puedes probar compilando y flasheando tu nuevo dispositivo:</p>
<pre>
ANDROIDFS_DIR=my_device_backup ./config.sh &lt;device_id&gt; default.xml
./build.sh
./flash.sh</pre>
<h2 id="Probar_y_depurar">Probar y depurar</h2>
<p>Necesitamos añadir algunos detalles aqui; de hecho, este artículo podría usar algo de ayuda.</p>
<h2 id="FAQ">FAQ</h2>
<p>Próximamente</p>
<h2 id="Mira_tambi.C3.A9n">Mira también</h2>
<ul>
  <li><a href="https://developer.mozilla.org/es/docs/Mozilla/Firefox_OS" title="/en-US/docs/Mozilla/Boot_to_Gecko">Boot to Gecko</a></li>
  <li><a href="https://github.com/mozilla-b2g/B2G" title="https://github.com/mozilla-b2g/B2G">Código fuente de B2G en Github</a></li>
  <li><a href="http://www.android.com/" title="http://www.android.com/">Sitio web de Android</a></li>
</ul>
Revertir a esta revisión