LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] x86: define OBJCOPYFLAGS explicitly for each target.
@ 2008-01-31 21:45 Ian Campbell
  2008-01-31 21:45 ` [PATCH] x86: use ELF format in compressed images Ian Campbell
  2008-01-31 22:45 ` [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ingo Molnar
  0 siblings, 2 replies; 16+ messages in thread
From: Ian Campbell @ 2008-01-31 21:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Ian Campbell, Thomas Gleixner, Ingo Molnar, H. Peter Anvin

Do this rather than defining a global version and overriding it in
almost all cases in order to make subsequent patches simpler.

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/Makefile                 |    1 -
 arch/x86/boot/Makefile            |    2 +-
 arch/x86/boot/compressed/Makefile |    1 +
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index da8f412..e7b7c68 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -92,7 +92,6 @@ KBUILD_AFLAGS += $(cfi) $(cfi-sigframe)
 KBUILD_CFLAGS += $(cfi) $(cfi-sigframe)
 
 LDFLAGS := -m elf_$(UTS_MACHINE)
-OBJCOPYFLAGS := -O binary -R .note -R .comment -S
 
 # Speed up the build
 KBUILD_CFLAGS += -pipe
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 349b81a..254a583 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -80,6 +80,7 @@ $(obj)/zImage $(obj)/bzImage: $(obj)/setup.bin \
 	$(call if_changed,image)
 	@echo 'Kernel: $@ is ready' ' (#'`cat .version`')'
 
+OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
 $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
 	$(call if_changed,objcopy)
 
@@ -90,7 +91,6 @@ $(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE
 	$(call if_changed,ld)
 
 OBJCOPYFLAGS_setup.bin	:= -O binary
-
 $(obj)/setup.bin: $(obj)/setup.elf FORCE
 	$(call if_changed,objcopy)
 
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index fe24cea..d2b9f3b 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -22,6 +22,7 @@ $(obj)/vmlinux: $(src)/vmlinux_$(BITS).lds $(obj)/head_$(BITS).o $(obj)/misc.o $
 	$(call if_changed,ld)
 	@:
 
+OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
 $(obj)/vmlinux.bin: vmlinux FORCE
 	$(call if_changed,objcopy)
 
-- 
1.5.3.8


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH] x86: use ELF format in compressed images.
  2008-01-31 21:45 [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ian Campbell
@ 2008-01-31 21:45 ` Ian Campbell
  2008-01-31 21:45   ` [PATCH] x86: add a crc32 checksum to the kernel image Ian Campbell
  2008-01-31 22:45 ` [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ingo Molnar
  1 sibling, 1 reply; 16+ messages in thread
From: Ian Campbell @ 2008-01-31 21:45 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ian Campbell, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jeremy Fitzhardinge, virtualization

This allows other boot loaders such as the Xen domain builder the
opportunity to extract the ELF file.

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: virtualization@lists.linux-foundation.org
---
 Documentation/i386/boot.txt       |   18 +++++++++++++
 arch/x86/boot/Makefile            |   14 ++++++++++
 arch/x86/boot/compressed/Makefile |    2 +-
 arch/x86/boot/compressed/misc.c   |   49 +++++++++++++++++++++++++++++++++++++
 arch/x86/boot/header.S            |    6 ++++
 5 files changed, 88 insertions(+), 1 deletions(-)

diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt
index fc49b79..b5f5ba1 100644
--- a/Documentation/i386/boot.txt
+++ b/Documentation/i386/boot.txt
@@ -170,6 +170,8 @@ Offset	Proto	Name		Meaning
 0238/4	2.06+	cmdline_size	Maximum size of the kernel command line
 023C/4	2.07+	hardware_subarch Hardware subarchitecture
 0240/8	2.07+	hardware_subarch_data Subarchitecture-specific data
+0248/4	2.08+	compressed_payload_offset
+024C/4	2.08+	compressed_payload_length
 
 (1) For backwards compatibility, if the setup_sects field contains 0, the
     real value is 4.
@@ -512,6 +514,22 @@ Protocol:	2.07+
 
   A pointer to data that is specific to hardware subarch
 
+Field name:	compressed_payload_offset
+Type:		read
+Offset/size:	0x248/4
+Protocol:	2.08+
+
+  If non-zero then this field contains the offset from the end of the
+  real-mode code to the compressed payload. The compression format
+  should be determined using the standard magic number, currently only
+  gzip is used.
+  
+Field name:	compressed_payload_length
+Type:		read
+Offset/size:	0x24c/4
+Protocol:	2.08+
+
+  The length of the compressed payload.
 
 **** THE KERNEL COMMAND LINE
 
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 254a583..0c629dc 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -86,6 +86,20 @@ $(obj)/vmlinux.bin: $(obj)/compressed/vmlinux FORCE
 
 SETUP_OBJS = $(addprefix $(obj)/,$(setup-y))
 
+sed-offsets := -e 's/^00*/0/' \
+        -e 's/^\([0-9a-fA-F]*\) . \(input_data\|input_data_end\)$$/\#define \2 0x\1/p'
+
+quiet_cmd_offsets = OFFSETS $@
+      cmd_offsets = $(NM) $< | sed -n $(sed-offsets) > $@
+
+$(obj)/offsets.h: $(obj)/compressed/vmlinux FORCE
+	$(call if_changed,offsets)
+
+targets += offsets.h
+
+AFLAGS_header.o += -I$(obj)
+$(obj)/header.o: $(obj)/offsets.h
+
 LDFLAGS_setup.elf	:= -T
 $(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE
 	$(call if_changed,ld)
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index d2b9f3b..92fdd35 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -22,7 +22,7 @@ $(obj)/vmlinux: $(src)/vmlinux_$(BITS).lds $(obj)/head_$(BITS).o $(obj)/misc.o $
 	$(call if_changed,ld)
 	@:
 
-OBJCOPYFLAGS_vmlinux.bin := -O binary -R .note -R .comment -S
+OBJCOPYFLAGS_vmlinux.bin :=  -R .comment -S
 $(obj)/vmlinux.bin: vmlinux FORCE
 	$(call if_changed,objcopy)
 
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
index 8182e32..8a5daf5 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -15,6 +15,10 @@
  * we just keep it from happening
  */
 #undef CONFIG_PARAVIRT
+#ifdef CONFIG_X86_32
+#define _ASM_DESC_H_ 1
+#endif
+
 #ifdef CONFIG_X86_64
 #define _LINUX_STRING_H_ 1
 #define __LINUX_BITMAP_H 1
@@ -22,6 +26,7 @@
 
 #include <linux/linkage.h>
 #include <linux/screen_info.h>
+#include <linux/elf.h>
 #include <asm/io.h>
 #include <asm/page.h>
 #include <asm/boot.h>
@@ -365,6 +370,49 @@ static void error(char *x)
 		asm("hlt");
 }
 
+static void parse_elf(void *output)
+{
+#ifdef CONFIG_X86_64
+	Elf64_Ehdr ehdr;
+	Elf64_Phdr *phdrs, *phdr;
+#else
+	Elf32_Ehdr ehdr;
+	Elf32_Phdr *phdrs, *phdr;
+#endif
+	int i;
+
+	memcpy(&ehdr, output, sizeof(ehdr));
+	if(ehdr.e_ident[EI_MAG0] != ELFMAG0 ||
+	   ehdr.e_ident[EI_MAG1] != ELFMAG1 ||
+	   ehdr.e_ident[EI_MAG2] != ELFMAG2 ||
+	   ehdr.e_ident[EI_MAG3] != ELFMAG3)
+	{
+		error("Kernel is not a valid ELF file");
+		return;
+	}
+
+	putstr("Parsing ELF... ");
+
+	phdrs = malloc(sizeof(*phdrs) * ehdr.e_phnum);
+	if (!phdrs)
+		error("Failed to allocate space for phdrs");
+
+	memcpy(phdrs, output + ehdr.e_phoff, sizeof(*phdrs) * ehdr.e_phnum);
+
+	for (i=0; i<ehdr.e_phnum; i++) {
+		phdr = &phdrs[i];
+
+		switch (phdr->p_type) {
+		case PT_LOAD:
+			memcpy((void*)phdr->p_paddr,
+			       output + phdr->p_offset,
+			       phdr->p_filesz);
+			break;
+		default: /* Ignore other PT_* */ break;
+		}
+	}
+}
+
 asmlinkage void decompress_kernel(void *rmode, memptr heap,
 				  uch *input_data, unsigned long input_len,
 				  uch *output)
@@ -408,6 +456,7 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,
 	makecrc();
 	putstr("\nDecompressing Linux... ");
 	gunzip();
+	parse_elf(output);
 	putstr("done.\nBooting the kernel.\n");
 	return;
 }
diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 64ad901..8471658 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -22,6 +22,7 @@
 #include <asm/page.h>
 #include <asm/setup.h>
 #include "boot.h"
+#include "offsets.h"
 
 SETUPSECTS	= 4			/* default nr of setup-sectors */
 BOOTSEG		= 0x07C0		/* original address of boot-sector */
@@ -223,6 +224,11 @@ hardware_subarch:	.long 0			# subarchitecture, added with 2.07
 
 hardware_subarch_data:	.quad 0
 
+compressed_payload_offset:
+			.long input_data
+compressed_payload_length:
+			.long input_data_end-input_data
+
 # End of setup header #####################################################
 
 	.section ".inittext", "ax"
-- 
1.5.3.8


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-01-31 21:45 ` [PATCH] x86: use ELF format in compressed images Ian Campbell
@ 2008-01-31 21:45   ` Ian Campbell
  2008-01-31 21:45     ` [PATCH] x86: bump image header to version 2.08 Ian Campbell
                       ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Ian Campbell @ 2008-01-31 21:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Ian Campbell, Thomas Gleixner, Ingo Molnar, H. Peter Anvin

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 Documentation/i386/boot.txt |    5 +++
 arch/x86/boot/tools/build.c |   78 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt
index b5f5ba1..ad201f0 100644
--- a/Documentation/i386/boot.txt
+++ b/Documentation/i386/boot.txt
@@ -531,6 +531,11 @@ Protocol:	2.08+
 
   The length of the compressed payload.
 
+**** THE IMAGE CHECKSUM
+
+The CRC-32 checksum of the entire file is appended to the end of the
+file. The CRC of the file including these trailing bytes is therefore 0.
+
 **** THE KERNEL COMMAND LINE
 
 The kernel command line has become an important way for the boot
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index b424874..9c34032 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -50,6 +50,75 @@ typedef unsigned long  u32;
 u8 buf[SETUP_SECT_MAX*512];
 int is_big_kernel;
 
+/*----------------------------------------------------------------------*/
+
+static const unsigned int crctab32[] = {
+	0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
+	0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
+	0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
+	0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
+	0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
+	0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
+	0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
+	0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
+	0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
+	0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
+	0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
+	0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
+	0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
+	0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
+	0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
+	0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
+	0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
+	0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
+	0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
+	0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
+	0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
+	0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
+	0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
+	0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
+	0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
+	0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
+	0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
+	0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
+	0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
+	0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
+	0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
+	0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
+	0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
+	0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
+	0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
+	0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
+	0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
+	0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
+	0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
+	0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
+	0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
+	0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
+	0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
+	0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
+	0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
+	0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
+	0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
+	0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
+	0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
+	0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
+	0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
+	0x2d02ef8dU
+};
+
+static unsigned long partial_crc32_one(u8 c, unsigned long crc)
+{
+	return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8);
+}
+
+static unsigned long partial_crc32(const u8 *s, int len, unsigned long crc)
+{
+	while (len--)
+		crc = partial_crc32_one(*s++, crc);
+	return crc;
+}
+
 static void die(const char * str, ...)
 {
 	va_list args;
@@ -74,6 +143,7 @@ int main(int argc, char ** argv)
 	FILE *file;
 	int fd;
 	void *kernel;
+	unsigned long crc = 0xffffffffUL;
 
 	if (argc > 2 && !strcmp(argv[1], "-b"))
 	  {
@@ -155,12 +225,20 @@ int main(int argc, char ** argv)
 	buf[0x1f6] = sys_size >> 16;
 	buf[0x1f7] = sys_size >> 24;
 
+	crc = partial_crc32(buf, i, crc);
 	if (fwrite(buf, 1, i, stdout) != i)
 		die("Writing setup failed");
 
 	/* Copy the kernel code */
+	crc = partial_crc32(kernel, sz, crc);
 	if (fwrite(kernel, 1, sz, stdout) != sz)
 		die("Writing kernel failed");
+
+	/* Write the CRC */
+	fprintf(stderr, "CRC %lx\n", crc);
+	if (fwrite(&crc, 1, 4, stdout) != 4)
+		die("Writing CRC failed");
+
 	close(fd);
 
 	/* Everything is OK */
-- 
1.5.3.8


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH] x86: bump image header to version 2.08.
  2008-01-31 21:45   ` [PATCH] x86: add a crc32 checksum to the kernel image Ian Campbell
@ 2008-01-31 21:45     ` Ian Campbell
  2008-01-31 22:10     ` [PATCH] x86: add a crc32 checksum to the kernel image H. Peter Anvin
  2008-02-01  0:43     ` David Newall
  2 siblings, 0 replies; 16+ messages in thread
From: Ian Campbell @ 2008-01-31 21:45 UTC (permalink / raw)
  To: linux-kernel; +Cc: Ian Campbell, Thomas Gleixner, Ingo Molnar, H. Peter Anvin

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 arch/x86/boot/header.S |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
index 8471658..40c91bb 100644
--- a/arch/x86/boot/header.S
+++ b/arch/x86/boot/header.S
@@ -120,7 +120,7 @@ _start:
 	# Part 2 of the header, from the old setup.S
 
 		.ascii	"HdrS"		# header signature
-		.word	0x0207		# header version number (>= 0x0105)
+		.word	0x0208		# header version number (>= 0x0105)
 					# or else old loadlin-1.5 will fail)
 		.globl realmode_swtch
 realmode_swtch:	.word	0, 0		# default_switch, SETUPSEG
-- 
1.5.3.8


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-01-31 21:45   ` [PATCH] x86: add a crc32 checksum to the kernel image Ian Campbell
  2008-01-31 21:45     ` [PATCH] x86: bump image header to version 2.08 Ian Campbell
@ 2008-01-31 22:10     ` H. Peter Anvin
  2008-02-01  0:23       ` H. Peter Anvin
  2008-02-01  9:02       ` Ian Campbell
  2008-02-01  0:43     ` David Newall
  2 siblings, 2 replies; 16+ messages in thread
From: H. Peter Anvin @ 2008-01-31 22:10 UTC (permalink / raw)
  To: Ian Campbell; +Cc: linux-kernel, Thomas Gleixner, Ingo Molnar

Ian Campbell wrote:
> Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: H. Peter Anvin <hpa@zytor.com>
> ---
>  Documentation/i386/boot.txt |    5 +++
>  arch/x86/boot/tools/build.c |   78 +++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 83 insertions(+), 0 deletions(-)
> 
> diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt
> index b5f5ba1..ad201f0 100644
> --- a/Documentation/i386/boot.txt
> +++ b/Documentation/i386/boot.txt
> @@ -531,6 +531,11 @@ Protocol:	2.08+
>  
>    The length of the compressed payload.
>  
> +**** THE IMAGE CHECKSUM
> +
> +The CRC-32 checksum of the entire file is appended to the end of the
> +file. The CRC of the file including these trailing bytes is therefore 0.
> +

Hm.  I have some minor concerns about this:

* The classical length field is only available in multiples of 16 (I 
realize your patches change that to some degree, but I'd hate to make 
the guarantee that the image payload is the last thing in the image -- 
it loses flexibility for the future.)  The end of the image isn't 
available in all cases, so this would require padding it out to a 
16-byte boundary before appending the CRC32.  An mmap is guaranteed to 
be zero-padded out to the next page boundary, so explicitly rounding sz 
up (instead of when calculating sys_size) should do the job.

* I believe it is recommended to store the inverse of the crc32, not the 
crc32 itself - it catches more errors.  This is also the reason to start 
out with ~0 rather than 0.

* Please don't use "unsigned long" to represent a 32-bit number.

	-hpa


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: define OBJCOPYFLAGS explicitly for each target.
  2008-01-31 21:45 [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ian Campbell
  2008-01-31 21:45 ` [PATCH] x86: use ELF format in compressed images Ian Campbell
@ 2008-01-31 22:45 ` Ingo Molnar
  1 sibling, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2008-01-31 22:45 UTC (permalink / raw)
  To: Ian Campbell; +Cc: linux-kernel, Thomas Gleixner, Ingo Molnar, H. Peter Anvin


* Ian Campbell <ijc@hellion.org.uk> wrote:

> Do this rather than defining a global version and overriding it in 
> almost all cases in order to make subsequent patches simpler.

thanks Ian - i've picked up #1, #2 and #4 from your series. Once #3 is 
OK to Peter i'll add that too. (#4, the bumping of the version needs 
#3 to be meaningful.)

	Ingo

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-01-31 22:10     ` [PATCH] x86: add a crc32 checksum to the kernel image H. Peter Anvin
@ 2008-02-01  0:23       ` H. Peter Anvin
  2008-02-01  9:02       ` Ian Campbell
  1 sibling, 0 replies; 16+ messages in thread
From: H. Peter Anvin @ 2008-02-01  0:23 UTC (permalink / raw)
  To: Ian Campbell; +Cc: linux-kernel, Thomas Gleixner, Ingo Molnar

H. Peter Anvin wrote:
> 
> Hm.  I have some minor concerns about this:
> 
> * The classical length field is only available in multiples of 16 (I 
> realize your patches change that to some degree, but I'd hate to make 
> the guarantee that the image payload is the last thing in the image -- 
> it loses flexibility for the future.)  The end of the image isn't 
> available in all cases, so this would require padding it out to a 
> 16-byte boundary before appending the CRC32.  An mmap is guaranteed to 
> be zero-padded out to the next page boundary, so explicitly rounding sz 
> up (instead of when calculating sys_size) should do the job.
> 

Thinking about this more carefully, we should probably have it rounded 
up to a 16-byte boundary *including* the CRC32, so the CRC32 is included 
in the notional image.

	-hpa

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-01-31 21:45   ` [PATCH] x86: add a crc32 checksum to the kernel image Ian Campbell
  2008-01-31 21:45     ` [PATCH] x86: bump image header to version 2.08 Ian Campbell
  2008-01-31 22:10     ` [PATCH] x86: add a crc32 checksum to the kernel image H. Peter Anvin
@ 2008-02-01  0:43     ` David Newall
  2008-02-01  1:16       ` H. Peter Anvin
  2 siblings, 1 reply; 16+ messages in thread
From: David Newall @ 2008-02-01  0:43 UTC (permalink / raw)
  To: Ian Campbell; +Cc: linux-kernel, Thomas Gleixner, Ingo Molnar, H. Peter Anvin

Isn't a crc32 calculation already defined?  Yes; in lib/crc32.c.  One is
surely enough.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-01  0:43     ` David Newall
@ 2008-02-01  1:16       ` H. Peter Anvin
  2008-02-01  5:46         ` David Newall
  2008-02-01 10:58         ` Ian Campbell
  0 siblings, 2 replies; 16+ messages in thread
From: H. Peter Anvin @ 2008-02-01  1:16 UTC (permalink / raw)
  To: David Newall; +Cc: Ian Campbell, linux-kernel, Thomas Gleixner, Ingo Molnar

David Newall wrote:
> Isn't a crc32 calculation already defined?  Yes; in lib/crc32.c.  One is
> surely enough.

As long as it can be included in user-space code we should use that one.

	-hpa

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-01  1:16       ` H. Peter Anvin
@ 2008-02-01  5:46         ` David Newall
  2008-02-01 10:58         ` Ian Campbell
  1 sibling, 0 replies; 16+ messages in thread
From: David Newall @ 2008-02-01  5:46 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Ian Campbell, linux-kernel, Thomas Gleixner, Ingo Molnar

H. Peter Anvin wrote:
> David Newall wrote:
>> Isn't a crc32 calculation already defined?  Yes; in lib/crc32.c.  One is
>> surely enough.
>
> As long as it can be included in user-space code we should use that one. 

You're right.  I misread the patch.  I thought the calculation was being
added to kernel code.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-01-31 22:10     ` [PATCH] x86: add a crc32 checksum to the kernel image H. Peter Anvin
  2008-02-01  0:23       ` H. Peter Anvin
@ 2008-02-01  9:02       ` Ian Campbell
  2008-02-01 13:07         ` Ingo Molnar
  2008-02-06  1:09         ` Randy Dunlap
  1 sibling, 2 replies; 16+ messages in thread
From: Ian Campbell @ 2008-02-01  9:02 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: linux-kernel, Thomas Gleixner, Ingo Molnar


On Thu, 2008-01-31 at 14:10 -0800, H. Peter Anvin wrote:
> Hm.  I have some minor concerns about this:
> 
> * The classical length field is only available in multiples of 16 (I 
> realize your patches change that to some degree, but I'd hate to make 
> the guarantee that the image payload is the last thing in the image -- 
> it loses flexibility for the future.)  The end of the image isn't 
> available in all cases, so this would require padding it out to a 
> 16-byte boundary before appending the CRC32.  An mmap is guaranteed to 
> be zero-padded out to the next page boundary, so explicitly rounding sz 
> up (instead of when calculating sys_size) should do the job.

Peter in a followup mail:
> Thinking about this more carefully, we should probably have it rounded
> up to a 16-byte boundary *including* the CRC32, so the CRC32 is
> included in the notional image.

Agreed.

Peter in the first mail again:
> * I believe it is recommended to store the inverse of the crc32, not the 
> crc32 itself - it catches more errors.  This is also the reason to start 
> out with ~0 rather than 0.

If you store the inverted checksum then the complete file will always
sum to 0xdebb20e3 rather than zero.

However I'm told that inverting the checksum only protects extra zeroes
after the CRC. Given that we checksum over a known length and don't
especially care about trailing zeroes in any case I think it is nicer if
the file checksums to zero.

> * Please don't use "unsigned long" to represent a 32-bit number.

Fixed.

---
>From 1c614383dc9cb0c7791ebab386dc012db336b28c Mon Sep 17 00:00:00 2001
From: Ian Campbell <ijc@hellion.org.uk>
Date: Fri, 1 Feb 2008 09:01:22 +0000
Subject: [PATCH] x86: add a crc32 checksum to the kernel image.

Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
---
 Documentation/i386/boot.txt |    7 +++
 arch/x86/boot/tools/build.c |   88 ++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 94 insertions(+), 1 deletions(-)

diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt
index b5f5ba1..f853d49 100644
--- a/Documentation/i386/boot.txt
+++ b/Documentation/i386/boot.txt
@@ -531,6 +531,13 @@ Protocol:	2.08+
 
   The length of the compressed payload.
 
+**** THE IMAGE CHECKSUM
+
+The CRC-32 is calculated over the entire file using an initial
+remainder of 0xffffffff.  The checksum is appended to the file
+therefore the CRC of the file up to the limit specified in the syssize
+field of the header is always 0.
+
 **** THE KERNEL COMMAND LINE
 
 The kernel command line has become an important way for the boot
diff --git a/arch/x86/boot/tools/build.c b/arch/x86/boot/tools/build.c
index b424874..2ba22e8 100644
--- a/arch/x86/boot/tools/build.c
+++ b/arch/x86/boot/tools/build.c
@@ -50,6 +50,75 @@ typedef unsigned long  u32;
 u8 buf[SETUP_SECT_MAX*512];
 int is_big_kernel;
 
+/*----------------------------------------------------------------------*/
+
+static const unsigned int crctab32[] = {
+	0x00000000U, 0x77073096U, 0xee0e612cU, 0x990951baU, 0x076dc419U,
+	0x706af48fU, 0xe963a535U, 0x9e6495a3U, 0x0edb8832U, 0x79dcb8a4U,
+	0xe0d5e91eU, 0x97d2d988U, 0x09b64c2bU, 0x7eb17cbdU, 0xe7b82d07U,
+	0x90bf1d91U, 0x1db71064U, 0x6ab020f2U, 0xf3b97148U, 0x84be41deU,
+	0x1adad47dU, 0x6ddde4ebU, 0xf4d4b551U, 0x83d385c7U, 0x136c9856U,
+	0x646ba8c0U, 0xfd62f97aU, 0x8a65c9ecU, 0x14015c4fU, 0x63066cd9U,
+	0xfa0f3d63U, 0x8d080df5U, 0x3b6e20c8U, 0x4c69105eU, 0xd56041e4U,
+	0xa2677172U, 0x3c03e4d1U, 0x4b04d447U, 0xd20d85fdU, 0xa50ab56bU,
+	0x35b5a8faU, 0x42b2986cU, 0xdbbbc9d6U, 0xacbcf940U, 0x32d86ce3U,
+	0x45df5c75U, 0xdcd60dcfU, 0xabd13d59U, 0x26d930acU, 0x51de003aU,
+	0xc8d75180U, 0xbfd06116U, 0x21b4f4b5U, 0x56b3c423U, 0xcfba9599U,
+	0xb8bda50fU, 0x2802b89eU, 0x5f058808U, 0xc60cd9b2U, 0xb10be924U,
+	0x2f6f7c87U, 0x58684c11U, 0xc1611dabU, 0xb6662d3dU, 0x76dc4190U,
+	0x01db7106U, 0x98d220bcU, 0xefd5102aU, 0x71b18589U, 0x06b6b51fU,
+	0x9fbfe4a5U, 0xe8b8d433U, 0x7807c9a2U, 0x0f00f934U, 0x9609a88eU,
+	0xe10e9818U, 0x7f6a0dbbU, 0x086d3d2dU, 0x91646c97U, 0xe6635c01U,
+	0x6b6b51f4U, 0x1c6c6162U, 0x856530d8U, 0xf262004eU, 0x6c0695edU,
+	0x1b01a57bU, 0x8208f4c1U, 0xf50fc457U, 0x65b0d9c6U, 0x12b7e950U,
+	0x8bbeb8eaU, 0xfcb9887cU, 0x62dd1ddfU, 0x15da2d49U, 0x8cd37cf3U,
+	0xfbd44c65U, 0x4db26158U, 0x3ab551ceU, 0xa3bc0074U, 0xd4bb30e2U,
+	0x4adfa541U, 0x3dd895d7U, 0xa4d1c46dU, 0xd3d6f4fbU, 0x4369e96aU,
+	0x346ed9fcU, 0xad678846U, 0xda60b8d0U, 0x44042d73U, 0x33031de5U,
+	0xaa0a4c5fU, 0xdd0d7cc9U, 0x5005713cU, 0x270241aaU, 0xbe0b1010U,
+	0xc90c2086U, 0x5768b525U, 0x206f85b3U, 0xb966d409U, 0xce61e49fU,
+	0x5edef90eU, 0x29d9c998U, 0xb0d09822U, 0xc7d7a8b4U, 0x59b33d17U,
+	0x2eb40d81U, 0xb7bd5c3bU, 0xc0ba6cadU, 0xedb88320U, 0x9abfb3b6U,
+	0x03b6e20cU, 0x74b1d29aU, 0xead54739U, 0x9dd277afU, 0x04db2615U,
+	0x73dc1683U, 0xe3630b12U, 0x94643b84U, 0x0d6d6a3eU, 0x7a6a5aa8U,
+	0xe40ecf0bU, 0x9309ff9dU, 0x0a00ae27U, 0x7d079eb1U, 0xf00f9344U,
+	0x8708a3d2U, 0x1e01f268U, 0x6906c2feU, 0xf762575dU, 0x806567cbU,
+	0x196c3671U, 0x6e6b06e7U, 0xfed41b76U, 0x89d32be0U, 0x10da7a5aU,
+	0x67dd4accU, 0xf9b9df6fU, 0x8ebeeff9U, 0x17b7be43U, 0x60b08ed5U,
+	0xd6d6a3e8U, 0xa1d1937eU, 0x38d8c2c4U, 0x4fdff252U, 0xd1bb67f1U,
+	0xa6bc5767U, 0x3fb506ddU, 0x48b2364bU, 0xd80d2bdaU, 0xaf0a1b4cU,
+	0x36034af6U, 0x41047a60U, 0xdf60efc3U, 0xa867df55U, 0x316e8eefU,
+	0x4669be79U, 0xcb61b38cU, 0xbc66831aU, 0x256fd2a0U, 0x5268e236U,
+	0xcc0c7795U, 0xbb0b4703U, 0x220216b9U, 0x5505262fU, 0xc5ba3bbeU,
+	0xb2bd0b28U, 0x2bb45a92U, 0x5cb36a04U, 0xc2d7ffa7U, 0xb5d0cf31U,
+	0x2cd99e8bU, 0x5bdeae1dU, 0x9b64c2b0U, 0xec63f226U, 0x756aa39cU,
+	0x026d930aU, 0x9c0906a9U, 0xeb0e363fU, 0x72076785U, 0x05005713U,
+	0x95bf4a82U, 0xe2b87a14U, 0x7bb12baeU, 0x0cb61b38U, 0x92d28e9bU,
+	0xe5d5be0dU, 0x7cdcefb7U, 0x0bdbdf21U, 0x86d3d2d4U, 0xf1d4e242U,
+	0x68ddb3f8U, 0x1fda836eU, 0x81be16cdU, 0xf6b9265bU, 0x6fb077e1U,
+	0x18b74777U, 0x88085ae6U, 0xff0f6a70U, 0x66063bcaU, 0x11010b5cU,
+	0x8f659effU, 0xf862ae69U, 0x616bffd3U, 0x166ccf45U, 0xa00ae278U,
+	0xd70dd2eeU, 0x4e048354U, 0x3903b3c2U, 0xa7672661U, 0xd06016f7U,
+	0x4969474dU, 0x3e6e77dbU, 0xaed16a4aU, 0xd9d65adcU, 0x40df0b66U,
+	0x37d83bf0U, 0xa9bcae53U, 0xdebb9ec5U, 0x47b2cf7fU, 0x30b5ffe9U,
+	0xbdbdf21cU, 0xcabac28aU, 0x53b39330U, 0x24b4a3a6U, 0xbad03605U,
+	0xcdd70693U, 0x54de5729U, 0x23d967bfU, 0xb3667a2eU, 0xc4614ab8U,
+	0x5d681b02U, 0x2a6f2b94U, 0xb40bbe37U, 0xc30c8ea1U, 0x5a05df1bU,
+	0x2d02ef8dU
+};
+
+static u32 partial_crc32_one(u8 c, u32 crc)
+{
+	return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8);
+}
+
+static u32 partial_crc32(const u8 *s, int len, u32 crc)
+{
+	while (len--)
+		crc = partial_crc32_one(*s++, crc);
+	return crc;
+}
+
 static void die(const char * str, ...)
 {
 	va_list args;
@@ -74,6 +143,7 @@ int main(int argc, char ** argv)
 	FILE *file;
 	int fd;
 	void *kernel;
+	u32 crc = 0xffffffffUL;
 
 	if (argc > 2 && !strcmp(argv[1], "-b"))
 	  {
@@ -144,7 +214,8 @@ int main(int argc, char ** argv)
 	kernel = mmap(NULL, sz, PROT_READ, MAP_SHARED, fd, 0);
 	if (kernel == MAP_FAILED)
 		die("Unable to mmap '%s': %m", argv[2]);
-	sys_size = (sz + 15) / 16;
+	/* Number of 16-byte paragraphs, including space for a 4-byte CRC */
+	sys_size = (sz + 15 + 4) / 16;
 	if (!is_big_kernel && sys_size > DEF_SYSSIZE)
 		die("System is too big. Try using bzImage or modules.");
 
@@ -155,12 +226,27 @@ int main(int argc, char ** argv)
 	buf[0x1f6] = sys_size >> 16;
 	buf[0x1f7] = sys_size >> 24;
 
+	crc = partial_crc32(buf, i, crc);
 	if (fwrite(buf, 1, i, stdout) != i)
 		die("Writing setup failed");
 
 	/* Copy the kernel code */
+	crc = partial_crc32(kernel, sz, crc);
 	if (fwrite(kernel, 1, sz, stdout) != sz)
 		die("Writing kernel failed");
+
+	/* Add padding leaving 4 bytes for the checksum */
+	while (sz++ < (sys_size*16) - 4) {
+		crc = partial_crc32_one('\0', crc);
+		if (fwrite("\0", 1, 1, stdout) != 1)
+			die("Writing padding failed");
+	}
+
+	/* Write the CRC */
+	fprintf(stderr, "CRC %lx\n", crc);
+	if (fwrite(&crc, 1, 4, stdout) != 4)
+		die("Writing CRC failed");
+
 	close(fd);
 
 	/* Everything is OK */
-- 
1.5.3.8


-- 
Ian Campbell

In matters of principle, stand like a rock;
in matters of taste, swim with the current.
		-- Thomas Jefferson


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-01  1:16       ` H. Peter Anvin
  2008-02-01  5:46         ` David Newall
@ 2008-02-01 10:58         ` Ian Campbell
  1 sibling, 0 replies; 16+ messages in thread
From: Ian Campbell @ 2008-02-01 10:58 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: David Newall, linux-kernel, Thomas Gleixner, Ingo Molnar


On Thu, 2008-01-31 at 17:16 -0800, H. Peter Anvin wrote:
> David Newall wrote:
> > Isn't a crc32 calculation already defined?  Yes; in lib/crc32.c.  One is
> > surely enough.
> 
> As long as it can be included in user-space code we should use that one.

I don't think it can. There is a main function surrounded by #ifdef
UNITTEST which might once have worked but now there is far too much
kernel gunk in there (as you might expect).

If I can work up the enthusiasm I might break out the core algorithm
into a separate file that can be used in both the kernel and userspace.

Ian.

-- 
Ian Campbell
Current Noise: Reverend Bizarre - Cirith Ungol

"Would I turn on the gas if my pal Mugsy were in there?"
   "You might, rabbit, you might!"
		-- Looney Tunes, Bugs and Thugs (1954, Friz Freleng)


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-01  9:02       ` Ian Campbell
@ 2008-02-01 13:07         ` Ingo Molnar
  2008-02-06  1:09         ` Randy Dunlap
  1 sibling, 0 replies; 16+ messages in thread
From: Ingo Molnar @ 2008-02-01 13:07 UTC (permalink / raw)
  To: Ian Campbell; +Cc: H. Peter Anvin, linux-kernel, Thomas Gleixner, Ingo Molnar


* Ian Campbell <ijc@hellion.org.uk> wrote:

> > * Please don't use "unsigned long" to represent a 32-bit number.
> 
> Fixed.

thanks, applied.

	Ingo

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-01  9:02       ` Ian Campbell
  2008-02-01 13:07         ` Ingo Molnar
@ 2008-02-06  1:09         ` Randy Dunlap
  2008-02-06 20:58           ` Ian Campbell
  1 sibling, 1 reply; 16+ messages in thread
From: Randy Dunlap @ 2008-02-06  1:09 UTC (permalink / raw)
  To: Ian Campbell; +Cc: H. Peter Anvin, linux-kernel, Thomas Gleixner, Ingo Molnar

On Fri, 01 Feb 2008 09:02:48 +0000 Ian Campbell wrote:

> ---
> >From 1c614383dc9cb0c7791ebab386dc012db336b28c Mon Sep 17 00:00:00 2001
> From: Ian Campbell <ijc@hellion.org.uk>
> Date: Fri, 1 Feb 2008 09:01:22 +0000
> Subject: [PATCH] x86: add a crc32 checksum to the kernel image.
> 
> Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: H. Peter Anvin <hpa@zytor.com>
> ---
>  Documentation/i386/boot.txt |    7 +++
>  arch/x86/boot/tools/build.c |   88 ++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 94 insertions(+), 1 deletions(-)
> 
> diff --git a/Documentation/i386/boot.txt b/Documentation/i386/boot.txt
> index b5f5ba1..f853d49 100644
> --- a/Documentation/i386/boot.txt
> +++ b/Documentation/i386/boot.txt
> @@ -531,6 +531,13 @@ Protocol:	2.08+
>  
>    The length of the compressed payload.
>  
> +**** THE IMAGE CHECKSUM
> +
> +The CRC-32 is calculated over the entire file using an initial
> +remainder of 0xffffffff.  The checksum is appended to the file

Run-on sentences.
Use period (full stop) or semi-colon at end of above sentence.
If using a period, capitalize the next word.  Thanks.


> +therefore the CRC of the file up to the limit specified in the syssize
> +field of the header is always 0.
> +
>  **** THE KERNEL COMMAND LINE
>  
>  The kernel command line has become an important way for the boot

---
~Randy

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-06  1:09         ` Randy Dunlap
@ 2008-02-06 20:58           ` Ian Campbell
  2008-02-06 21:01             ` Randy Dunlap
  0 siblings, 1 reply; 16+ messages in thread
From: Ian Campbell @ 2008-02-06 20:58 UTC (permalink / raw)
  To: Randy Dunlap; +Cc: H. Peter Anvin, linux-kernel, Thomas Gleixner, Ingo Molnar


On Tue, 2008-02-05 at 17:09 -0800, Randy Dunlap wrote:
> On Fri, 01 Feb 2008 09:02:48 +0000 Ian Campbell wrote:
> >  
> > +**** THE IMAGE CHECKSUM
> > +
> > +The CRC-32 is calculated over the entire file using an initial
> > +remainder of 0xffffffff.  The checksum is appended to the file
> 
> Run-on sentences.
> Use period (full stop) or semi-colon at end of above sentence.
> If using a period, capitalize the next word.  Thanks.
> 
> 
> > +therefore the CRC of the file up to the limit specified in the syssize
> > +field of the header is always 0.

Thanks. I went with:

+The CRC-32 is calculated over the entire file using an initial
+remainder of 0xffffffff.  The checksum is appended to the file;
+therefore the CRC of the file up to the limit specified in the syssize
+field of the header is always 0.


-- 
Ian Campbell

If the master dies and the disciple grieves, the lives of both have
been wasted.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH] x86: add a crc32 checksum to the kernel image.
  2008-02-06 20:58           ` Ian Campbell
@ 2008-02-06 21:01             ` Randy Dunlap
  0 siblings, 0 replies; 16+ messages in thread
From: Randy Dunlap @ 2008-02-06 21:01 UTC (permalink / raw)
  To: Ian Campbell; +Cc: H. Peter Anvin, linux-kernel, Thomas Gleixner, Ingo Molnar

Ian Campbell wrote:
> On Tue, 2008-02-05 at 17:09 -0800, Randy Dunlap wrote:
>> On Fri, 01 Feb 2008 09:02:48 +0000 Ian Campbell wrote:
>>>  
>>> +**** THE IMAGE CHECKSUM
>>> +
>>> +The CRC-32 is calculated over the entire file using an initial
>>> +remainder of 0xffffffff.  The checksum is appended to the file
>> Run-on sentences.
>> Use period (full stop) or semi-colon at end of above sentence.
>> If using a period, capitalize the next word.  Thanks.
>>
>>
>>> +therefore the CRC of the file up to the limit specified in the syssize
>>> +field of the header is always 0.
> 
> Thanks. I went with:
> 
> +The CRC-32 is calculated over the entire file using an initial
> +remainder of 0xffffffff.  The checksum is appended to the file;
> +therefore the CRC of the file up to the limit specified in the syssize
> +field of the header is always 0.

Fine, thanks.

-- 
~Randy

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2008-02-06 21:04 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-01-31 21:45 [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ian Campbell
2008-01-31 21:45 ` [PATCH] x86: use ELF format in compressed images Ian Campbell
2008-01-31 21:45   ` [PATCH] x86: add a crc32 checksum to the kernel image Ian Campbell
2008-01-31 21:45     ` [PATCH] x86: bump image header to version 2.08 Ian Campbell
2008-01-31 22:10     ` [PATCH] x86: add a crc32 checksum to the kernel image H. Peter Anvin
2008-02-01  0:23       ` H. Peter Anvin
2008-02-01  9:02       ` Ian Campbell
2008-02-01 13:07         ` Ingo Molnar
2008-02-06  1:09         ` Randy Dunlap
2008-02-06 20:58           ` Ian Campbell
2008-02-06 21:01             ` Randy Dunlap
2008-02-01  0:43     ` David Newall
2008-02-01  1:16       ` H. Peter Anvin
2008-02-01  5:46         ` David Newall
2008-02-01 10:58         ` Ian Campbell
2008-01-31 22:45 ` [PATCH] x86: define OBJCOPYFLAGS explicitly for each target Ingo Molnar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).