Habituellement, les sources du noyau sont stockées dans /usr/src/linux-2.6.x/
. Pour éviter de recompiler le noyau entier si je modifie la source d'un module, comment puis-je recompiler uniquement ce module?
Basculez vers le répertoire racine de votre arborescence source et exécutez la commande suivante:
$ make modules SUBDIRS=drivers/the_module_directory
Et pour installer le module compilé:
$ make modules_install SUBDIRS=drivers/the_module_directory
Note: Comme le mentionne lunakid, cette dernière commande pourrait pas construire le module en premier, alors soyez prudent.
depuis les versions du noyau 3.xx et 4.xx la procédure devient plus compliqué (mais il y a un espoir, alors continuez à lire):
make distclean
si vous n'avez pas simplement cloné une nouvelle source mais utilisé pour construire d'autres modules avant/boot/config-`uname -r`
fichier (exemple: /boot/config-4.8.0-46-generic ) dans le fichier du dossier source du noyau .config et exécutez make oldconfig
. si le module appartient à la source du noyau, vérifiez s'il a été activé en appelant make menuconfig
, en recherchant le module et en appliquant la lettre 'M' si nécessairemake kernelversion
s'il correspond exactement au uname -r
un)make scripts
make prepare
et make modules_prepare
doit être exécuté avant la construction réelle du module/usr/src/linux-headers-`uname -r`/Module.symvers
(exemple: /usr/src/linux-headers-3.13.0-117-generic/Module.symvers ) dans la source de module nouvellement créée dossier de fichiers préparé pour la compilation du module (celui supplémentaire dans l'exemple).obj-y += <module_source_file_name>.o
ou si le code source est compliqué, utilisez les conseils de icimake -C <kernel source path> M=the_module_directory
(exemple: make -C . M=extra/
)modprobe --dump-modversion <module_name>.ko
pour vérifier la correspondance CRC entre l'API d'exportation de module et les valeurs correspondantes dans Module.symvers . en cas d'échec, utilisez la commande modinfo <module_name>.ko
au lieula solution serait la suivante:
validez toutes vos modifications, forcez la balise release à se déplacer au-dessus de vos modifications avec le git tag -a <tag version> -f
commande. puis reconstruisez vos modules à partir de l'étape 8
Vous pouvez passer le chemin vers le nom du module ou le répertoire du module pour faire comme paramètre.
make path/to/the/module/itself.ko
make path/to/the/module/directory/
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
https://askubuntu.com/questions/515407/how-recipe-to-build-only-one-kernel-module
Dans le cas où vous avez modifié uniquement le code dans le fichier drivers/net/ethernet/intel/e1000/e1000_main.c
Construisez le module.
make scripts prepare modules_prepare
make -C . M=drivers/net/ethernet/intel/e1000
Installez le module.
cp drivers/net/ethernet/intel/e1000/e1000.ko /lib/modules/5.1.15/kernel/drivers/net/ethernet/intel/e1000/e1000.ko