5.7 KiB
Travail Pratique 3
Objectif
Le but du travail est de manipuler le source d'un noyeau linux en le patchant et en le compilant avec notre chaine de compilation croisée pour le mettre sur notre carte
Preparation
[Q1] : Quelle est la version du noyau sur votre machine de développement ?
Sur ma machine perso je suis sur macos mais sur la machine virtuelle X86 que j'ai mise en place pour ces TP on peut faire la commande uname -ir
Et on a ce resultat
uname -ir
6.8.0-45-generic x86_64
J'ai donc une version stable du kernel linux 6.8.0
Obtenir les sources du noyau Linux
[Q2] : Quelle est la dernière version stable du noyau Linux selon le site officiel (indiquez la date de consultation) ?
La dernière version stable au moment ou je regarde sur www.kernel.org le 10 octobre 2024 est la 6.11.3
[Q3] : Quelle est la dernière version stable longterm du noyau Linux possédant la plus longue EOL (End Of Life) ? Quelle est sa EOL (indiquez la date de consultation) ?
Les versions long term support au moment ou je regarde sur www.kernel.org le 10 octobre 2024 sont:
- la 6.6.56 Support jusqu'à Décembre 2026
- la 6.1.112 Support jusqu'à Décembre 2026
- la 5.15.167 Support jusqu'à Décembre 2026
- la 5.10.226 Support jusqu'à Décembre 2026
Elles expirent donc toutes en décembre 2026... bizarre mais bon on va prendre la plus récente quand même qui dans notre cas es la 6.6.56
Pour accèder à toutes les versions de linux disponibles et pas juste celles qui sont mises en avance sur kernel.org on peut aller sur https://www.kernel.org/pub/linux/kernel/ et voir directement chaque version.
Dans notre cas on veut la mainline 6.5
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.5.tar.xz
[Q4] : Est-ce que la combinaison de cette version du noyau et votre chaîne de compilation croisée risque de poser problème ? Justifiez en développant votre réponse.
j'ai trouvé la version des headers de notre version de chaine de compilation et c'est la 4.19.315pour trouver cette info il suffit de retourner sur le site de bootlin ou on a telechargé cette dernière.
On peut donc voir que nos headers sont bien plus vieux que notre noyeau linux et c'est bien car les noyeaux sont rétrocompatibles. Le problème aurait été si notre chaine de compilation était plus récente que notre noyeau et la ca aurait été problematique.
[Q5] : Quel est le nombre total de fichiers sources (.c, .h, et .S) du noyau que vous venez de télécharger ? Déterminer cette valeur en utilisant seulement une seule exécution de la commande find (astuces : find accepte l’argument -o pour réaliser un “ou” logique et pensez à utiliser pipe sur la sortie de find avec le compteur de lignes wc -l).
find ./ \( -name "*.h" -o -name "*.c" -o -name "*.S" \) | wc -l
Avec cette commande on peut chercher plusieurs noms de fichiers différents. Dans le cas présent je me suis posé à la racine du kernel.
-name permet de spécifier que l'on veut filtrer sur le nom du fichier
-o permet d'indiquer un OR pour dire que on chercher plusieurs noms de fichiers possibles
Le résultat est : 56888 fichiers c'est un peu abusé mais bon ca comprend toutes les architetures possibles drivers etc...
[Q6] : Quels fichiers patch devez vous donc télécharger ?
Pour rappel, on a pas telechargé la version 6.6.56 mais la version mainline 6.5 pour permettre de s'amuser avec les patchs. Mais évidemment si on devait le faire pour de vrai en perdant le moins de temps possible on utiliserait juste git ou on prendrait tout simplement la dernière version directement sur kernel.org
Si on rergarde la nomenclature de notre version 6.6.56 et 6.1.112 on peut voir que la version téléchargée est 5 versions mineures derrière la version cible.
Pour patcher notre kernel on doit donc passer par deux étapes :
1: passer à la version Mainline (ici passer de 6.5 à 6.6) 2: passer de la version Mainline à la version longterm avec les différentes modifications (ici de passer de 6.6 à 6.6.112)
Préparation à la compilation croisée du noyau
Configuration du noyau
[Q7] : Quelle configuration avez-vous choisie ?
[TODO]
[Q8] : Comment pouvez-vous vous assurez avec une assez bonne certitude qu’il s’agit de la bonne configuration ?
[TODO]
Compilation croisée du noyau
[Q9] : Une fois la compilation du noyau terminée, où se trouve le noyau compilé et quelle est sa taille ?
[TODO]
[Q10] : Aussi, quel est le fichier de Device Tree Blob (binaire) pour votre carte Sama5D3 Xplained et quelle est sa taille ?
[TODO]
[Q11] : Quelle est la nouvelle taille du noyau et quel pourcentage de taille en espace disque avez-vous ainsi gagné par rapport au noyau précédent ?
[TODO]
Chargement et boot du noyau avec U-Boot
[Q12] : Indiquez la séquence de commandes vous ayant permis de charger noyau et DTB et booter dessus.
[TODO]
[Q13] : Après avoir lu les messages d’erreur du noyau, expliquez aussi simplement que possible, quelle est la raison de la “panique” (ou crash) du noyau ?
[TODO]
[Q14] : Donnez le “code” U-Boot que vous avez écrit pour réaliser ce boot automatique.
[TODO]
## Flasher le noyau et le Device Tree dans la NAND
[Q15] : Quelle sont les tailles, en bytes et KBytes, réservées dans la flash NAND au noyau et au Device Tree ?
[TODO]
[Q16] : Comment pouvez-vous vous assurer que la NAND a bien été effacée ?
[TODO]
[Q17] : Donnez le contenu des scripts update_kernel et update_dtb.
[TODO]
Booter le noyau depuis la NAND
[Q18] : Donner les commandes U-Boot que vous avez écrites par accomplir ceci.
[TODO]
[Q19] : Donnez le contenu de vos scripts permettant de ne flasher que l’espace nécessaire dans la NAND de votre carte.
[TODO]