task_1 | ||
task_5 | ||
.gitignore | ||
LICENSE | ||
README.md |
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.
À 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
Il vous faut les fichiers d'entetes du kernel Linux (linux-headers sur les distributions basées Debian).
Il suffit ensuite d'aller dans le dossier de votre choix et faire make
.
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 !!!
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 <rick@gnous.eu>
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.
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
.