Usually kernel source are stored in /usr/src/linux-2.6.x/
.
To avoid to recompile the entire kernel if I modify a module's source, how can I recompile just that module?
create new folder somewhere for the module source (example: extra) and copy only source files (from the kernel source or somewhere else) related to the module needed to be build into this new folder. copy /boot/config-`uname -r` file (example: /boot/config-4.8. 0-46-generic) into kernel source folder file .
Switch to the root directory of your source tree and run the following command:
$ make modules SUBDIRS=drivers/the_module_directory
And to install the compiled module:
$ make modules_install SUBDIRS=drivers/the_module_directory
Note: As lunakid mentions, the latter command might not build the module first, so be careful.
since kernel versions 3.x.x and 4.x.x the procedure gets more complicated (but there is a hope, so keep reading):
make distclean
if you haven't just cloned a new source but used to build other modules before/boot/config-`uname -r`
file (example: /boot/config-4.8.0-46-generic) into kernel source folder file .config and run make oldconfig
. if the module belongs to the kernel source, verify if it has been enabled by calling make menuconfig
, by searching for the module and applying letter 'M' if necessarymake kernelversion
if it matches exactly the uname -r
one)make scripts
make prepare
and make modules_prepare
has to be executed prior to the actual module build/usr/src/linux-headers-`uname -r`/Module.symvers
(example: /usr/src/linux-headers-3.13.0-117-generic/Module.symvers) into the newly created module source files folder prepared for the module compilation (the one extra in example).obj-y += <module_source_file_name>.o
or if the source code is complicated, use the guidance from here
make -C <kernel source path> M=the_module_directory
(example: make -C . M=extra/
)modprobe --dump-modversion <module_name>.ko
to verify CRC match between module exporting API and corresponding values in Module.symvers. in case of failure use command modinfo <module_name>.ko
insteadthe solution would be following:
commit all your changes, force release tag to shift above your modifications with the git tag -a <tag version> -f
command. then rebuild your modules from step 8
You can pass the path to the module name or module directory to make as parameter.
make path/to/the/module/itself.ko
make path/to/the/module/directory/
In case you have edited just code in drivers/net/ethernet/intel/e1000/e1000_main.c file
Build the module.
make scripts prepare modules_prepare
make -C . M=drivers/net/ethernet/intel/e1000
Install the module.
cp drivers/net/ethernet/intel/e1000/e1000.ko /lib/modules/5.1.15/kernel/drivers/net/ethernet/intel/e1000/e1000.ko
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With