xref: /qemu/docs/system/guest-loader.rst (revision 6df743dc31a6a0b618042da2b550993c6e9767d1)
101460378SAlex Bennée..
201460378SAlex Bennée   Copyright (c) 2020, Linaro
301460378SAlex Bennée
401460378SAlex BennéeGuest Loader
501460378SAlex Bennée------------
601460378SAlex Bennée
7*6df743dcSPeter MaydellThe guest loader is similar to the ``generic-loader`` although it is
801460378SAlex Bennéeaimed at a particular use case of loading hypervisor guests. This is
901460378SAlex Bennéeuseful for debugging hypervisors without having to jump through the
1001460378SAlex Bennéehoops of firmware and boot-loaders.
1101460378SAlex Bennée
1201460378SAlex BennéeThe guest loader does two things:
1301460378SAlex Bennée
1401460378SAlex Bennée  - load blobs (kernels and initial ram disks) into memory
1501460378SAlex Bennée  - sets platform FDT data so hypervisors can find and boot them
1601460378SAlex Bennée
1701460378SAlex BennéeThis is what is typically done by a boot-loader like grub using it's
1801460378SAlex Bennéemulti-boot capability. A typical example would look like:
1901460378SAlex Bennée
2001460378SAlex Bennée.. parsed-literal::
2101460378SAlex Bennée
2201460378SAlex Bennée  |qemu_system| -kernel ~/xen.git/xen/xen \
2301460378SAlex Bennée    -append "dom0_mem=1G,max:1G loglvl=all guest_loglvl=all" \
2401460378SAlex Bennée    -device guest-loader,addr=0x42000000,kernel=Image,bootargs="root=/dev/sda2 ro console=hvc0 earlyprintk=xen" \
2501460378SAlex Bennée    -device guest-loader,addr=0x47000000,initrd=rootfs.cpio
2601460378SAlex Bennée
2701460378SAlex BennéeIn the above example the Xen hypervisor is loaded by the -kernel
2801460378SAlex Bennéeparameter and passed it's boot arguments via -append. The Dom0 guest
2901460378SAlex Bennéeis loaded into the areas of memory. Each blob will get
30*6df743dcSPeter Maydell``/chosen/module@<addr>`` entry in the FDT to indicate it's location and
3101460378SAlex Bennéesize. Additional information can be passed with by using additional
3201460378SAlex Bennéearguments.
3301460378SAlex Bennée
3401460378SAlex BennéeCurrently the only supported machines which use FDT data to boot are
35*6df743dcSPeter Maydellthe ARM and RiscV ``virt`` machines.
3601460378SAlex Bennée
3701460378SAlex BennéeArguments
3801460378SAlex Bennée^^^^^^^^^
3901460378SAlex Bennée
4001460378SAlex BennéeThe full syntax of the guest-loader is::
4101460378SAlex Bennée
4201460378SAlex Bennée  -device guest-loader,addr=<addr>[,kernel=<file>,[bootargs=<args>]][,initrd=<file>]
4301460378SAlex Bennée
4401460378SAlex Bennée``addr=<addr>``
4501460378SAlex Bennée  This is mandatory and indicates the start address of the blob.
4601460378SAlex Bennée
4701460378SAlex Bennée``kernel|initrd=<file>``
4801460378SAlex Bennée  Indicates the filename of the kernel or initrd blob. Both blobs will
4901460378SAlex Bennée  have the "multiboot,module" compatibility string as well as
5001460378SAlex Bennée  "multiboot,kernel" or "multiboot,ramdisk" as appropriate.
5101460378SAlex Bennée
5201460378SAlex Bennée``bootargs=<args>``
5301460378SAlex Bennée  This is an optional field for kernel blobs which will pass command
5401460378SAlex Bennée  like via the `/chosen/module@<addr>/bootargs` node.
55