Un module peut être chargé et déchargé à la demande, l'intérêt d'un module est qu'il ne réside pas dans l'image monolithique du noyau.
Tous les drivers du noyau ont la capacité d'être compilé de cette manière ou bien directement en faisant partie intégrante de l'image du noyau. Nous allons ajouter un driver très simple au noyau.
Ajoutons le répertoire drivers/misc aux sources de notre noyau. Puis le fichier suivant:
drivers/misc/hello_world.c
1 |
#include <linux/kernel.h> |
L'étape suivante est l'ajout de la configuration de notre module permettant d'activer ou de désactiver celui-ci. Ajoutons le fichier drivers/misc/Kconfig avec le contenu suivant :
1 |
config HELLO_WORLD_MODULE |
La ligne 3 nous indique que notre driver n'est disponible que lorsque l'architecture ARM est active (CONFIG_ARM) et la ligne 4 indique que lorsque le driver est disponible, celui-ci est par défaut selectionné comme module. L'étape suivant consiste à indiquer au noyau qu'il faut compiler le fichier hello_world.c quand HELLO_WORLD_MODULE est activé et configuré. Ajoutons le fichier drivers/misc/Makefile avec le contenu suivant:
1 |
obj-$(CONFIG_HELLO_WORLD_MODULE)+= hello_world.o
|
L'ajout de notre driver est terminé. Passons à la compilation de celui-ci. Pour notre exemple, nous partons d'un fichier pré-configuré (omap3_evm_defconfig).
1 |
export CROSS_COMPILE=arm-none-linux-gnueabi- |
Activez votre nouveau module depuis l'interface dans le menu Device Drivers —> Misc devices —> hello world module. Lancement de la compilation :
1 |
make modules |
On considère $ROOTFS comme le répertoire contenant le système de fichier cible. Pour tester notre module:
1 |
$ modprobe hello_world |
© Copyright 2011, Oselis.







