[lkml]   [2008]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[PATCH] Compress kernel modules on installation.

(I've sent this to the linux-kbuild and linux-kernel lists as this
patch modifies the Makefile.modinst file. I also don't subscribe to the
linux-kbuild and linux-kernel mailing lists so can I have any replies
CC'ed to me please)

This patch allows kernel modules to be compressed when 'make
modules_install' is run after being copied to
the /lib/module/<version>/<...> directory which is useful if you have
module-init-tools installed with --enable-zlib. This patch adds an
option (MODULE_COMPRESS) to the kernel configuration file (specifically
init/Kconfig) so that the kernel modules will compressed if

When MODULE_COMPRESS is set the output of 'make modules_install' will
go as the following:

INSTALL  drivers/fs/xfs/xfs.ko
COMPRESS drivers/fs/xfs/xfs.ko
INSTALL  drivers/fs/fat/fat.ko
COMPRESS drivers/fs/fat/fat.ko

I've tested my patch on kernel versions, 2.6.24-git12, and
2.6.19 and they compile, install and compress into the respective
module directories without any errors.

I've also tested this with the uvcvideo (linux-uvc) kernel module (from
the SVN branch and with kernel versions, 2.6.24-git12, and
2.6.19) as that uses Kbuild properly when installing the module and
after installing the uvcvideo the module is then compressed.
Unfortunately, I couldn't find any other kernel modules which used the
Kbuild system for installing their kernel modules. :(

I've included include/config/auto.conf in Makefile.modinst so that it
can check if MODULE_COMPRESS is set when installing the kernel modules.

Unfortunately when I ran mkinitrd (CentOS version) to create the initrd
image to go with the kernel, I get errors saying that certain kernel
modules don't exist despite the fact they do actually exist. When I
pass --allow-missing to mkinitrd, it seems to go fine but when booting
up with the system with the new initrd image I get error messages
saying that the modules don't exist.

A workaround is to compile the modules, don't have MODULE_COMPRESS set
in .config, install the modules, run mkinitrd and copy it to /boot, set
MODULE_COMPRESS in .config and then install the modules again but

That's about it really. The only showstopper I feel is mkinitrd not
working properly with the compressed kernel modules.



Signed-off-by: Steve Brokenshire <>

diff -u -r -up a/init/Kconfig b/init/Kconfig
--- a/init/Kconfig 2008-02-02 16:34:29.000000000 +0000
+++ b/init/Kconfig 2008-02-03 09:55:52.000000000 +0000
@@ -725,6 +725,30 @@ config MODULE_FORCE_UNLOAD
rmmod). This is mainly for kernel developers and desperate users.
If unsure, say N.

+ bool "Compress kernel modules on installation"
+ depends on MODULES
+ help
+ This option compresses the kernel modules when 'make
+ modules_install' is run.
+ The modules will be compressed into the gzip (GNU zip) format
+ and will use less space than an uncompressed kernel module would.
+ When a kernel module is installed from outside of the main kernel
+ source and uses the Kbuild system for installing modules then that
+ kernel module will also be compressed when it is installed.
+ When running mkinitrd you will find that an error message
+ appears saying that it cannot find a certain kernel module.
+ As a workaround, unset CONFIG_MODULE_COMPRESS, build the modules
+ and install them, run mkinitrd and create the initrd image, place
+ the initrd image in the correct place for booting, set
+ CONFIG_MODULE_COMPRESS and then install the modules again.
+ This options requires the module-init-tools package to be
+ configured with --enable-zlib.
bool "Module versioning support"
depends on MODULES
diff -u -r -up a/scripts/Makefile.modinst b/scripts/Makefile.modinst
--- a/scripts/Makefile.modinst 2008-02-02 16:34:33.000000000 +0000
+++ b/scripts/Makefile.modinst 2008-02-02 17:21:46.000000000 +0000
@@ -5,6 +5,7 @@
PHONY := __modinst

+include include/config/auto.conf
include scripts/Kbuild.include

@@ -16,8 +17,15 @@ PHONY += $(modules)
__modinst: $(modules)

-quiet_cmd_modules_install = INSTALL $@
- cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@)
+quiet_cmd_modules_install = INSTALL $@
+ cmd_modules_install = mkdir -p $(2); \
+ cp $@ $(2) ; \
+ $(mod_strip_cmd) $(2)/$(notdir $@)
+quiet_cmd_modules_compress = COMPRESS $@
+ cmd_modules_compress = gzip --best -c $(2)/`basename $@` \
+ > $(2)/`basename $@`.gz; \
+ rm $(2)/`basename $@`

# Modules built outside the kernel source tree go into extra by default
@@ -27,7 +35,8 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ex

$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
+ $(call cmd,modules_compress,$(MODLIB)/$(modinst_dir)))

# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable se we can use it in if_changed and friends.
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at
 \ /
  Last update: 2008-02-25 22:59    [W:0.089 / U:69.564 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site