mozilla

Porter Boot to Gecko

Firefox OS (Boot to Gecko) utilise un noyau dérivé d'Android, avec par dessus une interface utilisateur basée sur Gecko. Cet article fournit un guide de base sur la façon de porter le système d'exploitation sur de nouveaux appareils.

Ce guide suppose que vous faite un portage sur un nouvel appareil qui exécute déjà Android; si vous faites un portage vers un autre type d'appareil, le travail va nécessiter davantage d'investissement.

Configurer votre système de build

La première étape consiste à configurer votre système de buid; vous pouvez suivre le guide pré-requis pour compiler Firefox OS.

Créer une sauvegarde locale du système Android d'origine

Ensuite, vous devez faire une sauvegarde de votre appareil Android avant de commencer à l'atomiser avec vos builds de test de B2G. De plus, certaines parties seront nécessaires pour le processus de build et d'installation.

mkdir sauvegarde_de_mon_appareil
cd sauvegarde_de_mon_appareil
adb pull /system system

Cloner les répertoires B2G

La première étape consiste à cloner le dépôt B2G ainsi que le dépôt contenant les manifestes.

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

Ajouter un nouvel appareil à config.sh

L'étape suivante consiste à ajouter un nouvel appareil à config.sh dans le dépôt B2G;  vous pouvez utiliser un de ceux qui existent comme modèle. Ceci implique simplement de fournir les instructions permettant de récupérer les bons fichiers pour faire le build.

Créer un manifeste pour le nouvel appareil

Mainenant, vous devez ajouter un fichier manifeste pour le nouvel appareil. Utilisez l'un des manifestes existant comme modèle. Vous pouvez utiliser le manifeste hamachi comme référence. Une fois que c'est fait, vous pouvez ajouter et livrer votre nouveau manifeste dans votre dépôt local b2g-manifest :

git add mon-nouvel-appareil.xml
git commit

Ensuite, il faudra indiquer au fichier config.sh d'utiliser votre dépôt local b2g-manifest à la place du dépôt officiel. Pour réaliser cela, modifiez la valeur des variables GITREPO et BRANCH dans le fichier config.sh pour qu'elles pointent vers l'emplacement de votre dépôt local et de la branche souhaitée, par exemple :

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

Créer une arborescence de configuration pour le nouvel appareil

Créer une nouvelle arborescence pour le nouvel appareil. Elle doit se trouver dans device/<manufacturer>/<device_id>. Cette arborescence doit inclure au moins :

  • AndroidBoard.mk
  • AndroidProducts.mk
  • BoardConfig.mk
  • extract-files.sh
  • full_<device_id>.mk
  • fichiers idc pour l'écran tactile
  • fichiers init (init.rc, init.<target>.rc, uevent.rc, ...)

Ici, le contenu peut grandement différer d'un appareil à l'autre. En particulier, les fichiers BoardConfig.mk et extract-files.sh peuvent différer significativement. Cette partie nécessite pas mal de modifications, de test et de débogage pour déterminer quels blobs binaires doivent être extraits. Pour avoir une meilleure idée de qu'on est supposé trouver ici, jetez un oeil à configuration pour l'appareil hamachi. Rappelez-vous de référencer correctement votre propre arborescence de configuration dans le manifeste aue vous avez créé pour votre nouvel appareil.

Note: Si vous pouvez trouver une référence existante sur CyanogenMod pour votre appareil, ces informations accélèreront le processus de portage. Le forum XDA est un autre bon endroit pour discuter et vérifier des informations.

Reconstruire boot.img

Une fois que tout cà est fait, vous devez reconstruire l'image de boot. Ce n'est habituellement pas nécessaire pour le noyau lui-même mais pour récupérer les modifications dans init.rc.

Modifications dans init.rc

Le init.rc que vous utilisez n'est pas celui fourni par B2G; à la place, vous devez le récupérer depuis votre appareil.

Les principales choses que vous aurez besoin de modifier sont :

Importer init.b2g.rc

Ajouter les lignes suivantes pour importer init.b2g.rc:

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

Corriger les permissions

Corrigez les permissions des fichiers /system/b2g/b2g, /system/b2g/updater et /system/b2g/plugin-container; ceci doit être fait après les lignes qui montent le système de fichier en lecture/écriture:

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

Vous pourriez vouloir commencer en modifiant init.rc provenent du nouvel appareil au lieu d'utiliser le init.rc fourni par le système de build; dans ce cas, vous devez vous rappeler de renseigner TARGET_PROVIDES_INIT_RC dans BoardConfig.mk.

Noyau pré-compilé vs. compiler le noyau depuis le code source

Vous pouvez utiliser un noyau pré-compilé ou vous pouvez compiler le noyau à partir du code source. Pour compiler le noyau à partir du code source, ajoutez AndroidKernel.mk et la configuration du noyau dans l'arborescence de configuration de l'appareil.

Le maguro sur l'ancien système de build est un exemple qui compile le noyau à partir du code source.

Extraire et modifier une image de boot existante

Il est possible de récupérer l'image de boot d'un téléphone en extrayant le contenu des devices /dev/mtd/mtd1 ou /dev/mtd/mtd2, le fichier image résultat peut ensuite être facilement récupéré :

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

Une fois que le fichier de l'image de boot a été obtenu, il peut être décompressé à l'aide d'un utilitaire tel que unmkbootimg. L'outil va extraire à la fois l'image du noyau (zimage) et le disque mémoire (ramdisk initramfs.cpio.gz) et également afficher une commande permettant de re-compiler l'image avec les mêmes paramètres que ceux utilisés pour l'image d'origine, par exemple :

$ 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
---------------

Pour modifier le fichier ramdisk, créez un répertoire destination et extrayez-le dedans:

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

Faîtes toutes les modifications nécessaires (telles que la modification de init.rc) puis recompressez le ramdisk en utilisant mkbootfs et assurez-vous que la version a été compilée avec les outils B2G de l'hôte :

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

Enfin, retournez au répertoire de premier niveau et re-compressez l'image de boot en utilisant mkbootimg; assurez-vous également que vous utilisez la version compilée avec loutils de l'autre hôte B2G:

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

Si vous copiez maintenant votre nouvelle image de boot dans out/target/product/$DEVICE/boot.img (où $DEVICE est le nom de votre device), elle sera automatiquement flashée quand flash.sh est appelé. Alternativement, vous pouvez la flasher à la main avec les commandes suivantes :

adb reboot bootloader
fastboot flash boot newboot.img
fastboot reboot

Ajouter le nouvel appareil à flash.sh

Ajoutez le nouvel appareil à flash.sh; les spécificités sur la façon de faire cela dépendront des outils qui seront utilisés pour flasher le nouvel appareil.

Configurer, compiler et flasher le nouvel appareil

Maintenant, vous pouvez essayer de compiler et de flasher votre nouvel appareil:

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

Test et débogage

Nous avons besoin d'ajouter certains détails ici; en fait, c'est tout l'article qui pourrait nécessiter de l'aide.

FAQ

À venir.

Voir également

Étiquettes et contributeurs liés au document

Contributeurs à cette page : poum, dattaz
Dernière mise à jour par : dattaz,
Masquer la barre latérale