Re: [RFC PATCH] qemu-options: bring the kernel and image options together

2022-06-28 Thread Cédric Le Goater

On 6/23/22 12:21, Alex Bennée wrote:


Cédric Le Goater  writes:


On 6/22/22 16:50, Alex Bennée wrote:

How to control the booting of QEMU is often a source of confusion for
users. Bring the options that control this together in the manual
pages and add some verbiage to describe when each option is
appropriate.
Signed-off-by: Alex Bennée 
Cc: Cédric Le Goater 
---
   qemu-options.hx | 80 ++---
   1 file changed, 62 insertions(+), 18 deletions(-)
diff --git a/qemu-options.hx b/qemu-options.hx
index 377d22fbd8..9b0242f0ef 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1585,13 +1585,6 @@ SRST
   Use file as SecureDigital card image.
   ERST
   -DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
-"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
-SRST
-``-pflash file``
-Use file as a parallel flash image.
-ERST
->   DEF("snapshot", 0, QEMU_OPTION_snapshot,
   "-snapshot   write to temporary files instead of disk image files\n",
   QEMU_ARCH_ALL)
@@ -3680,12 +3673,51 @@ DEFHEADING()
 #endif
   -DEFHEADING(Linux/Multiboot boot specific:)
+DEFHEADING(Boot Image or Kernel specific:)
+SRST
+There are broadly 4 ways you can boot a system with QEMU.
+
+ - specify a firmware and let it control finding a kernel
+ - specify a firmware and pass a hint to the kernel to boot
+ - direct kernel image boot
+ - manually load files into the guests address space
+
+The last method is useful for quickly testing kernels but as there is
+no firmware to pass configuration information to the kernel it must
+either be built for the exact configuration or be handed a DTB blob
+which tells the kernel what drivers it needs.


The last method can also load any FW blob with the correct executable
layout (reset vector).


Heh - actually I wrote that paragraph for the direct kernel image boot
and then added the manual option after the fact. I'll try and clean that
up to make it clearer.




+
+ERST
+
+SRST
+
+For x86 machines ``-bios`` will generally do the right thing with
+whatever it is given. For non-x86 machines the more strict ``-pflash``
+option needs an image that is sized for the flash device for the given
+machine type.


Some ppc machine use -bios also, mac, pseries, PowerNV (let's not restrict
to x86).


Ahh the magic some ;-) Does it essentially rely on if the correct
plumbing has been done for the machine? 


They rely on finding a reset vector. So yes, the FW should be mapped
where it is expected and have vectors. The machines also know how to
expose kernel/initrd to the FW and the FWs have runtime services.
It's more than a kernel loader.


Anything I can look for to audit other machine types?


Good question. There are some many ways to start a machine.

The avocado tests should be a good reference and here is a little
tool I use to verify that the PPC machines supported in QEMU boot
correctly :

  https://github.com/legoater/qemu-ppc-boot/blob/main/ppc-boot.sh

Sometime ago, I did a model for a MicroWatt SoC, a POWER9 FPGA
implementation, and I found quite a few ways to boot from some blob.
See :

  https://github.com/qemu/qemu/commit/2f43989f87332c226358c1f3ef7b96d94ba342ca

I guess when FW runtime services are required so is -bios. Else all
these options  :

 -kernel
 -bios
 -device loader
 -drive 

can be used more or less in the same way.

Thanks,

C.







LGTM.

Thanks,

C.



+
+ERST
+
+DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
+"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
+SRST
+``-bios file``
+Set the filename for the BIOS.
+ERST
+
+DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
+"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
+SRST
+``-pflash file``
+Use file as a parallel flash image.
+ERST
+
   SRST
-When using these options, you can use a given Linux or Multiboot kernel
-without installing it in the disk image. It can be useful for easier
-testing of various kernels.
   +The kernel options were designed to work with Linux kernels
although
+other things (like hypervisors) can be packaged up as a kernel
+executable image. The exact format of a executable image is usually
+architecture specific.
   ERST
   @@ -3725,6 +3757,25 @@ SRST
   kernel on boot.
   ERST
   +SRST
+
+Finally you can also manually load images directly into the address
+space of the guest. This is most useful for developers who already
+know the layout of their guest and take care to ensure something sane
+will happen when the reset vector executes.
+
+The generic loader can be invoked by using the loader device:
+
+``-device 
loader,addr=,data=,data-len=[,data-be=][,cpu-num=]``
+
+there is also the guest loader which operates in a similar way but
+tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
+the guest image is:
+
+``-device 
guest-loader,addr=[,kernel=,[bootargs=]][,initrd=]``
+ERST
+
   DEFHEADING()
 DEFHEADING(Debug/Expert options:)
@@ -4175,13 +4226,6 @@ 

Re: [RFC PATCH] qemu-options: bring the kernel and image options together

2022-06-23 Thread Peter Maydell
On Wed, 22 Jun 2022 at 15:53, Alex Bennée  wrote:
>
> How to control the booting of QEMU is often a source of confusion for
> users. Bring the options that control this together in the manual
> pages and add some verbiage to describe when each option is
> appropriate.

https://stackoverflow.com/a/58434837/4499941 is my answer to
this common user question, though it's a bit more conversational
in tone than we want for the manual :-)

> Signed-off-by: Alex Bennée 
> Cc: Cédric Le Goater 
> ---
>  qemu-options.hx | 80 ++---
>  1 file changed, 62 insertions(+), 18 deletions(-)
>
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 377d22fbd8..9b0242f0ef 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -1585,13 +1585,6 @@ SRST
>  Use file as SecureDigital card image.
>  ERST
>
> -DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
> -"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
> -SRST
> -``-pflash file``
> -Use file as a parallel flash image.
> -ERST
> -
>  DEF("snapshot", 0, QEMU_OPTION_snapshot,
>  "-snapshot   write to temporary files instead of disk image files\n",
>  QEMU_ARCH_ALL)
> @@ -3680,12 +3673,51 @@ DEFHEADING()
>
>  #endif
>
> -DEFHEADING(Linux/Multiboot boot specific:)
> +DEFHEADING(Boot Image or Kernel specific:)
> +SRST
> +There are broadly 4 ways you can boot a system with QEMU.
> +
> + - specify a firmware and let it control finding a kernel
> + - specify a firmware and pass a hint to the kernel to boot
> + - direct kernel image boot
> + - manually load files into the guests address space

"guest's"

> +
> +The last method

Do you mean the third method? The last method isn't usually
used to load kernels, but rather bare-metal binaries.

 is useful for quickly testing kernels but as there is
> +no firmware to pass configuration information to the kernel it must
> +either be built for the exact configuration or be handed a DTB blob
> +which tells the kernel what drivers it needs.

This is all somewhat architecture specific: you don't necessarily
need to do either of those if the hardware is probeable.


You should also mention that all of this is board specific.

> +
> +ERST
> +
> +SRST
> +
> +For x86 machines ``-bios`` will generally do the right thing with
> +whatever it is given. For non-x86 machines the more strict ``-pflash``
> +option needs an image that is sized for the flash device for the given
> +machine type.

-bios works for some non-x86 machine types too.

Ideally we would:
 * have all our machine types have some documentation
 * have the documentation for each machine type say whether
   it supports -bios or not, and what it does

> +
> +ERST
> +
> +DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
> +"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
> +SRST
> +``-bios file``
> +Set the filename for the BIOS.
> +ERST
> +
> +DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
> +"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
> +SRST
> +``-pflash file``
> +Use file as a parallel flash image.
> +ERST
> +
>  SRST
> -When using these options, you can use a given Linux or Multiboot kernel
> -without installing it in the disk image. It can be useful for easier
> -testing of various kernels.
>
> +The kernel options were designed to work with Linux kernels although
> +other things (like hypervisors) can be packaged up as a kernel
> +executable image. The exact format of a executable image is usually
> +architecture specific.
>
>  ERST
>
> @@ -3725,6 +3757,25 @@ SRST
>  kernel on boot.
>  ERST
>
> +SRST
> +
> +Finally you can also manually load images directly into the address
> +space of the guest. This is most useful for developers who already
> +know the layout of their guest and take care to ensure something sane
> +will happen when the reset vector executes.

We should say that this is the favoured option for "I want to
run a bare-metal binary", and we should also say that this
option works the same way on any architecture and machine.

> +
> +The generic loader can be invoked by using the loader device:
> +
> +``-device 
> loader,addr=,data=,data-len=[,data-be=][,cpu-num=]``
> +
> +there is also the guest loader which operates in a similar way but
> +tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
> +the guest image is:
> +
> +``-device 
> guest-loader,addr=[,kernel=,[bootargs=]][,initrd=]``
> +
> +ERST
> +
>  DEFHEADING()

thanks
-- PMM



Re: [RFC PATCH] qemu-options: bring the kernel and image options together

2022-06-23 Thread Alex Bennée


Cédric Le Goater  writes:

> On 6/22/22 16:50, Alex Bennée wrote:
>> How to control the booting of QEMU is often a source of confusion for
>> users. Bring the options that control this together in the manual
>> pages and add some verbiage to describe when each option is
>> appropriate.
>> Signed-off-by: Alex Bennée 
>> Cc: Cédric Le Goater 
>> ---
>>   qemu-options.hx | 80 ++---
>>   1 file changed, 62 insertions(+), 18 deletions(-)
>> diff --git a/qemu-options.hx b/qemu-options.hx
>> index 377d22fbd8..9b0242f0ef 100644
>> --- a/qemu-options.hx
>> +++ b/qemu-options.hx
>> @@ -1585,13 +1585,6 @@ SRST
>>   Use file as SecureDigital card image.
>>   ERST
>>   -DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
>> -"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
>> -SRST
>> -``-pflash file``
>> -Use file as a parallel flash image.
>> -ERST
>> ->   DEF("snapshot", 0, QEMU_OPTION_snapshot,
>>   "-snapshot   write to temporary files instead of disk image 
>> files\n",
>>   QEMU_ARCH_ALL)
>> @@ -3680,12 +3673,51 @@ DEFHEADING()
>> #endif
>>   -DEFHEADING(Linux/Multiboot boot specific:)
>> +DEFHEADING(Boot Image or Kernel specific:)
>> +SRST
>> +There are broadly 4 ways you can boot a system with QEMU.
>> +
>> + - specify a firmware and let it control finding a kernel
>> + - specify a firmware and pass a hint to the kernel to boot
>> + - direct kernel image boot
>> + - manually load files into the guests address space
>> +
>> +The last method is useful for quickly testing kernels but as there is
>> +no firmware to pass configuration information to the kernel it must
>> +either be built for the exact configuration or be handed a DTB blob
>> +which tells the kernel what drivers it needs.
>
> The last method can also load any FW blob with the correct executable
> layout (reset vector).

Heh - actually I wrote that paragraph for the direct kernel image boot
and then added the manual option after the fact. I'll try and clean that
up to make it clearer.

>
>> +
>> +ERST
>> +
>> +SRST
>> +
>> +For x86 machines ``-bios`` will generally do the right thing with
>> +whatever it is given. For non-x86 machines the more strict ``-pflash``
>> +option needs an image that is sized for the flash device for the given
>> +machine type.
>
> Some ppc machine use -bios also, mac, pseries, PowerNV (let's not restrict
> to x86).

Ahh the magic some ;-) Does it essentially rely on if the correct
plumbing has been done for the machine? Anything I can look for to audit
other machine types?

>
>
> LGTM.
>
> Thanks,
>
> C.
>
>
>> +
>> +ERST
>> +
>> +DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
>> +"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
>> +SRST
>> +``-bios file``
>> +Set the filename for the BIOS.
>> +ERST
>> +
>> +DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
>> +"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
>> +SRST
>> +``-pflash file``
>> +Use file as a parallel flash image.
>> +ERST
>> +
>>   SRST
>> -When using these options, you can use a given Linux or Multiboot kernel
>> -without installing it in the disk image. It can be useful for easier
>> -testing of various kernels.
>>   +The kernel options were designed to work with Linux kernels
>> although
>> +other things (like hypervisors) can be packaged up as a kernel
>> +executable image. The exact format of a executable image is usually
>> +architecture specific.
>>   ERST
>>   @@ -3725,6 +3757,25 @@ SRST
>>   kernel on boot.
>>   ERST
>>   +SRST
>> +
>> +Finally you can also manually load images directly into the address
>> +space of the guest. This is most useful for developers who already
>> +know the layout of their guest and take care to ensure something sane
>> +will happen when the reset vector executes.
>> +
>> +The generic loader can be invoked by using the loader device:
>> +
>> +``-device 
>> loader,addr=,data=,data-len=[,data-be=][,cpu-num=]``
>> +
>> +there is also the guest loader which operates in a similar way but
>> +tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
>> +the guest image is:
>> +
>> +``-device 
>> guest-loader,addr=[,kernel=,[bootargs=]][,initrd=]``
>> +ERST
>> +
>>   DEFHEADING()
>> DEFHEADING(Debug/Expert options:)
>> @@ -4175,13 +4226,6 @@ SRST
>>   To list all the data directories, use ``-L help``.
>>   ERST
>>   -DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
>> -"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
>> -SRST
>> -``-bios file``
>> -Set the filename for the BIOS.
>> -ERST
>> -
>>   DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
>>   "-enable-kvm enable KVM full virtualization support\n",
>>   QEMU_ARCH_ARM | QEMU_ARCH_I386 | QEMU_ARCH_MIPS | QEMU_ARCH_PPC |


-- 
Alex Bennée



Re: [RFC PATCH] qemu-options: bring the kernel and image options together

2022-06-23 Thread Cédric Le Goater

On 6/22/22 16:50, Alex Bennée wrote:

How to control the booting of QEMU is often a source of confusion for
users. Bring the options that control this together in the manual
pages and add some verbiage to describe when each option is
appropriate.

Signed-off-by: Alex Bennée 
Cc: Cédric Le Goater 
---
  qemu-options.hx | 80 ++---
  1 file changed, 62 insertions(+), 18 deletions(-)

diff --git a/qemu-options.hx b/qemu-options.hx
index 377d22fbd8..9b0242f0ef 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1585,13 +1585,6 @@ SRST
  Use file as SecureDigital card image.
  ERST
  
-DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,

-"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
-SRST
-``-pflash file``
-Use file as a parallel flash image.
-ERST
->   DEF("snapshot", 0, QEMU_OPTION_snapshot,
  "-snapshot   write to temporary files instead of disk image files\n",
  QEMU_ARCH_ALL)
@@ -3680,12 +3673,51 @@ DEFHEADING()
  
  #endif
  
-DEFHEADING(Linux/Multiboot boot specific:)

+DEFHEADING(Boot Image or Kernel specific:)
+SRST
+There are broadly 4 ways you can boot a system with QEMU.
+
+ - specify a firmware and let it control finding a kernel
+ - specify a firmware and pass a hint to the kernel to boot
+ - direct kernel image boot
+ - manually load files into the guests address space
+
+The last method is useful for quickly testing kernels but as there is
+no firmware to pass configuration information to the kernel it must
+either be built for the exact configuration or be handed a DTB blob
+which tells the kernel what drivers it needs.


The last method can also load any FW blob with the correct executable
layout (reset vector).



+
+ERST
+
+SRST
+
+For x86 machines ``-bios`` will generally do the right thing with
+whatever it is given. For non-x86 machines the more strict ``-pflash``
+option needs an image that is sized for the flash device for the given
+machine type.


Some ppc machine use -bios also, mac, pseries, PowerNV (let's not restrict
to x86).


LGTM.

Thanks,

C.



+
+ERST
+
+DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
+"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
+SRST
+``-bios file``
+Set the filename for the BIOS.
+ERST
+
+DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
+"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
+SRST
+``-pflash file``
+Use file as a parallel flash image.
+ERST
+
  SRST
-When using these options, you can use a given Linux or Multiboot kernel
-without installing it in the disk image. It can be useful for easier
-testing of various kernels.
  
+The kernel options were designed to work with Linux kernels although

+other things (like hypervisors) can be packaged up as a kernel
+executable image. The exact format of a executable image is usually
+architecture specific.
  ERST
  
@@ -3725,6 +3757,25 @@ SRST

  kernel on boot.
  ERST
  
+SRST

+
+Finally you can also manually load images directly into the address
+space of the guest. This is most useful for developers who already
+know the layout of their guest and take care to ensure something sane
+will happen when the reset vector executes.
+
+The generic loader can be invoked by using the loader device:
+
+``-device 
loader,addr=,data=,data-len=[,data-be=][,cpu-num=]``
+
+there is also the guest loader which operates in a similar way but
+tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
+the guest image is:
+
+``-device 
guest-loader,addr=[,kernel=,[bootargs=]][,initrd=]``
+ERST
+
  DEFHEADING()
  
  DEFHEADING(Debug/Expert options:)

@@ -4175,13 +4226,6 @@ SRST
  To list all the data directories, use ``-L help``.
  ERST
  
-DEF("bios", HAS_ARG, QEMU_OPTION_bios, \

-"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
-SRST
-``-bios file``
-Set the filename for the BIOS.
-ERST
-
  DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
  "-enable-kvm enable KVM full virtualization support\n",
  QEMU_ARCH_ARM | QEMU_ARCH_I386 | QEMU_ARCH_MIPS | QEMU_ARCH_PPC |





[RFC PATCH] qemu-options: bring the kernel and image options together

2022-06-22 Thread Alex Bennée
How to control the booting of QEMU is often a source of confusion for
users. Bring the options that control this together in the manual
pages and add some verbiage to describe when each option is
appropriate.

Signed-off-by: Alex Bennée 
Cc: Cédric Le Goater 
---
 qemu-options.hx | 80 ++---
 1 file changed, 62 insertions(+), 18 deletions(-)

diff --git a/qemu-options.hx b/qemu-options.hx
index 377d22fbd8..9b0242f0ef 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -1585,13 +1585,6 @@ SRST
 Use file as SecureDigital card image.
 ERST
 
-DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
-"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
-SRST
-``-pflash file``
-Use file as a parallel flash image.
-ERST
-
 DEF("snapshot", 0, QEMU_OPTION_snapshot,
 "-snapshot   write to temporary files instead of disk image files\n",
 QEMU_ARCH_ALL)
@@ -3680,12 +3673,51 @@ DEFHEADING()
 
 #endif
 
-DEFHEADING(Linux/Multiboot boot specific:)
+DEFHEADING(Boot Image or Kernel specific:)
+SRST
+There are broadly 4 ways you can boot a system with QEMU.
+
+ - specify a firmware and let it control finding a kernel
+ - specify a firmware and pass a hint to the kernel to boot
+ - direct kernel image boot
+ - manually load files into the guests address space
+
+The last method is useful for quickly testing kernels but as there is
+no firmware to pass configuration information to the kernel it must
+either be built for the exact configuration or be handed a DTB blob
+which tells the kernel what drivers it needs.
+
+ERST
+
+SRST
+
+For x86 machines ``-bios`` will generally do the right thing with
+whatever it is given. For non-x86 machines the more strict ``-pflash``
+option needs an image that is sized for the flash device for the given
+machine type.
+
+ERST
+
+DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
+"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
+SRST
+``-bios file``
+Set the filename for the BIOS.
+ERST
+
+DEF("pflash", HAS_ARG, QEMU_OPTION_pflash,
+"-pflash fileuse 'file' as a parallel flash image\n", QEMU_ARCH_ALL)
+SRST
+``-pflash file``
+Use file as a parallel flash image.
+ERST
+
 SRST
-When using these options, you can use a given Linux or Multiboot kernel
-without installing it in the disk image. It can be useful for easier
-testing of various kernels.
 
+The kernel options were designed to work with Linux kernels although
+other things (like hypervisors) can be packaged up as a kernel
+executable image. The exact format of a executable image is usually
+architecture specific.
 
 ERST
 
@@ -3725,6 +3757,25 @@ SRST
 kernel on boot.
 ERST
 
+SRST
+
+Finally you can also manually load images directly into the address
+space of the guest. This is most useful for developers who already
+know the layout of their guest and take care to ensure something sane
+will happen when the reset vector executes.
+
+The generic loader can be invoked by using the loader device:
+
+``-device 
loader,addr=,data=,data-len=[,data-be=][,cpu-num=]``
+
+there is also the guest loader which operates in a similar way but
+tweaks the DTB so a hypervisor loaded via ``-kernel`` can find where
+the guest image is:
+
+``-device 
guest-loader,addr=[,kernel=,[bootargs=]][,initrd=]``
+
+ERST
+
 DEFHEADING()
 
 DEFHEADING(Debug/Expert options:)
@@ -4175,13 +4226,6 @@ SRST
 To list all the data directories, use ``-L help``.
 ERST
 
-DEF("bios", HAS_ARG, QEMU_OPTION_bios, \
-"-bios file  set the filename for the BIOS\n", QEMU_ARCH_ALL)
-SRST
-``-bios file``
-Set the filename for the BIOS.
-ERST
-
 DEF("enable-kvm", 0, QEMU_OPTION_enable_kvm, \
 "-enable-kvm enable KVM full virtualization support\n",
 QEMU_ARCH_ARM | QEMU_ARCH_I386 | QEMU_ARCH_MIPS | QEMU_ARCH_PPC |
-- 
2.30.2