diff --git a/docs/sujets/README.md b/docs/sujets/README.md index abb1ea6..1f07d88 100644 --- a/docs/sujets/README.md +++ b/docs/sujets/README.md @@ -2,7 +2,7 @@ Ordre réel : **ft_linux** (solo) → **Little Penguin** (solo, sur la distro) → **KFS-1** puis **KFS-2** (duo, le second reprend le code du premier). -Le PDF reste la source si une traduction hésite. Les originaux de la racine n’ont pas été déplacés. Une copie renommée est dans `originaux/`. +Le PDF reste la source si une traduction hésite. Les quatre PDF sont dans `originaux/`. Il n’y en a plus à la racine du dépôt. | Ordre | Sujet | Traduction | PDF | |-------|--------|------------|-----| diff --git a/docs/sujets/captures/README.md b/docs/sujets/captures/README.md index 88b61a2..bc15079 100644 --- a/docs/sujets/captures/README.md +++ b/docs/sujets/captures/README.md @@ -2,7 +2,7 @@ Index des images extraites des PDF. Le même visuel sert plusieurs sujets : un seul fichier, plusieurs renvois. -Les PDF d’origine restent la référence si un détail de mise en page compte (surtout les fichiers C de Little Penguin, dont le style est volontairement cassé). +Chaque sujet intègre ces images à l’endroit du PDF, avec la légende recopiée et une interprétation. Les PDF de `originaux/` restent la référence si un espace du code diverge. | Id | Fichier | Où ça apparaît | Ce que montre l’image | |----|---------|----------------|------------------------| diff --git a/docs/sujets/ft_linux.md b/docs/sujets/ft_linux.md index 5dbb4d6..1a3897e 100644 --- a/docs/sujets/ft_linux.md +++ b/docs/sujets/ft_linux.md @@ -4,14 +4,19 @@ Traduction française du sujet. Le PDF reste la source en cas de doute. | | | |--|--| -| Fichier d’origine à la racine | `sujet_ft_linux.pdf` | -| Copie de travail | [originaux/ft_linux_subject.pdf](originaux/ft_linux_subject.pdf) | +| PDF | [originaux/ft_linux_subject.pdf](originaux/ft_linux_subject.pdf) | | Version | 3.6 | | Date du PDF | 7 novembre 2025 | | Pages | 10 | | Résumé (anglais, page de titre) | Make your own linux distribution | -Visuels : [C1](captures/01-couverture-42.png) en couverture, [C2](captures/02-habillage-page.png) en filigrane. Pas de figure technique. +![Marque 42 : bande verticale de triangles gris sur fond noir](captures/01-couverture-42.png) + +**Fig. C1 — page de titre.** Aucun texte dans l’image. Interprétation : habillage graphique de 42. Ce n’est pas une consigne. + +![Filigrane géométrique gris pâle](captures/02-habillage-page.png) + +**Fig. C2 — toutes les pages intérieures.** Aucun texte. Interprétation : le même motif, en filigrane. Pas de schéma, pas de maquette, pas d’arborescence imposée. ## Liens réellement posés dans le PDF @@ -56,7 +61,7 @@ Essayer d’implémenter ce que l’on veut ou dont on a besoin. C’est l’esp - Ce n’est pas REQUIRED, mais on SHOULD lire `this` et `that` tout de suite (POSIX et LSB). Garder ces standards en tête. On ne sera pas noté sur leur respect, mais ce serait une bonne pratique. - Il faut un noyau en version >= 4.0. Stable ou non, du moment que la version est >= 4.0. - Les sources du noyau doivent être dans `/usr/src/kernel-$(version)`. -- Il faut au moins 3 partitions différentes : root, `/boot` et une partition de swap. On peut bien sûr en faire davantage. +- Il faut au moins 3 partitions différentes : root, `/boot` et une partition de swap. On peut, bien sûr, en faire davantage si on le souhaite. - La distribution doit implémenter un `kernel_module` loader, comme udev. - La version du noyau doit contenir le login étudiant. Quelque chose comme `Linux kernel 4.1.2-`. - Le hostname de la distribution doit être le login étudiant. diff --git a/docs/sujets/kfs-1.md b/docs/sujets/kfs-1.md index 57a27ad..beed44c 100644 --- a/docs/sujets/kfs-1.md +++ b/docs/sujets/kfs-1.md @@ -4,15 +4,20 @@ Traduction française du sujet. Le PDF reste la source en cas de doute. | | | |--|--| -| Fichier d’origine à la racine | `kfs-1sujet.pdf` | -| Copie de travail | [originaux/kfs-1_subject.pdf](originaux/kfs-1_subject.pdf) | +| PDF | [originaux/kfs-1_subject.pdf](originaux/kfs-1_subject.pdf) | | Auteurs | 42 Staff, pedago@42.fr | | Version | 1 | | Date du PDF | 26 juillet 2022 | | Pages | 9 | | Résumé (anglais) | The real code ! | -Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.png), et [C3](captures/03-kfs-choose-wisely.png) à la fin de la section langage. +![Marque 42 : bande verticale de triangles gris sur fond noir](captures/01-couverture-42.png) + +**Fig. C1 — page de titre.** Aucun texte dans l’image. Interprétation : habillage 42, pas une consigne. + +![Filigrane géométrique gris pâle](captures/02-habillage-page.png) + +**Fig. C2 — pages intérieures.** Aucun texte. Interprétation : filigrane répété. La seule image qui porte une légende est la fig. C3, dans la section langage. ## Liens @@ -28,7 +33,7 @@ Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.p Bienvenue dans le premier projet Kernel from Scratch. -Enfin du vrai code. L’auteur est à peu près sûr qu’on a été agacé par le projet noyau Linux. Dans les sujets Kernel from Scratch, on écrit un noyau from scratch (no way ?), sans logiciel existant, sans API, ni rien de ce genre. +Enfin du vrai code. L’auteur est à peu près sûr qu’on a été agacé par le projet noyau Linux. Dans les sujets Kernel from Scratch, on écrit un noyau à partir de rien (from scratch, « no way ? »), sans logiciel existant, sans API, ni rien de ce genre. Une fois ces projets finis, sur les épaules de cet OS non révolutionnaire, on aura le droit de rire des développeurs Javascript ordinaires, qui, de toute évidence, ne savent rien coder. @@ -50,7 +55,7 @@ Bonne chance, et surtout, s’amuser. - Du code basique pour afficher des choses à l’écran - Un noyau « Hello world » basique -En fait, ce n’est pas tant de code que ça. Ce sujet est une introduction au développement noyau. « A (wo)man must learn. » +En fait, ce n’est pas tant de code que ça. Ce sujet est une introduction au développement noyau. Quelqu’un doit bien apprendre. Le PDF écrit : « A (wo)man must learn. » ## III. Instructions générales @@ -70,7 +75,9 @@ Exemple C++ : `new` sert aux allocations, aux classes et aux déclarations de st Beaucoup de langages peuvent remplacer le C : C++, Rust, Go, etc. On peut même tout écrire en ASM. Choisir un langage, mais choisir judicieusement. -Image [C3](captures/03-kfs-choose-wisely.png) placée ici : « YOU MUST CHOOSE... BUT CHOOSE WISELY. » +![Chevalier du Graal, texte YOU MUST CHOOSE... BUT CHOOSE WISELY.](captures/03-kfs-choose-wisely.png) + +**Fig. C3 — fin de III.1.2 Langage, page 4 du PDF.** Texte dans l’image, en deux lignes : « YOU MUST CHOOSE... » puis « BUT CHOOSE WISELY. » Interprétation : le personnage (le chevalier du Graal) répète la dernière phrase de la section, sur le choix du langage. Ce n’est pas un schéma d’architecture. Un crédit « quickmeme.com » est visible en bas à droite de l’image. ### III.2 Compilation @@ -136,7 +143,7 @@ Suppléments présentés comme utiles : - Ajouter les couleurs à l’interface d’E/S - Ajouter des helpers comme `printf` / `printk` pour afficher des informations et débugger facilement - Gérer les entrées clavier et les afficher -- Gérer plusieurs écrans, et des raccourcis clavier pour passer de l’un à l’autre +- Gérer plusieurs écrans, et des raccourcis clavier pour passer facilement de l’un à l’autre. Le PDF écrit « between then ». Encadré : le bonus n’est évalué que si l’obligatoire est PERFECT. Perfect veut dire intégralement fait et sans dysfonctionnement. Sinon le bonus n’est pas évalué du tout. @@ -145,7 +152,7 @@ Encadré : le bonus n’est évalué que si l’obligatoire est PERFECT. Perfect Rendre le travail dans le dépôt GiT, comme d’habitude. Seul le travail présent dans le dépôt est noté en soutenance. Il faut rendre le code, un Makefile et une image virtuelle basique pour le noyau. -Attention à cette image (`Carefull` dans le PDF) : le noyau n’en fait encore rien, inutile qu’elle ait la taille d’un éléphant. 10 MB est la borne supérieure. « deal with it. » +Attention à cette image (le PDF écrit `Carefull`) : le noyau n’en fait encore rien, inutile qu’elle ait la taille d’un éléphant. 10 MB est la borne supérieure. À toi de faire avec. Le PDF écrit : « deal with it. » --- diff --git a/docs/sujets/kfs-2.md b/docs/sujets/kfs-2.md index 93c0688..f628222 100644 --- a/docs/sujets/kfs-2.md +++ b/docs/sujets/kfs-2.md @@ -4,15 +4,20 @@ Traduction française du sujet. Le PDF reste la source en cas de doute. | | | |--|--| -| Fichier d’origine à la racine | `kfs-2sujet.pdf` | -| Copie de travail | [originaux/kfs-2_subject.pdf](originaux/kfs-2_subject.pdf) | +| PDF | [originaux/kfs-2_subject.pdf](originaux/kfs-2_subject.pdf) | | Auteurs | 42 Staff, pedago@42.fr | | Version | 2 | | Date du PDF | 26 juillet 2022 | | Pages | 10 | | Résumé (anglais) | Let’s code the stack ! | -Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.png), et la même image [C3](captures/03-kfs-choose-wisely.png) dans la section langage. Pas de schéma de GDT. +![Marque 42 : bande verticale de triangles gris sur fond noir](captures/01-couverture-42.png) + +**Fig. C1 — page de titre.** Aucun texte dans l’image. Interprétation : habillage 42, pas une consigne. Pas de schéma de GDT dans ce PDF. + +![Filigrane géométrique gris pâle](captures/02-habillage-page.png) + +**Fig. C2 — pages intérieures.** Aucun texte. Interprétation : filigrane répété. La fig. C3, plus bas, est la seule image légendée. ## Liens @@ -56,13 +61,13 @@ Ensuite, la pile. Rappel donné tel quel, en anglais dans le PDF, traduit ici : > En informatique, une stack est un type abstrait qui sert de collection d’éléments, avec deux opérations principales : push, qui ajoute un élément à la collection, et pop, qui retire l’élément ajouté le plus récemment et pas encore retiré. L’ordre de sortie donne l’autre nom, LIFO (last in, first out). -« Get it ? Good. Now, let’s move on. » +Tu as compris ? Bien. On avance. Le PDF écrit : « Get it ? Good. Now, let’s move on. » ## III. Objectifs Créer, remplir et lier une Global Descriptor Table dans le noyau. -« Yup, that’s it. Not so much, eh ? » +Ouais, c’est tout. Pas grand-chose, hein ? Le PDF écrit : « Yup, that’s it. Not so much, eh ? » En fait, il faut comprendre comment la mémoire fonctionne vraiment dans un système, comment la pile et la RAM fonctionnent, comment les utiliser, les remplir, et les lier au BIOS. @@ -70,23 +75,35 @@ Oui, le BIOS. Grâce à GRUB, il aidera beaucoup. Heureusement qu’il est déj ## IV. Instructions générales -Même cadre que KFS-1, avec quelques formulations différentes. +### IV.1 Code et exécution -### IV.1.1 Émulation +#### IV.1.1 Émulation -Partie non obligatoire. N’importe quel gestionnaire de virtuel convient. KVM est suggéré. Les exemples du sujet utilisent KVM. +Cette partie n’est pas obligatoire. N’importe quel gestionnaire de machines virtuelles convient. Le sujet suggère KVM : un Kernel Virtual Manager, avec des fonctions avancées d’exécution et de debug. Tous les exemples ci-dessous utilisent KVM. -### IV.1.2 Langage +#### IV.1.2 Langage -Le C n’est pas obligatoire pour cette suite de projets. Les documentations sont souvent en C : un autre langage implique de traduire. Exemple C++ : `new` et les classes exigent une interface mémoire que le noyau n’a pas encore. C++, Rust, Go, ou même tout en ASM, sont cités. +Le C n’est pas obligatoire. On peut utiliser n’importe quel langage pour cette suite de projets. +Tous les langages ne sont pas adaptés à un noyau. On pourrait coder un noyau en Javascript, mais est-ce une bonne idée ? +Beaucoup de documentations sont en C. Choisir un autre langage implique de traduire le code tout du long. -Image [C3](captures/03-kfs-choose-wisely.png) au même endroit que dans KFS-1. +Toutes les fonctionnalités d’un langage ne sont pas utilisables dans un noyau basique. Exemple avec le C++ : ce langage utilise `new` pour l’allocation, les classes et les déclarations de structures. Dans ce noyau, il n’y a pas encore d’interface mémoire, donc ces fonctionnalités sont inutilisables pour l’instant. + +Beaucoup de langages peuvent remplacer le C : C++, Rust, Go, etc. On peut même coder le noyau entier en ASM. + +![Chevalier du Graal, texte YOU MUST CHOOSE... BUT CHOOSE WISELY.](captures/03-kfs-choose-wisely.png) + +**Fig. C3 — section Langage.** Même image que dans KFS-1. Texte dans l’image : « YOU MUST CHOOSE... » puis « BUT CHOOSE WISELY. » Interprétation : elle illustre le choix du langage. Pas un schéma de GDT ni de pile. Crédit « quickmeme.com » en bas à droite. ### IV.2 Compilation -Compilateur libre. L’auteur utilise gcc et nasm. Un Makefile doit être ajouté au dépôt. +#### IV.2.1 Compilateurs -Mêmes flags, présentés comme un exemple C++ : +N’importe quel compilateur. L’auteur utilise personnellement gcc et nasm. Un Makefile doit être ajouté au dépôt. + +#### IV.2.2 Flags + +Pour booter sans dépendance, compiler avec les flags suivants. Les adapter au langage. Ceux-ci sont un exemple pour le C++ : - `-fno-builtin` - `-fno-exception` @@ -95,23 +112,24 @@ Mêmes flags, présentés comme un exemple C++ : - `-nostdlib` - `-nodefaultlibs` -Pas de lien vers une bibliothèque de l’hôte, sinon le noyau ne s’exécute pas. +Attention à `-nodefaultlibs` et `-nostdlib`. Le noyau est compilé sur un système hôte, mais il ne peut être lié à aucune bibliothèque de cet hôte, sinon il ne s’exécutera pas. ### IV.3 Édition de liens -Il faut créer un linker pour le noyau. On CAN utiliser le binaire `ld` de l’hôte. Il est FORBIDDEN d’utiliser le fichier `.ld` de l’hôte. (KFS-1 disait CANNOT ; KFS-2 dit FORBIDDEN.) +On ne peut pas utiliser un linker existant pour lier le noyau. Comme écrit plus haut, le noyau ne booterait pas. Il faut créer un linker pour ce noyau. +Attention : on CAN utiliser le binaire `ld` disponible sur l’hôte, mais il est FORBIDDEN d’utiliser le fichier `.ld` de l’hôte. KFS-1 écrivait CANNOT à cet endroit. KFS-2 écrit FORBIDDEN. ### IV.4 Architecture -i386 (x86) obligatoire. +L’architecture i386 (x86) est obligatoire (on pourra remercier l’auteur plus tard). ### IV.5 Documentation -Le wiki OSDev est recommandé par l’auteur. Lien sur le mot `OSDev`. +Il existe beaucoup de documentation, bonne et mauvaise. L’auteur estime que le wiki OSDev est l’un des meilleurs. Le mot `OSDev` pointe vers . ### IV.6 Code de base -Il faut prendre le code KFS précédent et travailler à partir de lui. +Pour ce sujet, il faut prendre le code KFS précédent et travailler à partir de lui. Ou pas... et tout réécrire depuis le début. Au choix. ## V. Partie obligatoire @@ -139,13 +157,13 @@ Pas un shell POSIX, juste un shell minimaliste avec quelques commandes, pour le Exemple du sujet : y mettre l’affichage de la pile noyau, et d’autres choses comme `reboot`, `halt`, etc. -« Have fun ! » +Amuse-toi. Le PDF écrit : « Have fun ! » -Encadré PERFECT, identique à KFS-1 : bonus évalué seulement si l’obligatoire est intégralement fonctionnel. +Encadré : le bonus n’est évalué que si la partie obligatoire est PERFECT. Perfect veut dire que l’obligatoire a été fait intégralement et fonctionne sans dysfonctionnement. Si tous les prérequis obligatoires ne sont pas validés, le bonus n’est pas évalué du tout. ## VII. Rendu et évaluation par les pairs -Rendre le travail dans le dépôt Git. Seul le contenu du dépôt est évalué. Vérifier les noms de dossiers et de fichiers. +Rendre le travail dans le dépôt Git, comme d’habitude. Seul le travail à l’intérieur du dépôt est évalué pendant la soutenance. Ne pas hésiter à revérifier les noms des dossiers et des fichiers. Rendre le code, un Makefile et une image virtuelle basique pour le noyau. Note du sujet, en capitales dans le PDF : le noyau n’en fait encore rien, donc l’image n’a pas à être taillée comme un éléphant. La borne « 10 MB » est dans la partie obligatoire, pas répétée dans ce paragraphe. diff --git a/docs/sujets/little-penguin.md b/docs/sujets/little-penguin.md index ad27b0a..67d0716 100644 --- a/docs/sujets/little-penguin.md +++ b/docs/sujets/little-penguin.md @@ -1,19 +1,24 @@ # Little Penguin — Linux Kernel Development Traduction française du sujet. Le PDF reste la source en cas de doute. -Les sorties de commandes, les noms de fichiers et les deux fichiers C sont recopiés. Pour le style (espaces, retours), les captures C4 et C6 font foi : l’extraction texte aplatit une partie de l’indentation, et c’est justement ce style qu’il faudra corriger. +Les sorties de commandes, les noms de fichiers et les deux fichiers C sont recopiés. Pour les espaces du code, les figures C4 et C6 restent l’image du PDF. | | | |--|--| -| Fichier d’origine à la racine | `little_pinguin sujet.pdf` | -| Copie de travail | [originaux/little_penguin_subject.pdf](originaux/little_penguin_subject.pdf) | +| PDF | [originaux/little_penguin_subject.pdf](originaux/little_penguin_subject.pdf) | | Auteurs | Louis Solofrizzo louis@ne02ptzero.me, 42 Staff pedago@42.fr | | Version | 1.1 | | Date du PDF | 9 mai 2025 | | Pages | 20 | | Résumé (anglais) | This entire project is based on the Eudyptula Challenge. All credits go to little@eudyptula-challenge.org | -Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.png), [C4](captures/04-little-penguin-assignment-03-11.png), [C5](captures/05-little-penguin-assignment-08-17.png), [C6](captures/05-little-penguin-assignment-08-18.png). +![Marque 42 : bande verticale de triangles gris sur fond noir](captures/01-couverture-42.png) + +**Fig. C1 — page de titre.** Aucun texte dans l’image. Interprétation : habillage 42, pas une consigne. + +![Filigrane géométrique gris pâle](captures/02-habillage-page.png) + +**Fig. C2 — pages intérieures.** Aucun texte. Interprétation : filigrane répété. Les figures qui portent le contenu du sujet sont C4, C5 et C6, plus bas. ## Liens @@ -23,7 +28,7 @@ Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.p | `pedago@42.fr` | mailto | | URL de la page de titre | | -`Linux Device Drivers, 3rd Edition` est cité au chapitre 14, sans URL dans le PDF. Les chemins `Documentation/...` sont des chemins dans l’arbre des sources du noyau, pas des liens web. +Le livre *Linux Device Drivers, 3rd Edition* est cité à l’assignment 04, chapitre 14 du livre, sans URL dans le PDF. Les chemins `Documentation/...` sont des chemins dans l’arbre des sources du noyau, pas des liens web. --- @@ -31,16 +36,18 @@ Visuels : [C1](captures/01-couverture-42.png), [C2](captures/02-habillage-page.p ### I.1 Extrait de `Documentation/CodingStyle` -Le PDF colle un extrait du style de code du noyau Linux. +Le PDF ouvre sur le titre « Linux kernel coding style », puis colle un extrait. -Le style est personnel. L’auteur de ce document ne force pas ses vues, mais c’est le standard de ce qu’il maintient, et il préférerait qu’il s’applique à la plupart des autres projets. Au moins considérer ces points. +C’est un court document qui décrit le style de code préféré pour le noyau Linux. Le style est très personnel, et l’auteur ne *forcerait* pas ses vues sur quiconque (le PDF souligne `_force_`), mais c’est le standard de ce qu’il maintient, et il préférerait qu’il s’applique aussi à la plupart des autres projets. Merci au moins de considérer les points faits ici. -D’abord, imprimer les GNU coding standards, puis ne pas les lire. Les brûler — c’est un beau geste symbolique. -Le PDF ajoute : « ;) ok, it’s definitely not an eco-responsible move. » +D’abord, il recommande d’imprimer un exemplaire des GNU coding standards, puis de ne PAS le lire. Le brûler — c’est un beau geste symbolique. +Le PDF ajoute, de son cru : « ;) ok, it’s definitely not an eco-responsible move. » Autrement dit : d’accord, ce n’est clairement pas un geste éco-responsable. + +Bref, commençons. Chapitre 1 : Indentation. -Les tabulations font 8 caractères de large, donc les indentations aussi. Des tentatives utilisent 4, voire 2 caractères. Le texte compare ça à définir PI comme valant 3. +Les tabulations font 8 caractères de large, donc les indentations aussi. Il existe des tentatives mal avisées d’indenter sur 4 caractères, voire 2. C’est comme essayer de définir PI comme valant 3. ## II. Introduction @@ -62,7 +69,7 @@ Ce « challenge » est une série d’exercices de programmation du noyau Linux, Retirer les petites roues et construire son propre noyau. Plus question de s’appuyer sur des versions précompilées. -Pour cette tâche, il faut faire tourner son propre noyau — et utiliser Git. « Exciting, right? No? Well... okay. » +Pour cette tâche, il faut faire tourner son propre noyau — et utiliser Git. Passionnant, non ? Non ? Bon... d’accord. Le PDF écrit : « Exciting, right? No? Well... okay. » ### À faire @@ -122,7 +129,11 @@ Alors il est temps de quelque chose de plus pédant — histoire de rappeler à - La version mise à jour du fichier C. -Le fichier est sur la page suivante. Capture [C4](captures/04-little-penguin-assignment-03-11.png). La transcription garde les décalages d’indentation de l’extraction du PDF : ils font partie du fichier à corriger. Si un espace diverge, la capture fait foi. +Le fichier est sur la page suivante du PDF. + +![Listing C sur fond noir, en-tête Little Penguin / Linux Kernel Development](captures/04-little-penguin-assignment-03-11.png) + +**Fig. C4 — assignment 03, page 10.** En-tête de page : « Little Penguin » à gauche, « Linux Kernel Development » à droite. Aucune autre légende. Interprétation : c’est le fichier C à remettre au style du noyau. Le fond noir et la coloration ne font pas partie du fichier à rendre. La transcription sous l’image reprend le texte. Si un espace diverge, l’image fait foi. ```c #include @@ -170,7 +181,7 @@ Chaîne exacte dans le code : `We slept a long time!` ## IX. Assignment 04 Tu as survécu au chaos du style de code — bien joué. -Passons à quelque chose de plus « real », parce que le sujet devine qu’on commence à s’ennuyer. +Passons à quelque chose de plus concret, parce que le sujet devine qu’on commence à s’ennuyer. Le PDF met des guillemets à « real ». ### À faire @@ -182,7 +193,7 @@ Passons à quelque chose de plus « real », parce que le sujet devine qu’on c - Le code mis à jour. - Une preuve que le module fonctionne comme prévu. -Le sujet dit que ça a l’air simple et que c’est un peu piégeux. Indice : chapitre 14 du livre *Linux Device Drivers, 3rd Edition*, disponible gratuitement en ligne. +Le sujet dit que ça a l’air simple et que c’est un peu piégeux. Indice : chapitre 14 du livre *Linux Device Drivers, 3rd Edition*. Il est librement disponible en ligne, pas besoin de l’acheter. Le PDF écrit : « no purchase required ». ## X. Assignment 05 @@ -191,7 +202,7 @@ En parlant de vrai développement — écrivons du code digne de ce nom. ### À faire -- Reprendre le module de l’assignment 01 et en faire un driver de périphérique caractère `misc`. L’interface misc est un moyen très simple de créer un périphérique caractère sans s’emberlificoter dans sysfs et l’enregistrement de devices. Le sujet dit : « Trust me, it’s way easier this way! » +- Reprendre le module de l’assignment 01 et en faire un driver de périphérique caractère `misc`. L’interface misc est un moyen très simple de créer un périphérique caractère sans s’emberlificoter dans sysfs et l’enregistrement de devices. Le sujet demande qu’on le croie : c’est bien plus simple comme ça. Texte du PDF : « Trust me, it’s way easier this way! » - Le device misc est créé avec un numéro mineur dynamique. Inutile de s’acharner à réserver un mineur statique pour un module de test. Ce serait une corvée pour rien. - Implémenter `read` et `write`. - Le nœud doit apparaître dans `/dev/fortytwo`. @@ -234,7 +245,7 @@ On reviendra au noyau linux-next dans une tâche ultérieure, donc ne pas suppri Cette tâche ressemble à l’assignment 05, où l’on a créé un device misc. Cette fois, une autre interface entre l’utilisateur et le noyau : debugfs. -La rumeur dit que le créateur de debugfs aurait affirmé que la seule règle est : « There are no rules. » Le sujet propose de tester cette théorie. +La rumeur dit que le créateur de debugfs aurait affirmé que la seule règle est : « Il n’y a pas de règles. » Le PDF écrit : « There are no rules. » Le sujet propose de tester cette théorie. La distribution doit monter debugfs sur `/sys/kernel/debug/`. Sinon, la monter avec la commande recopiée : @@ -252,7 +263,7 @@ Il faut que ce soit activé dans le noyau avec l’option `CONFIG_DEBUG_FS`, par - `jiffies` : lecture seule pour n’importe quel utilisateur. La lecture retourne la valeur courante du timer `jiffies` du noyau. - `foo` : inscriptible seulement par root, lisible par tout le monde. Les données écrites sont stockées, jusqu’à une page. La lecture retourne les données stockées. Verrouillage correct pour les lectures et écritures concurrentes. - Au déchargement du module, tous les fichiers debugfs sont nettoyés et la mémoire allouée est libérée. -- Note du sujet : le répertoire debug doit être lisible globalement. Comme il n’y a pas d’option pour ça, utiliser `chown`. +- Note du sujet : le répertoire debug doit être lisible globalement. Comme il n’y a pas d’option pour ça, utiliser le bon vieux `chown`. Le PDF écrit : « use good old chown ». ### À rendre @@ -272,10 +283,13 @@ On ralentit un peu, et on revient au style de code. - Le fichier C mis à jour et conforme au style. -Encadré [C5](captures/05-little-penguin-assignment-08-17.png) : « But wait—what is this code supposed to do? » -Suite : « That’s part of the challenge. Have fun figuring it out! » +![Page Assignment 08 et encadré bleu : But wait—what is this code supposed to do?](captures/05-little-penguin-assignment-08-17.png) -Capture du code [C6](captures/05-little-penguin-assignment-08-18.png). Transcription alignée sur l’extraction du PDF. Le numéro de page imprimé à côté de `module_init` n’appartient pas au code. Si un espace diverge, la capture fait foi. +**Fig. C5 — assignment 08, page 16.** L’encadré bleu porte exactement : « But wait—what is this code supposed to do? » En français : mais attends, qu’est-ce que ce code est censé faire ? Interprétation : le sujet ne décrit pas le comportement attendu. La phrase sous l’encadré dit que ça fait partie du défi, et de s’amuser à le découvrir. Le PDF écrit : « That’s part of the challenge. Have fun figuring it out! » + +![Listing C du module reverse, fond noir](captures/05-little-penguin-assignment-08-18.png) + +**Fig. C6 — page 17.** Même en-tête que la fig. C4 : « Little Penguin », « Linux Kernel Development ». Interprétation : c’est le fichier à restyler et à corriger. Le device s’y nomme `reverse`. Le numéro de page imprimé près de `module_init` n’appartient pas au code. Si un espace diverge, l’image fait foi. ```c #include @@ -389,7 +403,7 @@ dev /dev Ce n’est pas une tâche dure, mais elle peut être piégeuse. Le sujet renvoie à la documentation sur les points de montage, le listage de répertoires, et le parcours de listes chaînées dans le noyau. -Et surtout — s’amuser :) +Et surtout, amuse-toi :) Le PDF écrit : « And above all—have fun :) » ## XV. Rendu et évaluation par les pairs diff --git a/kfs-1sujet.pdf b/kfs-1sujet.pdf deleted file mode 100644 index cd40ff1..0000000 Binary files a/kfs-1sujet.pdf and /dev/null differ diff --git a/kfs-2sujet.pdf b/kfs-2sujet.pdf deleted file mode 100644 index de3a338..0000000 Binary files a/kfs-2sujet.pdf and /dev/null differ diff --git a/little_pinguin sujet.pdf b/little_pinguin sujet.pdf deleted file mode 100644 index ee7fd98..0000000 Binary files a/little_pinguin sujet.pdf and /dev/null differ diff --git a/sujet_ft_linux.pdf b/sujet_ft_linux.pdf deleted file mode 100644 index a300b4a..0000000 Binary files a/sujet_ft_linux.pdf and /dev/null differ