[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 10/14] loader: switch arm/linux to grub_linux_kernel_header st
From: |
Leif Lindholm |
Subject: |
[PATCH v2 10/14] loader: switch arm/linux to grub_linux_kernel_header struct |
Date: |
Thu, 3 Aug 2017 11:04:28 +0100 |
Use kernel header struct and generic magic definition to align with
arm64/linux loader.
Signed-off-by: Leif Lindholm <address@hidden>
---
grub-core/loader/arm/linux.c | 11 +++++------
include/grub/arm/linux.h | 15 ++++++++++++---
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
index e64c79a95..067f69894 100644
--- a/grub-core/loader/arm/linux.c
+++ b/grub-core/loader/arm/linux.c
@@ -46,9 +46,6 @@ static const void *current_fdt;
typedef void (*kernel_entry_t) (int, unsigned long, void *);
-#define LINUX_ZIMAGE_OFFSET 0x24
-#define LINUX_ZIMAGE_MAGIC 0x016f2818
-
#define LINUX_PHYS_OFFSET (0x00008000)
#define LINUX_INITRD_PHYS_OFFSET (LINUX_PHYS_OFFSET + 0x02000000)
#define LINUX_FDT_PHYS_OFFSET (LINUX_INITRD_PHYS_OFFSET - 0x10000)
@@ -315,6 +312,7 @@ linux_boot (void)
static grub_err_t
linux_load (const char *filename, grub_file_t file)
{
+ struct grub_linux_kernel_header *lh;
int size;
size = grub_file_size (file);
@@ -337,9 +335,10 @@ linux_load (const char *filename, grub_file_t file)
return grub_errno;
}
- if (size > LINUX_ZIMAGE_OFFSET + 4
- && *(grub_uint32_t *) (linux_addr + LINUX_ZIMAGE_OFFSET)
- == LINUX_ZIMAGE_MAGIC)
+ lh = (void *) linux_addr;
+
+ if ((grub_size_t) size > sizeof (*lh) &&
+ lh->magic == GRUB_LINUX_MAGIC_SIGNATURE)
;
else if (size > 0x8000 && *(grub_uint32_t *) (linux_addr) == 0xea000006
&& machine_type == GRUB_ARM_MACHINE_TYPE_RASPBERRY_PI)
diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h
index f217f8281..802090239 100644
--- a/include/grub/arm/linux.h
+++ b/include/grub/arm/linux.h
@@ -20,11 +20,20 @@
#ifndef GRUB_LINUX_CPU_HEADER
#define GRUB_LINUX_CPU_HEADER 1
-#define LINUX_ZIMAGE_OFFSET 0x24
-#define LINUX_ZIMAGE_MAGIC 0x016f2818
-
#include "system.h"
+#define GRUB_LINUX_MAGIC_SIGNATURE 0x016f2818
+
+struct grub_linux_kernel_header {
+ grub_uint32_t code0;
+ grub_uint32_t reserved1[8];
+ grub_uint32_t magic;
+ grub_uint32_t start; /* _start */
+ grub_uint32_t end; /* _edata */
+ grub_uint32_t reserved2[4];
+ grub_uint32_t hdr_offset;
+};
+
#if defined GRUB_MACHINE_UBOOT
# include <grub/uboot/uboot.h>
# define LINUX_ADDRESS (start_of_ram + 0x8000)
--
2.11.0
- [PATCH v2 06/14] efi: move fdt helper library, (continued)
- [PATCH v2 06/14] efi: move fdt helper library, Leif Lindholm, 2017/08/03
- [PATCH v2 05/14] efi: refactor grub_efi_allocate_pages, Leif Lindholm, 2017/08/03
- [PATCH v2 07/14] efi: Add GRUB_PE32_MAGIC definition, Leif Lindholm, 2017/08/03
- [PATCH v2 11/14] arm/efi: switch to arm64 linux loader, Leif Lindholm, 2017/08/03
- [PATCH v2 08/14] arm64 linux loader: improve type portability, Leif Lindholm, 2017/08/03
- [PATCH v2 10/14] loader: switch arm/linux to grub_linux_kernel_header struct,
Leif Lindholm <=
- [PATCH v2 09/14] arm64 linux loader: rename functions and macros and move to common headers, Leif Lindholm, 2017/08/03
- [PATCH v2 13/14] efi: restrict arm/arm64 linux loader initrd placement, Leif Lindholm, 2017/08/03
- [PATCH v2 12/14] arm: delete unused efi support from loader/arm, Leif Lindholm, 2017/08/03
- [PATCH v2 14/14] efi: change heap allocation type to GRUB_EFI_LOADER_CODE, Leif Lindholm, 2017/08/03