-
Notifications
You must be signed in to change notification settings - Fork 1
Utilisation des Makefile's
Les Makefile
's sont séparés en plusieurs sections en fonction de leur domaine d'application.
Il y a donc le Makefile
:
-
vm/Makefile
: Pour l’exécution de la machine virtuelle de test. -
module/Makefile
: Pour la compilation, le chargement et le déchargement du module sur le système hôte. -
vm/system/Makefile
, Pour la compilation du noyau Linux, la création de l'image du système d'exploitation minimal et la compilation du module de la machine virtuelle de test.z -
Makefile
: Wrapper permettant d'appeler tous les sous-Makefile
's depuis la racine du projet.
Cette tâche va se charger de lancer une machine virtuelle de 1Gio de RAM avec qemu
. C'est dans cette VM que la magie s'opère !
La VM est constituée :
- D'un noyau Linux compilé par nos soins (version
5.13.1
, avec certains flags de compilations importants pour le debug, notamment des flags pour l'activation de KASAN) - D'une image système minimale (avec quasiment aucun paquet d'installé dessus)
- D'un service de connexion SSH (non utilisé car nous nous connectons directement en via l'interface
tty
deqemu
) - Du projet compilé par le noyau linux version
5.13.1
- Des potentiels fichiers placés dans le dossier
dropzone
À noter que des logs de VM sont générés avec
tee
. Ils sont stockés dansbuild/vm/logs
Tous les fichiers générés par le Makefile sont placés dans build/vm
. La tâche make clean
supprime donc le dossier build/vm
.
Cette tâche est directement liée aux sous-tâches des Makefile's de Linux. Elle va appeler le Makefile du noyau Linux pour compiler les sources du module.
Les sorties de compilation du modules sont placées dans le dossier build/module
.
Cette tâche va charger le module sur le système.
Attention donc à ne pas le faire sur le système hôte si le module est encore instable !
Il s'agit de la tâche opposée à make load
, elle se charge de décharger le module du système.
Les données de compilation sont créées dans module/
puis déplacées dans le dossier build/module
. La tâche clean
va donc supprimer le dossier build/module
ainsi que les éventuels résidus dans
module/
Cette tâche va lancer le script vm/system/create-image.sh
, qui va se charge de créer de créer une image minimale basée sur Debian.
Cette tâche va télécharger le code source du noyau Linux et le compiler avec les flags :
CONFIG_KCOV=y
CONFIG_DEBUG_INFO=y
CONFIG_KASAN=y
CONFIG_KASAN_INLINE=y
Ces flags permettent d'activer KASAN (Kernel Address Sanitizer) ainsi que d'autres options de débogage.
La compilation du noyau peut prendre pas mal de temps ! Merci d'aller vous faire un ou deux cafés... ☕
Comme la tâche make modules
, cette tâche va compiler les sources de notre module pour en sortir un kernel object. La seule différence avec make modules
est que cette fois-ci le module sera compilé avec notre noyau précédemment compilé (version 5.13.1
). Nous faisons cela afin de pouvoir lancer notre module dans notre machine virtuelle de test.
Les fichiers de compilation du modules (compilé avec le noyau version 5.13.1
) sont placés dans build/system/kernel/module
. clean-module
va donc supprimer le dossier build/system/kernel/module
.
Le noyau compilé est placé dans build/system/kernel/linux-5.13.1
. clean-kernel
va donc supprimer le dossier build/system/kernel/linux-5.13.1
.
L'image système créée pour la machine virtuelle est placée dans build/system/image
. clean-image
va donc supprimer build/system/image
.
Équivalent de make clean-module
et make clean-kernel
et make clean-image
.
Notez que le dossier
build/system
sera supprimé.
Équivalent à make modules
dans module/Makefile
.
Dans cette tâche, le kernel object initialement placé dans
build/module
est copié à la racine du projet.
Installe toutes les dépendances nécessaires à la bonne exécution des Makefile
's.
L'installation des dépendances ne fonctionne que pour les systèmes possédants les gestionnaires de paquets
apt
oupacman
. Si la commande échoue, tentez d'installer l'un des deux et de s'assurer qu'ils fonctionnent.
- wget servira à télécharger les archives nécessaires
- Qemu est une machine virtuelle libre qui nous permet de tester dans un environnement sécurisé (qui ne corrompt pas la machine hôte) le module kernel
- gcc, libguestfs, debootstrap, bison ainsi que libncurses-dev, libelf-dev, libssl-dev permettent d'éditer l'image linux téléchargée, recompiler le kernel à des fins de debug et l'adapter à nos besoins de test
Équivalent à make vm
dans vm/Makefile
.
Équivalent à make kernel
dans vm/system/Makefile
.
Équivalent à make module
dans vm/system/Makefile
.
Équivalent à make image
dans vm/system/Makefile
.
Équivalent à make clean
dans module/Makefile
.
Équivalent à make clean
dans vm/system/Makefile
.
Équivalent à make clean-module
dans vm/system/Makefile
.
Désactivé pour des raisons de sécurité (parce-que la compilation c'est long... et recompiler tout un noyau par erreur c'est triste...)
Équivalent à make clean-kernel
dans vm/system/Makefile
.
Équivalent à make clean-image
dans vm/system/Makefile
.
Équivalent à make clean-all
dans vm/system/Makefile
.
Supprime tout le dossier build
(ainsi que le kernel object à la racine du projet s'il existe).
À utiliser avec modération !! Parce-que recompiler un noyau ou une image système c'est super long !