qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Allow ARMv7M to be started without a kernel


From: Alexander Graf
Subject: Re: [Qemu-devel] Allow ARMv7M to be started without a kernel
Date: Fri, 6 May 2011 14:48:26 +0200

On 06.05.2011, at 01:50, Rob Landley wrote:

> On 05/05/2011 06:26 PM, Alexander Graf wrote:
>>> As an aside: I think QEMU should have an option which is "just load
>>> a plain ELF or raw binary, with no funny Linux-kernel-specific 
>>> behaviour" rather than overloading -kernel to mean "if it's a raw
>>> image it's Linux and if it's an ELF file it's not".
>> 
>> Traditionally, -bios has been that one. -kernel is more of a real
>> bootloader replacement, including all the weirdness a bootloader does
>> :).
> 
> Except that neither "qemu-system-x86_64 -bios vmlinux" nor
> qemu-system-x86_64 -kernel vmlinux" will load an ELF kernel on x86-64.
> 
> The code to do this _exists_ within qemu, it's just not hooked up
> consistently on all targets.  We have a universal cross-platform image
> format, and we have support in qemu for loading that format, and for
> some reason it's only enabled on certain targets.  I've never understood
> why...

Unfortunately, booting isn't that easy :). The kernel needs some more data than 
just itself and an entry point to properly load. On some architectures, it 
requires a device tree (and pointer to it in a register), it might require page 
tables / TLB entries to be set up, if you want -initrd and -append to work you 
also need to tell the kernel where to find those.

So while ELF is a nice container for binaries, there are still some pieces 
missing to actually make it a kernel loader. But that's what multiboot was 
invented for. I haven't seen too much effort going on around multiboot on 
non-x86, but it basically fills exactly the gap you're wondering about. It uses 
ELF and adds a simple boot protocol for all the other fancy stuff a kernel 
needs.


Alex




reply via email to

[Prev in Thread] Current Thread [Next in Thread]