43 votes

Comment créer un seul module de noyau intégré dans l'arborescence ?

Le linux-source-... a un module qui est désactivé dans la configuration /boot/config-3.4-trunk-686-pae afin qu'il ne fasse pas partie de linux-image-... (Ceci est sur Debian, mais la solution devrait être la même pour Ubuntu, non?), par exemple

# CONFIG_CAN_PEAK_USB n'est pas défini

Comment compiler seulement ce module de kernel, pour qu'il puisse être utilisé avec le kernel distribué?

Le package linux-source-... respectif est déjà installé, décompressé et lié à /usr/src/linux. /boot/config-3.4-trunk-686-pae est copié dans /usr/src/linux/.config et modifié avec

CONFIG_CAN_PEAK_USB=m

Avec

make
make modules

il est possible de compiler le kernel et tous les modules. Mais comment compiler uniquement ce module spécifique?

(Note: le kernel doit également être compilé au préalable, sinon vous obtenez l'erreur suivante: no symbol version for module_layout)

44voto

Dmitry Points 3067

J'ai eu le même problème. Je suppose que vous devez non seulement copier .config mais aussi Module.symvers

Mes étapes pour compiler le module ft1000 (sous Debian Wheezy 7.1.0; noyau 3.2.0-4-686-pae):

aptitude install linux-headers-3.2.0-4-686-pae
aptitude install linux-source-3.2
cd /usr/src/
tar xjf linux-source-3.2.tar.bz2
cd /usr/src/linux-source-3.2
cp ../linux-headers-3.2.0-4-686-pae/Module.symvers .
make oldconfig # il copie .config vers ./
vi .config # activer le module ft1000 : CONFIG_FT1000=m
make prepare # mise en place de FT1000 en tant que module
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
cp drivers/staging/ft1000/ft1000-usb/ft1000.ko /lib/modules/3.2.0-4-686-pae/kernel
/drivers/staging/
depmod
modprobe ft1000

15voto

ish Points 134738

À partir du répertoire source de niveau supérieur, il suffit de donner make le chemin vers le nom du module ou le répertoire du module, par exemple :

make drivers/net/can/usb/peak_usb/

ou pour un exemple plus simple (pilote Ethernet Intel e1000) :

make drivers/net/ethernet/intel/e1000/e1000.ko

2voto

intika Points 764

Aussi simple que : (cet exemple illustre le pilote ft1000, cela ne devrait prendre que quelques minutes, voire des instants)

cd /usr/src/kernel-sources
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
# Activer le module ft1000 : CONFIG_FT1000=m dans la configuration avec 
make xconfig # ou "make menuconfig" puis enregistrer
make prepare
make modules_prepare
make SUBDIRS=scripts/mod
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules
make SUBDIRS=drivers/staging/ft1000/ft1000-usb modules_install

Vous pouvez ensuite charger le module avec modprobe après depmod

Remarque : en fonction de la dépendance du module, vous devrez peut-être reconstruire entièrement le noyau

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X