Notes au sujet de linux-bl Construction basée sur «Debian Linux Kernel Handbook» version 1.0.19-1-g9b33d7c7b390 + infaillible méthode "read the source, Luke" ==================================================================================== --- Pré-requis : - apt install cpio kernel-wedge dh-exec --- I. sources (2.2) Le noyau est construit à partir d'une archive source linux_version.orig.tar.xz) (dont les fichiers problèmatiques ont été préalablement supprimés) - Je récupère http://download.tuxfamily.org/librazik/decepas/pool/main/l/linux/linux_4.9.168.orig.tar.xz ce que librazik propose de plus récent en date du mar. 30 juil. 2019 II. préparation Je pars sur la méthode qui correspond à ce qu'on veut faire. (4.5) Construction de noyau personnalisé depuis la source Debian La source debian se situe à l'emplacement : http://security.debian.org/debian-security/pool/updates/main/l/linux/linux_4.9.168-1+deb9u4.debian.tar.xz - Je peux extraire les 2 sources, ce qui crée la structure de départ "linux-4.9.168/debian" À partir d'ici, je me réfère au fichier debian/README.source, qui explique la hiérarchie de fichiers. Pour le reste, je fais mes propres déductions à la lecture des sources. (la méthode handbook est vraisemblablement adressée aux utilisateurs, la méthode qui suit utilise l'outillage avancé qui est mis au point par les mainteneurs) À partir du README.source, on a apprend : - debian/control est un fichier auto-généré, une règle permet de faire cela en appelant le programme debian/bin/gencontrol.py C'est une combinaison du dossier "templates" ainsi que de fichiers "define". Cette génération doit être réalisée en amont, et non durant la construction de paquet. - les configurations de noyaux sont dynamiquement construites. Pour cela, un script va récupérer les éléments généraux, puis spécifiques aux architectures et variantes, puis va aggréger cela dans une config unique, individuellement pour chaque paquet. -- (I) Je peux supprimer les fichiers auto-générés à l'aide de la règle `maintainerclean` make -f debian/rules maintainerclean (II) Je peux regénérer le fichier `control`, les `rules.gen` et autres (à faire plus tard, après édition des configurations) (note : faire maintainerclean avant) make -f debian/rules debian/control -- Pour nos noyaux -lzk-bl, -lzk-rt on va définir un "featureset". Ces définitions se trouvent, pour le -rt prédéfini, dans le dossier debian/featureset-rt Pour le nouveau "featureset", il faut également le renseigner dans `debian/config/defines` Par exemple la partie "featuresets" devient : ``` featuresets: none rt lzk-bl ``` Il faut également écrire une section qui active le "featureset". ``` [featureset-lzk-bl_base] enabled: true ``` Ensuite, on doit aller dans `config/amd64/defines` et ajouter le "featureset" à l'architecture. (c'est pareil avec `config/i386/defines` et les autres) Par exemple la section concernée devient : ``` featuresets: none rt lzk-bl ``` Ensuite, on crée `config/amd64/lzk-bl/defines`, à l'identique de `config/amd64/rt/defines`. (c'est la même chose avec i386) ``` [base] flavours: amd64 ``` -- Voici la configuration que j'écris pour un lzk-bl (basée sur le fichier -rt) : (je n'ai probablement pas renseigné toutes les options nécessaires, config noyau à revoir) debian/config/featureset-lzk-bl/config -------------------------------------- ``` ## ## file: certs/Kconfig ## #. Certificate paths are resolved relative to debian/build/source_rt CONFIG_SYSTEM_TRUSTED_KEYS="../../certs/benh@debian.org.cert.pem" ## ## file: init/Kconfig ## #CONFIG_RCU_EXPERT=y ## ## file: kernel/Kconfig.preempt ## ## choice: Preemption Model # CONFIG_PREEMPT_VOLUNTARY is not set CONFIG_PREEMPT=y ## end choice ## ## file: kernel/trace/Kconfig ## #CONFIG_SCHED_TRACER=y #CONFIG_HWLAT_TRACER=y #CONFIG_WAKEUP_LATENCY_HIST=y #CONFIG_MISSED_TIMER_OFFSETS_HIST=y ## LibraZiK-2 CONFIG_HZ=1000 CONFIG_HZ_1000=y # [etc....] ``` debian/config/featureset-lzk-bl/defines --------------------------------------- ``` [abi] ignore-changes: * [description] part-long-lzk-bl: This kernel includes the LibraZiK low-latency configuration. part-short-lzk-bl: LZK_BL parts: lzk-bl ``` Désormais à l'aide des commandes (I) et puis (II), je peux recréer debian/control et divers fichiers. Si tout s'est bien passé : - les noyaux "lzk-bl" sont renseignés dans le control généré - on a dans debian/ les fichiers linux-headers-* linux-image-* pour lzk-bl Mise en places des rustines =========================== Je crée debian/patches/series-lzk-bl. Comme -bl n'ajoute pas de rustine, ça devrait être un fichier vide. Problème : cela bloque quilt, alors je vais simplement créer un simple patch et l'insérer dans la série. (par ex : ajouter un README.LZK_BL) debian/patches/lzk/lzk.patch ``` diff --git a/README.LZK_BL b/README.LZK_BL new file mode 100644 index 0000000..d94e791 --- /dev/null +++ b/README.LZK_BL @@ -0,0 +1 @@ +This is the source code of -lzk-bl for LibraZiK. ``` debian/patches/series-lzk-bl ``` lzk/lzk.patch ``` *** (dans le cas particulier de `-lzk-rt`, j'écrirai dans `debian/patches/series-lzk-rt` une copie du contenu de `debian/patches/series-rt`) Création des sources ==================== Cette commande appliques les rustines valables pour toutes les variantes, et génère le dossier .pc qui est indispensable pour l'étape "source". ``` make -f debian/rules orig ``` L'étape "source" met en place le dossier de sources qui sert à la construction. Il se situe à l'emplacement "debian/build/source_lzk-bl/". Pour lancer l'étape source : ``` fakeroot make -f debian/rules.gen source_lzk-bl ``` Construction de noyau ===================== Ces commandes servent à construire uniquement la variante lzk-bl. (pour utiliser les règles debian/rules, il faudrait faire le ménage de toutes les configurations non-utilisés) -- Pour les paquets indépendents de l'architecture : # fakeroot make -f debian/rules.gen binary-indep_lzk-bl Pour les paquets amd64 : # fakeroot make -f debian/rules.gen binary-arch_amd64_lzk-bl Pour les paquets i386 : # fakeroot make -f debian/rules.gen binary-arch_i386_lzk-bl