Compilation de l’image

Un portage d’Ubuntu Touch utilisant Halium 7.1 se décompose suivant ces étapes :

  • L’image de démarage, halium-boot.img

  • L’image système, system.img

  • La racine du système de fichier de UBports - Ubuntu Touch - (référée à partir de maintenant comme étant le « rootfs »)

L’image de démarrage contient le noyau Linux, le cœur du système d’exploitation, qui a besoin d’être recompilé pour chaque appareil différent. L’image système est également spécifique à chaque appareil et est, elle aussi, compilée depuis le code source. Le rootfs, quant à lui, est maintenu par le projet UBports et est téléchargeable sous forme d’une archive .tar.gz et est installée en même temps que le system.img.

Compilation de l’image système Halium

La première chose à faire de compiler l’image système Halium conformément au guide de portage. Ce ne sont pas images à installer directement. Il s’agit uniquement d’un prérequis pour le portage de votre appareil. En d’autres mots, c’est un test pour confirmer que vous avez configurer un environnement de développement viable qui peut être utilisé pour faire les images finales.

Avant de commencer, dirigez-vous vers le guide du portage d’Halium et suivez les instructions décrites là-bas, tout en vous rappelant que vous faîtes un portage pour Halium 7.1.

Une fois que l’image système a correctement été compilée (sans erreurs), vous saurez que votre environnement de développement est correctement configuré. Vous pourrez alors revenir ici et faire la suite.

Compilation des images pour Ubuntu Touch

Correction des points de montage

Le mount d’halium-boot n’est pas informé des contextes SELinux. Si le fichier fstab de vos appareils inclut des contextes, la partition sur laquelle ils sont n’arrivera pas à être montée et votre portage ne fonctionnera pas correctement.

La première étape de ce processus consiste à déterminer où se trouve votre fichier fstab. La plupart du temps, il est à l’intérieur de BUILDDIR/device/CONSTRUCTEUR/NOM_DE_CODE/rootdir/etc``(ex. pour le Samsung S7 - nom de code *herolte* : ``halium/device/samsung/herolte/rootdir/etc) et il est appelé soit fstab. qcom soit fstab. devicename. Ouvrez le fichier pour le modifier.

Si le type de la partition « data » ou « userdata » est f2fs, il est nécessaire de la changer en ext4.

Une fois le fichier ouvert, supprimez toutes les options context= de tous les dispositifs de blocs dans le fichier. L’option démarrera au niveau du texte context= et se terminera à la virgule suivante.

Par exemple, la ligne ro,nosuid,nodev,context=u:object_r:firmware_file:s0,barrier=0 doit devenir ro,nosuid,nodev,barrier=0

Enregistrer et quitter.

Modification de la configuration du noyau

Ubuntu Touch a besoin d’une configuration de noyau légèrement différente de celle d’Halium, intégrant l’activation d’Apparmor. Cela est possible en utilisant un script, check-kernel-config, qui est inclus dans le répertoire « halium-boot ». Exécutez-le tout simplement sur votre configuration comme indiqué ci-dessous

./halium/halium-boot/check-kernel-config path/to/my/defconfig -w

Vous devrez peut-être le faire deux fois. Cela va probablement corriger les choses les deux fois. Lancez ensuite le script sans l’indicateur -w pour voir s’il y a d’autres erreurs. S’il y en a, corrigez-les manuellement. Une fois terminé, lancez le script sans le l’indicateur -w` une fois de plus pour vous assurer que tout est correct.

Ubuntu Touch requière le paramètre console=tty0

L’initramfs de halium-boot s’attend à ce que /dev/console soit une console système et ne démarrera pas si elle n’est pas disponible. C’est généralement pas le cas sur les appareils récents, car, soit ils n’ont pas d’UART activé, soit ils n’ont pas de console= défini par défaut. Cela peut être réglé en rajoutant console=tty0 à la fin des arguments du noyau. Pour ce faire, suivez les instructions suivantes :

Cela devrait être fait dans le makefile nommé BoardConfig.mk (ou BoardConfigCommon.mk) situé à la racine des sources de votre appareil, ex. ~/halium/device/<vendeur>/<nom_de_code_du_modèle>/BoardConfig.mk

Ajoutez les lignes suivantes :

BOARD_KERNEL_CMDLINE += console=tty0

Si votre makefile contient déja une ligne commençant par BOARD_KERNEL_CMDLINE, vous pouvez le rajouter juste en dessous pour tout garder en ordre.

Note

La méthode ci-dessus, bien que recommandée, peut ne pas fonctionner pour certains appareils Samsung. Le résultat sera que vous ne pourrez pas accéder à l’appareil par SSH après le démarrage et qu’Unity 8 ne pourra pas démarrer. Si vous rencontrez ce problème, vous pouvez spécifier le paramètre dans le fichier de configuration du noyau de votre périphérique à la place. Ajoutez les lignes suivantes

CONFIG_CMDLINE="console=tty0"
CONFIG_CMDLINE_EXTEND=y

Note

Dans de rares cas, le chargeur d’amorçage écrase l’argument de la ligne de commande du noyau, ce qui rend le paramètre ci-dessus inutile. C’est le cas pour le Google Pixel 3a (sargo). Pour régler ce problème, répliquez ce code.

Construction de halium-boot.img et de system.img

Vous êtes maintenant prêt à construire les deux fichiers images pour intégrer les changements que vous avez apportés. Ces changements ont un impact à la fois sur l’image de démarrage et sur l’image du système, vous devrez donc les reconstruire toutes les deux. La procédure est simple et directe. Exécutez la séquence de commandes ci-dessous, où BUILDDIR est la racine de votre arborescence source d’Halium (par exemple « ~/halium ») :

  1. cd BUILDDIR

  2. source build/envsetup.sh

  3. breakfast devicename

  4. mka halium-boot

  5. mka systemimage

Résolution des problèmes lors du processus de construction

Consultez le`gui de du portage d’Halium <http://docs.halium.org/en/latest/porting/build-sources.html#documented-errors>`_