J'avais écrits un peu sur ce blog pour devenir un kernel developer sous Linux. Comme j'en parlais c'est un metier très spéciale et rare considéré comme l'élite mondiale en developpement informatique. Et en plus il n'y a aucune formation en France, tout s'apprends sur le tas en autodidacte, même si les formations en systèmes embarqués abordent un peu le kernel.
Je compte parfaire mon apprentissage dans le domaine, même si j'avais laissé un peu de côté durant une période. Je dois me remettre à faire du langage C, que j'ai pas fait depuis quelques temps. Peut-être que je serai bien accueilli par la communauté Linux pour devenir kernel dev à voir. Je m'intéresse particulièrement à RISC-V. Je compte acheté un Sipeed Lichee RV D1 pour faire des tests.
Comment rejoindre la communauté et collaborer?
- LKML, liste de diffusion pour le developpement du noyau Linux: https://lkml.org/ + Archive: https://lore.kernel.org/lists.html + Souscrire à une liste: https://subspace.kernel.org/vger.kernel.org.html. Comme vous pouvez le constater sur la liste principale "linux-kernel" il n'y a que 2643 inscrits. Il y a très peu de kernel dev.
- IRC: #linux-kernel sur Libera.Chat
- Bug reports Kernel: https://bugzilla.kernel.org/
- Suivi de patch: https://patchwork.kernel.org/
- Débuter sur https://kernelnewbies.org/ pour les kernel dev aspirants
Soit les topics qui parle du sujet sur ce blog:
On va développer un environnement minimaliste pour tester le kernel et écrire nos propres modules. Un simple module "hello world" pour apprendre à développer sur le noyau. La configuration de QEMU est relativement simple, je n'aborde pas la virtualisation plus complète du système d'exploitation tel que l'utilisation de virtio
ou encore rootfs
dans les paramètres.
Pré-requis
Mettre à jours le système
sudo pacman -Syu
Installer les outils nécessaires
sudo pacman -S base-devel ncurses bison flex openssl elfutils libelf qemu
Etape 1
Télécharger la dernière version stable du kernel depuis: https://kernel.org/ et décompresser l'archive
tar -xvf linux-x.y.z.tar.xz
cd linux-x.y.z
Etape 2
Créer une configuration minimale du kernel
make defconfig
Personnaliser la configuration si nécessaire
make menuconfig
Etape 3
Compiler le noyau et install
make -j$(nproc)
sudo make install
Etape 4
On va créer notre module "Hello World", d'abord en créant un répertoire
mkdir -p ~/hello_module
cd ~/hello_module
Puis on créé notre module hello.c
suivant
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Votre Nom");
MODULE_DESCRIPTION("A simple Hello World Linux module.");
MODULE_VERSION("1.0");
static int __init hello_init(void) {
printk(KERN_INFO "Hello, World!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
Créer un fichier makefile
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Complier le module
make
Etape 5
Lancer QEMU avec le noyau compilé depuis le répertoire du noyau
qemu-system-x86_64 -kernel arch/x86/boot/bzImage -append "console=ttyS0" -serial stdio -nographic
Etape 6
Charger le module dans la console QEMU accessible via ctrl+A puis C.
insmod /path/to/hello_module/hello.ko
Verifier les messages du kernel pour voir la sortie "hello world"
dmesg | tail
Décharger le module
rmmod hello
En suivant ces étapes, vous aurez un environnement de développement minimal pour le noyau Linux sur Arch Linux, avec un module "Hello World" fonctionnel exécuté dans QEMU.