diff mbox

Compress kernel modules on installation.

Message ID 20090126213931.66aa94f9.sbrokenshire@xestia.co.uk (mailing list archive)
State New, archived
Headers show

Commit Message

Steve Brokenshire Jan. 26, 2009, 9:39 p.m. UTC
On Sun, 25 Jan 2009 19:02:21 +0100 (CET)
Jan Engelhardt <jengelh@medozas.de> wrote:

> 
> On Sunday 2009-01-25 17:51, Steve Brokenshire wrote:
> >+
> >+quiet_cmd_modules_install = INSTALL  $@
> >+      cmd_modules_install = mkdir -p $(2); \
> >+				cp $@ $(2) ; \
> >+				$(mod_strip_cmd) $(2)/$(notdir $@)
> >+
> >+quiet_cmd_modules_compress_gzip = COMPRESS $@
> >+      cmd_modules_compress_gzip = gzip $(MODCOMPOPT) -c \
> >+				 $(2)/`basename $@` \
> >+				 > $(2)/`basename $@`.gz; \
> >+				 rm $(2)/`basename $@`
> 
> That is *three* extra shell invocations you got there
> for something make can compute itself using $(@F) iirc.

Ahhh. Didn't know that. Thanks. :)

Steve

Full patch (with modifications) follows...

--
To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

================================
Signed-off-by: Steve Brokenshire <sbrokenshire@xestia.co.uk>

--- a/scripts/Makefile.modinst	2009-01-18 18:45:37.000000000 +0000
+++ b/scripts/Makefile.modinst	2009-01-25 18:39:50.000000000 +0000
@@ -5,6 +5,7 @@ 
 PHONY := __modinst
 __modinst:
 
+include include/config/auto.conf
 include scripts/Kbuild.include
 
 #
@@ -16,8 +17,21 @@  PHONY += $(modules)
 __modinst: $(modules)
 	@:
 
-quiet_cmd_modules_install = INSTALL $@
-      cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@)
+ifeq ($(CONFIG_MODULE_COMPRESS_OPTIONS), "")
+else
+ MODCOMPOPT = $(shell echo -n $(CONFIG_MODULE_COMPRESS_OPTIONS))
+endif
+
+quiet_cmd_modules_install = INSTALL  $@
+      cmd_modules_install = mkdir -p $(2); \
+				cp $@ $(2) ; \
+				$(mod_strip_cmd) $(2)/$(notdir $@)
+
+quiet_cmd_modules_compress_gzip = COMPRESS $@
+      cmd_modules_compress_gzip = gzip $(MODCOMPOPT) -c \
+				 $(2)/$(@F) \
+				 > $(2)/$(@F).gz; \
+				 rm $(2)/$(@F)
 
 # Modules built outside the kernel source tree go into extra by default
 INSTALL_MOD_DIR ?= extra
@@ -26,8 +40,11 @@  ext-mod-dir = $(INSTALL_MOD_DIR)$(subst 
 modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))
 
 $(modules):
+
 	$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
 
+	$(if $(CONFIG_MODULE_COMPRESS_GZIP), \
+		$(call cmd,modules_compress_gzip,$(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.
--- a/init/Kconfig	2009-01-18 18:45:37.000000000 +0000
+++ b/init/Kconfig	2009-01-25 16:07:47.000000000 +0000
@@ -887,6 +887,62 @@  config MODULE_FORCE_UNLOAD
 	  rmmod).  This is mainly for kernel developers and desperate users.
 	  If unsure, say N.
 
+config MODULE_COMPRESS
+	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 selected compression 
+	  format with gzip being the default compression format.
+
+	  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 option requires the module-init-tools package to be 
+	  configured with --enable-zlib (if using gzip which is the
+	  default compression format).
+
+	  If unsure, say N.
+
+config MODULE_COMPRESS_OPTIONS
+	string "Compression format command line options"
+	depends on MODULE_COMPRESS
+	help
+	  This option specifies the command line options to be used for
+	  the selected compression format.
+
+	  Please refer to the selected compression format's documentation
+	  on which options should be used.
+
+	  If unsure, leave this option blank.
+
+choice
+	prompt "Kernel module compression format"
+	depends on MODULE_COMPRESS
+	default MODULE_COMPRESS_GZIP
+
+config MODULE_COMPRESS_GZIP
+	bool "gzip compression"
+	help
+	  Compresses the kernel modules using the gzip (GNU zip) 
+	  compression format.
+
+	  This option requires gzip to be installed.
+
+	  If unsure, leave this option selected.
+	  
+endchoice
+
 config MODVERSIONS
 	bool "Module versioning support"
 	help
--- a/Documentation/kbuild/modules.txt	2009-01-18 18:45:37.000000000 +0000
+++ b/Documentation/kbuild/modules.txt	2009-01-25 16:07:47.000000000 +0000
@@ -96,6 +96,13 @@  when building an external module.
 		Installation default is in /lib/modules/<kernel-version>/extra,
 		but may be prefixed with INSTALL_MOD_PATH - see separate
 		chapter.
+		If MODULES_COMPRESS is set when the modules_install target is 
+		run then the module is compressed after it has been 
+		copied to /lib/modules/<kernel-version>. Compressed modules 
+		using the default gzip compression format will require 
+		module-init-tools installed with --zlib-enabled.
+		Any options set in MODULE_COMPRESS_OPTIONS will be 
+		passed to the selected compression format.
 
 	make -C $KDIR M=`pwd` clean
 		Remove all generated files for the module - the kernel