2023-01-22 03:04:28 +01:00
|
|
|
# Eudyptula Challenge
|
|
|
|
|
2023-01-23 01:16:29 +01:00
|
|
|
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).
|
|
|
|
|
2023-01-23 17:13:12 +01:00
|
|
|
À noter que j'utilise la commande `indent -linux` pour pouvoir indenter et
|
|
|
|
formater les fichiers sources selon la convention du kernel Linux.
|
2023-01-23 18:53:31 +01:00
|
|
|
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).
|
2023-01-23 01:16:29 +01:00
|
|
|
|
|
|
|
## Compilation
|
|
|
|
|
2023-01-30 01:59:58 +01:00
|
|
|
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é).
|
2023-01-23 01:16:29 +01:00
|
|
|
|
|
|
|
Il suffit ensuite d'aller dans le dossier de votre choix et faire `make`.
|
2023-01-30 01:59:58 +01:00
|
|
|
Parfois, d'autres commandes sont nécessaires. Lisez la partie réponse pour
|
|
|
|
avoir ces dernières.
|
2023-01-23 01:16:29 +01:00
|
|
|
|
|
|
|
## Réponses
|
|
|
|
|
|
|
|
L'Eudyptula challenge demande souvent des preuves de notre réussite. Vous
|
|
|
|
pouvez retrouver les commandes et leur résultat ici.
|
2023-01-23 01:16:45 +01:00
|
|
|
|
|
|
|
### 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 !!!
|
|
|
|
```
|
2023-01-23 17:13:51 +01:00
|
|
|
|
2023-01-27 17:59:44 +01:00
|
|
|
* [The Linux Kernel Module Programming Guide](https://sysprog21.github.io/lkmpg)
|
|
|
|
|
2023-01-23 17:13:51 +01:00
|
|
|
### Tache 2
|
|
|
|
|
|
|
|
J'utilise Gentoo et configure puis compile moi-même mon kernel. Je passe cette
|
|
|
|
étape.
|
2023-01-23 17:14:08 +01:00
|
|
|
|
|
|
|
### 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
|
|
|
|
```
|
2023-01-23 18:54:18 +01:00
|
|
|
|
|
|
|
### 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.
|
2023-01-27 17:59:44 +01:00
|
|
|
|
|
|
|
* [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/)
|
2023-01-30 01:59:58 +01:00
|
|
|
|
|
|
|
## 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*.
|