aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlain Knaff <alain@knaff.lu>2009-01-07 03:10:27 -0500
committerH. Peter Anvin <hpa@zytor.com>2009-01-07 03:10:27 -0500
commita26ee60f90daffe1de6be0d093af86e7279b3dfd (patch)
tree01239fb6b173ff46711480b9601c69b92e1715a5
parentfb9a4ca9820fd4d7c4906bd393004662451e273e (diff)
bzip2/lzma: fix built-in initramfs vs CONFIG_RD_GZIP
Impact: Resolves build failures in some configurations Makes it possible to disable CONFIG_RD_GZIP . In that case, the built-in initramfs will be compressed by whatever compressor is available (bzip2 or lzma) or left uncompressed if none is available. It also removes a couple of warnings which occur when no ramdisk compression at all is chosen. It also restores the select ZLIB_INFLATE in drivers/block/Kconfig which somehow came missing. This is needed to activate compilation of the stuff in zlib_deflate. Signed-off-by: Alain Knaff <alain@knaff.lu> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--init/initramfs.c7
-rw-r--r--scripts/gen_initramfs_list.sh17
-rw-r--r--usr/Makefile42
-rw-r--r--usr/initramfs_data.S2
-rw-r--r--usr/initramfs_data.bz2.S29
-rw-r--r--usr/initramfs_data.gz.S29
-rw-r--r--usr/initramfs_data.lzma.S29
7 files changed, 135 insertions, 20 deletions
diff --git a/init/initramfs.c b/init/initramfs.c
index 40bd4fb95788..a3ba91cdab89 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -389,7 +389,7 @@ static int __init write_buffer(char *buf, unsigned len)
389 return len - count; 389 return len - count;
390} 390}
391 391
392 392#if defined CONFIG_RD_GZIP || defined CONFIG_RD_BZIP2 || defined CONFIG_RD_LZMA
393static int __init flush_buffer(void *bufv, unsigned len) 393static int __init flush_buffer(void *bufv, unsigned len)
394{ 394{
395 char *buf = (char *) bufv; 395 char *buf = (char *) bufv;
@@ -412,6 +412,7 @@ static int __init flush_buffer(void *bufv, unsigned len)
412 } 412 }
413 return origLen; 413 return origLen;
414} 414}
415#endif
415 416
416static unsigned my_inptr; /* index of next byte to be processed in inbuf */ 417static unsigned my_inptr; /* index of next byte to be processed in inbuf */
417 418
@@ -449,10 +450,12 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
449 continue; 450 continue;
450 } 451 }
451 this_header = 0; 452 this_header = 0;
453#ifdef CONFIG_RD_GZIP
452 if (!gunzip(buf, len, NULL, flush_buffer, NULL, 454 if (!gunzip(buf, len, NULL, flush_buffer, NULL,
453 &my_inptr, error) && 455 &my_inptr, error) &&
454 message == NULL) 456 message == NULL)
455 goto ok; 457 goto ok;
458#endif
456 459
457#ifdef CONFIG_RD_BZIP2 460#ifdef CONFIG_RD_BZIP2
458 message = NULL; /* Zero out message, or else cpio will 461 message = NULL; /* Zero out message, or else cpio will
@@ -473,7 +476,9 @@ static char * __init unpack_to_rootfs(char *buf, unsigned len, int check_only)
473 goto ok; 476 goto ok;
474 } 477 }
475#endif 478#endif
479#if defined CONFIG_RD_GZIP || defined CONFIG_RD_BZIP2 || defined CONFIG_RD_LZMA
476ok: 480ok:
481#endif
477 if (state != Reset) 482 if (state != Reset)
478 error("junk in compressed archive"); 483 error("junk in compressed archive");
479 this_header = saved_offset + my_inptr; 484 this_header = saved_offset + my_inptr;
diff --git a/scripts/gen_initramfs_list.sh b/scripts/gen_initramfs_list.sh
index 5f3415f28736..41041e4923f7 100644
--- a/scripts/gen_initramfs_list.sh
+++ b/scripts/gen_initramfs_list.sh
@@ -5,7 +5,7 @@
5# Released under the terms of the GNU GPL 5# Released under the terms of the GNU GPL
6# 6#
7# Generate a cpio packed initramfs. It uses gen_init_cpio to generate 7# Generate a cpio packed initramfs. It uses gen_init_cpio to generate
8# the cpio archive, and gzip to pack it. 8# the cpio archive, and then compresses it.
9# The script may also be used to generate the inputfile used for gen_init_cpio 9# The script may also be used to generate the inputfile used for gen_init_cpio
10# This script assumes that gen_init_cpio is located in usr/ directory 10# This script assumes that gen_init_cpio is located in usr/ directory
11 11
@@ -16,8 +16,8 @@ usage() {
16cat << EOF 16cat << EOF
17Usage: 17Usage:
18$0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ... 18$0 [-o <file>] [-u <uid>] [-g <gid>] {-d | <cpio_source>} ...
19 -o <file> Create gzipped initramfs file named <file> using 19 -o <file> Create compressed initramfs file named <file> using
20 gen_init_cpio and gzip 20 gen_init_cpio and compressor depending on the extension
21 -u <uid> User ID to map to user ID 0 (root). 21 -u <uid> User ID to map to user ID 0 (root).
22 <uid> is only meaningful if <cpio_source> is a 22 <uid> is only meaningful if <cpio_source> is a
23 directory. "squash" forces all files to uid 0. 23 directory. "squash" forces all files to uid 0.
@@ -225,6 +225,7 @@ cpio_list=
225output="/dev/stdout" 225output="/dev/stdout"
226output_file="" 226output_file=""
227is_cpio_compressed= 227is_cpio_compressed=
228compr="gzip -9 -f"
228 229
229arg="$1" 230arg="$1"
230case "$arg" in 231case "$arg" in
@@ -233,11 +234,15 @@ case "$arg" in
233 echo "deps_initramfs := \\" 234 echo "deps_initramfs := \\"
234 shift 235 shift
235 ;; 236 ;;
236 "-o") # generate gzipped cpio image named $1 237 "-o") # generate compressed cpio image named $1
237 shift 238 shift
238 output_file="$1" 239 output_file="$1"
239 cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)" 240 cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
240 output=${cpio_list} 241 output=${cpio_list}
242 echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
243 echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
244 echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
245 echo "$output_file" | grep -q "\.cpio$" && compr="cat"
241 shift 246 shift
242 ;; 247 ;;
243esac 248esac
@@ -274,7 +279,7 @@ while [ $# -gt 0 ]; do
274 esac 279 esac
275done 280done
276 281
277# If output_file is set we will generate cpio archive and gzip it 282# If output_file is set we will generate cpio archive and compress it
278# we are carefull to delete tmp files 283# we are carefull to delete tmp files
279if [ ! -z ${output_file} ]; then 284if [ ! -z ${output_file} ]; then
280 if [ -z ${cpio_file} ]; then 285 if [ -z ${cpio_file} ]; then
@@ -287,7 +292,7 @@ if [ ! -z ${output_file} ]; then
287 if [ "${is_cpio_compressed}" = "compressed" ]; then 292 if [ "${is_cpio_compressed}" = "compressed" ]; then
288 cat ${cpio_tfile} > ${output_file} 293 cat ${cpio_tfile} > ${output_file}
289 else 294 else
290 cat ${cpio_tfile} | gzip -f -9 - > ${output_file} 295 cat ${cpio_tfile} | ${compr} - > ${output_file}
291 fi 296 fi
292 [ -z ${cpio_file} ] && rm ${cpio_tfile} 297 [ -z ${cpio_file} ] && rm ${cpio_tfile}
293fi 298fi
diff --git a/usr/Makefile b/usr/Makefile
index 201f27f8cbaf..451cdff7dff9 100644
--- a/usr/Makefile
+++ b/usr/Makefile
@@ -5,14 +5,32 @@
5klibcdirs:; 5klibcdirs:;
6PHONY += klibcdirs 6PHONY += klibcdirs
7 7
8# Find out "preferred" ramdisk compressor. Order of preference is
9# 1. bzip2 efficient, and likely to be present
10# 2. gzip former default
11# 3. lzma
12# 4. none
13
14# None of the above
15suffix_y =
16
17# Lzma, but no gzip nor bzip2
18suffix_$(CONFIG_RD_LZMA) = .lzma
19
20# Gzip, but no bzip2
21suffix_$(CONFIG_RD_GZIP) = .gz
22
23# Bzip2
24suffix_$(CONFIG_RD_BZIP2) = .bz2
25
8 26
9# Generate builtin.o based on initramfs_data.o 27# Generate builtin.o based on initramfs_data.o
10obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data.o 28obj-$(CONFIG_BLK_DEV_INITRD) := initramfs_data$(suffix_y).o
11 29
12# initramfs_data.o contains the initramfs_data.cpio.gz image. 30# initramfs_data.o contains the compressed initramfs_data.cpio image.
13# The image is included using .incbin, a dependency which is not 31# The image is included using .incbin, a dependency which is not
14# tracked automatically. 32# tracked automatically.
15$(obj)/initramfs_data.o: $(obj)/initramfs_data.cpio.gz FORCE 33$(obj)/initramfs_data$(suffix_y).o: $(obj)/initramfs_data.cpio$(suffix_y) FORCE
16 34
17##### 35#####
18# Generate the initramfs cpio archive 36# Generate the initramfs cpio archive
@@ -25,28 +43,28 @@ ramfs-args := \
25 $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \ 43 $(if $(CONFIG_INITRAMFS_ROOT_UID), -u $(CONFIG_INITRAMFS_ROOT_UID)) \
26 $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID)) 44 $(if $(CONFIG_INITRAMFS_ROOT_GID), -g $(CONFIG_INITRAMFS_ROOT_GID))
27 45
28# .initramfs_data.cpio.gz.d is used to identify all files included 46# .initramfs_data.cpio.d is used to identify all files included
29# in initramfs and to detect if any files are added/removed. 47# in initramfs and to detect if any files are added/removed.
30# Removed files are identified by directory timestamp being updated 48# Removed files are identified by directory timestamp being updated
31# The dependency list is generated by gen_initramfs.sh -l 49# The dependency list is generated by gen_initramfs.sh -l
32ifneq ($(wildcard $(obj)/.initramfs_data.cpio.gz.d),) 50ifneq ($(wildcard $(obj)/.initramfs_data.cpio.d),)
33 include $(obj)/.initramfs_data.cpio.gz.d 51 include $(obj)/.initramfs_data.cpio.d
34endif 52endif
35 53
36quiet_cmd_initfs = GEN $@ 54quiet_cmd_initfs = GEN $@
37 cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input) 55 cmd_initfs = $(initramfs) -o $@ $(ramfs-args) $(ramfs-input)
38 56
39targets := initramfs_data.cpio.gz