Patchwork hw/arm: Improve detection of Linux kernels

login
register
mail settings
Submitter Stefan Weil
Date Aug. 9, 2010, 2:48 p.m.
Message ID <1281365286-7050-1-git-send-email-weil@mail.berlios.de>
Download mbox | patch
Permalink /patch/61283/
State New
Headers show

Comments

Stefan Weil - Aug. 9, 2010, 2:48 p.m.
ELF images were not detected as linux kernels.

Assume that they are linux kernels if the kernel name contains 'vmlinux'.

Cc: Paul Brook <paul@codesourcery.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
 hw/arm_boot.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
Stefan Weil - Sept. 9, 2010, 5:44 p.m.
Am 09.08.2010 16:48, schrieb Stefan Weil:
> ELF images were not detected as linux kernels.
>
> Assume that they are linux kernels if the kernel name contains 'vmlinux'.
>
> Cc: Paul Brook<paul@codesourcery.com>
> Signed-off-by: Stefan Weil<weil@mail.berlios.de>
> ---
>   hw/arm_boot.c |    6 ++++--
>   1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/hw/arm_boot.c b/hw/arm_boot.c
> index 620550b..e73ef42 100644
> --- a/hw/arm_boot.c
> +++ b/hw/arm_boot.c
> @@ -204,7 +204,7 @@ void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
>       int kernel_size;
>       int initrd_size;
>       int n;
> -    int is_linux = 0;
> +    int is_linux;
>       uint64_t elf_entry;
>       target_phys_addr_t entry;
>       int big_endian;
> @@ -225,7 +225,9 @@ void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
>       big_endian = 0;
>   #endif
>
> -    /* Assume that raw images are linux kernels, and ELF images are not.  */
> +    /* Assume that raw images are linux kernels, and ELF images
> +       are not (unless the kernel filename contains 'vmlinux'). */
> +    is_linux = (strstr(info->kernel_filename, "vmlinux") != NULL);
>       kernel_size = load_elf(info->kernel_filename, NULL, NULL,&elf_entry,
>                              NULL, NULL, big_endian, ELF_MACHINE, 1);
>       entry = elf_entry;
>    


The patch is still missing in qemu master. Is anything missing,
or can it be applied?

Patch

diff --git a/hw/arm_boot.c b/hw/arm_boot.c
index 620550b..e73ef42 100644
--- a/hw/arm_boot.c
+++ b/hw/arm_boot.c
@@ -204,7 +204,7 @@  void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
     int kernel_size;
     int initrd_size;
     int n;
-    int is_linux = 0;
+    int is_linux;
     uint64_t elf_entry;
     target_phys_addr_t entry;
     int big_endian;
@@ -225,7 +225,9 @@  void arm_load_kernel(CPUState *env, struct arm_boot_info *info)
     big_endian = 0;
 #endif
 
-    /* Assume that raw images are linux kernels, and ELF images are not.  */
+    /* Assume that raw images are linux kernels, and ELF images
+       are not (unless the kernel filename contains 'vmlinux'). */
+    is_linux = (strstr(info->kernel_filename, "vmlinux") != NULL);
     kernel_size = load_elf(info->kernel_filename, NULL, NULL, &elf_entry,
                            NULL, NULL, big_endian, ELF_MACHINE, 1);
     entry = elf_entry;