Partenaire de vos projets innovants ...                                     

 


 

French (Fr)English (United Kingdom)

Ajout d'un module au noyau

Envoyer Imprimer PDF

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <linux/kernel.h>
#include <linux/module.h>

static int __init hello_world_module_init(void)
{
printk("Hello World, sample module is installed!\n");
return 0;
}

static void __exit hello_world_module_cleanup(void)
{
printk("Good-bye, sample module was removed!\n");
}

module_init(hello_world_module_init);
module_exit(hello_world_module_cleanup);
MODULE_LICENSE("GPL");

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
2
3
4
5
6
7
config HELLO_WORLD_MODULE
tristate "hello world module"
depends on ARM
default m if ARM
help
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
2
3
4
5
6
export CROSS_COMPILE=arm-none-linux-gnueabi-
export ARCH=arm
make clean
make omap3_evm_defconfig
make menuconfig

Activez votre nouveau module depuis l'interface dans le menu Device Drivers —> Misc devices —> hello world module. Lancement de la compilation :

1
2
3
make modules
make modules_install INSTALL_MOD_PATH=$ROOTFS

On considère $ROOTFS comme le répertoire contenant le système de fichier cible. Pour tester notre module:

1
2
3
4
$ modprobe hello_world
Hello World, sample module is installed !
$ rmmod hello_world
Good-bye, sample module was removed!

 

© Copyright 2011, Oselis.

Conception de Systèmes Electroniques

schema elect