Différences
Ci-dessous, les différences entre deux révisions de la page.
kernel_bissection [Le 10/01/2021, 12:05] – créée Olivier V | kernel_bissection [Le 10/01/2021, 12:11] (Version actuelle) – [Présentation du principe] Olivier V | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Bissection d'un noyau ====== | ||
+ | ===== Présentation du principe ===== | ||
+ | |||
+ | Il peut arriver que quelque chose qui fonctionnait bien dans une version d'un noyau ne fonctionne plus dans la version suivante. | ||
+ | |||
+ | Cela provient de code qui a été modifié... et comme des milliers de ligne de code sont modifiées entre deux versions successives de noyau, la détermination des lignes incriminées n'est pas toujours évidente. | ||
+ | |||
+ | Heureusement les développeurs proposent un outil "Git bisect" | ||
+ | |||
+ | ===== Exemple de mise en oeuvre ===== | ||
+ | |||
+ | ==== Procédé de bissection ==== | ||
+ | |||
+ | Installer des dépendances requises pour la compilation : | ||
+ | $ sudo apt build-dep linux | ||
+ | |||
+ | Télécharger les sources du noyau dans la branche de développement | ||
+ | |||
+ | $ git clone git:// | ||
+ | |||
+ | Entrer dans le répertoire et lancer le processus | ||
+ | |||
+ | $ cd linux | ||
+ | $ git bisect start | ||
+ | |||
+ | Installer et tester la **dernière version RC fonctionnelle** du noyau mainline et la **première version RC non fonctionnelle** du noyau.\\ | ||
+ | Dans l' | ||
+ | |||
+ | Déclarer ces versions comme " | ||
+ | |||
+ | $ git bisect good v5.8-rc7 | ||
+ | $ git bisect bad v5.9-rc1 | ||
+ | |||
+ | En réponse, on obtient le nombre approximatif d' | ||
+ | |||
+ | Lancer la première compilation. | ||
+ | $ make localmodconfig | ||
+ | $ make -j$(nproc) bindeb-pkg | ||
+ | | ||
+ | Installer le nouveau noyau (4 fichiers) avec '' | ||
+ | |||
+ | Redémarrer sur ce noyau. | ||
+ | |||
+ | S'il fonctionne correctement, | ||
+ | $ git bisect good | ||
+ | S'il ne fonctionne pas correctement, | ||
+ | $ git bisect bad | ||
+ | | ||
+ | Lancer la nouvelle compilation. | ||
+ | $ make localmodconfig | ||
+ | $ make -j$(nproc) bindeb-pkg | ||
+ | | ||
+ | Continuer avec '' | ||
+ | |||
+ | A la fin on obtient une sortie du type | ||
+ | < | ||
+ | meloli@Asus-A17: | ||
+ | b2cc23398e8166b38f8715026273503b081c2a7a is the first bad commit | ||
+ | commit b2cc23398e8166b38f8715026273503b081c2a7a | ||
+ | Author: Sathish Narasimman < | ||
+ | Date: Thu Jul 23 18:09:02 2020 +0530 | ||
+ | |||
+ | Bluetooth: Enable RPA Timeout | ||
+ | | ||
+ | Enable RPA timeout during bluetooth initialization. | ||
+ | The RPA timeout value is used from hdev, which initialized from | ||
+ | debug_fs | ||
+ | | ||
+ | Signed-off-by: | ||
+ | Signed-off-by: | ||
+ | |||
+ | | ||
+ | | ||
+ | 2 files changed, 10 insertions(+) | ||
+ | </ | ||
+ | |||
+ | ==== Vérification ultime ==== | ||
+ | |||
+ | En console (adapter le numéro) | ||
+ | $ git checkout b2cc23398e8166b38f8715026273503b081c2a7a | ||
+ | $ make localmodconfig | ||
+ | $ make -j$(nproc) bindeb-pkg | ||
+ | |||
+ | Installer le noyau et vérifier qu'il est incorrect. | ||
+ | |||
+ | $ git checkout b2cc23398e8166b38f8715026273503b081c2a7a^ | ||
+ | $ make localmodconfig | ||
+ | $ make -j$(nproc) bindeb-pkg | ||
+ | | ||
+ | Installer le noyau et vérifier qu'il est correct. | ||
+ | |||
+ | ==== Faire un rapport de bug ==== | ||
+ | |||
+ | Déposer un rapport de bug sur : | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | Préciser que la bissection a déjà été faite et coller le code donné en sortie plus haut. | ||
+ | |||
+ | |||
+ | |||
+ | Contributeur principal : [[: | ||
+ | |||
+ | {{tag> |