# Eudyptula Challenge Le challenge étant fermé, je m'appuie sur les questions trouvables sur des dépôts Github. Vous pouvez trouver des réponses (ainsi que des questions) [sur Github](https://github.com/search?q=Eudyptula). À noter que j'utilise la commande `indent -linux` pour pouvoir indenter et formater les fichiers sources selon la convention du kernel Linux. J'utilise aussi le script `checkpatch.pl -f` pour pouvoir vérifier plus en profondeur si mes fichiers sources suivent bien la convention (cf. tache 4). ## Compilation La version utilisée et testée du kernel est la **6.1.1**. Les challenges n'ont pas été testés sur des versions plus récentes ou plus vieilles. Il vous faut les fichiers d'entetes du kernel Linux (`linux-headers` sur les distributions basées Debian et apt pilulé). Il suffit ensuite d'aller dans le dossier de votre choix et faire `make`. Parfois, d'autres commandes sont nécessaires. Lisez la partie réponse pour avoir ces dernières. ## Réponses L'Eudyptula challenge demande souvent des preuves de notre réussite. Vous pouvez retrouver les commandes et leur résultat ici. ### Tache 1 Pour montrer que mon module marche bien, on regarde les logs du kernel avec la commande `dmesg`. ``` # après insmod hello.ko [102102.117958] Coucou le gens !!!! # après rmmod hello [102108.046104] Tschuss !!! ``` * [The Linux Kernel Module Programming Guide](https://sysprog21.github.io/lkmpg) ### Tache 2 J'utilise Gentoo et configure puis compile moi-même mon kernel. Je passe cette étape. ### Tache 3 Patch basé sur la version `v6.2-rc5` du kernel Linux, créé avec la commande `git format-patch -1 HEAD`. ``` From 6f41b705dbde5b42167c03b8d14ae695b226cb86 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 23 Jan 2023 16:49:42 +0100 Subject: [PATCH] custom extraversion --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c1ead4cd2342..d67f2f5eb831 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ VERSION = 6 PATCHLEVEL = 2 SUBLEVEL = 0 -EXTRAVERSION = -rc5 +EXTRAVERSION = -eudyptula NAME = Hurr durr I'ma ninja sloth # *DOCUMENTATION* -- 2.39.1 ``` ### Tache 4 Je n'ai pas mit les fichiers corrigés. Il suffit d'utiliser la commande `indent` pour pouvoir bien indenter le code dans un premier temps. Il faut ensuite utiliser le script `scripts/checkpatch.pl` sur les fichiers pour trouver les derniers soucis. * [Les conventions de code (Documentation Kernel)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/coding-style.rst) ### Tache 5 Il faut dans un premier temps générer l'alias du module. Cela va permettre de lier les périphériques disponibles pour le module avec. 2 façons: * `depmod $(uname -r) $(pwd)/task_5/my-usb-detect.ko` en étant à la racine du dépôt git. **Cela va cependant réécrire le fichier `/lib/modules/$(uname -r)/modules.alias`, ce qui peut casser votre installation Linux.** Faites un backup de votre dossier avant. * `cp task_5/my-usb-detect.ko /lib/modules/$(uname -r)/ && depmod -A` La deuxième méthode est la plus recommandée. Je l'ai trouvé après avoir écrit le module sans réussir à le charger. Le blog de Nihaal explique de manière détaillée le fonctionnement des modules et de la détection de périphériques. ``` # on branche le clavier [ 6712.426017 ] usb 2-3: new full-speed USB device number 4 using xhci_hcd [ 6712.569813 ] usb 2-3: New USB device found, idVendor=046d, idProduct=c52b, bcdDevice=24.01 [ 6712.569826 ] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 6712.569830 ] usb 2-3: Product: USB Receiver [ 6712.569833 ] usb 2-3: Manufacturer: Logitech [ 6712.575345 ] input: Logitech USB Receiver as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0/0003:046D:C52B.0007/input/input32 [ 6712.629923 ] hid-generic 0003:046D:C52B.0007: input,hidraw0: USB HID v1.11 Keyboard [Logitech USB Receiver] on usb-0000:00:14.0-3/input0 [ 6712.634279 ] input: Logitech USB Receiver Mouse as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0008/input/input33 [ 6712.634743 ] input: Logitech USB Receiver Consumer Control as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0008/input/input34 [ 6712.689561 ] input: Logitech USB Receiver System Control as /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.1/0003:046D:C52B.0008/input/input35 [ 6712.689844 ] hid-generic 0003:046D:C52B.0008: input,hiddev96,hidraw1: USB HID v1.11 Mouse [Logitech USB Receiver] on usb-0000:00:14.0-3/input1 [ 6712.693283 ] hid-generic 0003:046D:C52B.0009: hiddev97,hidraw2: USB HID v1.11 Device [Logitech USB Receiver] on usb-0000:00:14.0-3/input2 # notre module s'est chargé tout seul !! [ 6713.143767 ] Coucou le gens !!!! [ 6713.259818 ] elogind-daemon[3774]: Watching system buttons on /dev/input/event18 (Logitech USB Receiver Consumer Control) [ 6713.260009 ] elogind-daemon[3774]: Watching system buttons on /dev/input/event19 (Logitech USB Receiver System Control) [ 6713.663077 ] elogind-daemon[3774]: Watching system buttons on /dev/input/event16 (Logitech USB Receiver) # le clavier est débranché et notre module n'est pas déchargé. [ 6716.982578 ] usb 2-3: USB disconnect, device number 4 ``` Il faut le décharger à la main avec `rmmod`. * [Writing USB Device Drivers (Documentation Kernel)](https://www.kernel.org/doc/html/latest/driver-api/usb/writing_usb_driver.html) * [USB hotplugging/USB Modutils Support (Documentation Kernel)](https://www.kernel.org/doc/html/latest/driver-api/usb/hotplug.html#usb-modutils-support) * [usb-skeleton.c (Code Kernel)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/usb/usb-skeleton.c) * [Nihaal - Eudyptula Challenge Task 5](https://nihaal.me/post/ec5/) ## Informations diverses Je liste dans cette section quelques informations que j'ai pu découvrir en lisant des ressources histoire de pouvoir les retrouver rapidement dans le futur. ### /proc On peut retrouver la liste des drivers avec leur numéro majeur, le tout découpé entre les *character devices* et les *block devices*.