 beb50df39e
			
		
	
	
	beb50df39e
	
	
	
		
			
			Since module-init-tools (gzip) and kmod (gzip and xz) support compressed
modules, it could be useful to include a support for compressing modules
right after having them installed. Doing this in kbuild instead of per
distro can permit to make this kind of usage more generic.
This patch add a Kconfig entry to "Enable loadable module support" menu
and let you choose to compress using gzip (default) or xz.
Both gzip and xz does not used any extra -[1-9] option since Andi Kleen
and Rusty Russell prove no gain is made using them. gzip is called with -n
argument to avoid storing original filename inside compressed file, that
way we can save some more bytes.
On a v3.16 kernel, 'make allmodconfig' generated 4680 modules for a
total of 378MB (no strip, no sign, no compress), the following table
shows observed disk space gain based on the allmodconfig .config :
       |           time                |
       +-------------+-----------------+
       | manual .ko  |       make      | size | percent
       | compression | modules_install |      | gain
       +-------------+-----------------+------+--------
  -    |             |     18.61s      | 378M |
  GZIP |   3m16s     |     3m37s       | 102M | 73.41%
  XZ   |   5m22s     |     5m39s       |  77M | 79.83%
The gain for restricted environnement seems to be interesting while
uncompress can be time consuming but happens only while loading a module,
that is generally done only once.
This is fully compatible with signed modules while the signed module is
compressed. module-init-tools or kmod handles decompression
and provide to other layer the uncompressed but signed payload.
Reviewed-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Bertrand Jacquin <beber@meleeweb.net>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
		
	
			
		
			
				
	
	
		
			41 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1.2 KiB
			
		
	
	
	
		
			Text
		
	
	
	
	
	
| # ==========================================================================
 | |
| # Installing modules
 | |
| # ==========================================================================
 | |
| 
 | |
| PHONY := __modinst
 | |
| __modinst:
 | |
| 
 | |
| include scripts/Kbuild.include
 | |
| 
 | |
| #
 | |
| 
 | |
| __modules := $(sort $(shell grep -h '\.ko$$' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
 | |
| modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
 | |
| 
 | |
| PHONY += $(modules)
 | |
| __modinst: $(modules)
 | |
| 	@:
 | |
| 
 | |
| # Don't stop modules_install if we can't sign external modules.
 | |
| quiet_cmd_modules_install = INSTALL $@
 | |
|       cmd_modules_install = \
 | |
|     mkdir -p $(2) ; \
 | |
|     cp $@ $(2) ; \
 | |
|     $(mod_strip_cmd) $(2)/$(notdir $@) ; \
 | |
|     $(mod_sign_cmd) $(2)/$(notdir $@) $(patsubst %,|| true,$(KBUILD_EXTMOD)) ; \
 | |
|     $(mod_compress_cmd) $(2)/$(notdir $@)
 | |
| 
 | |
| # Modules built outside the kernel source tree go into extra by default
 | |
| INSTALL_MOD_DIR ?= extra
 | |
| ext-mod-dir = $(INSTALL_MOD_DIR)$(subst $(patsubst %/,%,$(KBUILD_EXTMOD)),,$(@D))
 | |
| 
 | |
| modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))
 | |
| 
 | |
| $(modules):
 | |
| 	$(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
 | |
| 
 | |
| 
 | |
| # Declare the contents of the .PHONY variable as phony.  We keep that
 | |
| # information in a variable so we can use it in if_changed and friends.
 | |
| 
 | |
| .PHONY: $(PHONY)
 |