Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | .. SPDX-License-Identifier: GPL-2.0+ .. index:: single: qfw (command) qfw command =========== Synopsis -------- :: qfw dump qfw list qfw cpus qfw load [kernel_addr [initrd_addr]] qfw table qfw arch qfw read <addr> <filename> qfw e820 Description ----------- The *qfw* command is used to retrieve information from the QEMU firmware. The *qfw list* sub-command displays the QEMU firmware files. The *qfw dump* sub-command displays the QEMU configuration entries. The *qfw cpus* sub-command displays the available CPUs. The *qfw load* command is used to load a kernel and an initial RAM disk. The *qfw table* command shows the instructions U-Boot uses to construct the ACPI tables. This is not as simple as a single blob of data, since some entries must be updated to take account of the address to which the tables are copied. The *qfw arch* command shows some items marked as 'arch local' in QEMU. The *qfw read* command allowing a QEMU file to be read into memory. The *qfw e820* command shows the memory-map information provided by QEMU. It uses the x86 e820 format. kernel_addr address to which the file specified by the -kernel parameter of QEMU shall be loaded. Defaults to environment variable *loadaddr* and further to the value of *CONFIG_SYS_LOAD_ADDR*. initrd_addr address to which the file specified by the -initrd parameter of QEMU shall be loaded. Defaults to environment variable *ramdiskaddr* and further to the value of *CFG_RAMDISK_ADDR*. addr address to which `filename` is read into memory filename filename of file to read into memory (as shown by *qfw list*) Examples -------- QEMU firmware files are listed via the *qfw list* command: :: => qfw list Addr Size Sel Name -------- -------- --- ------------ 0 0 20 bios-geometry 0 0 21 bootorder 1fc6c000 14 22 etc/acpi/rsdp 1fc6c040 20000 23 etc/acpi/tables 0 4 24 etc/boot-fail-wait 0 28 25 etc/e820 0 8 26 etc/msr_feature_control 0 18 27 etc/smbios/smbios-anchor 0 151 28 etc/smbios/smbios-tables 0 6 29 etc/system-states 0 1000 2a etc/table-loader 0 0 2b etc/tpm/log 0 2400 2c genroms/kvmvapic.bin Where an address is shown, it indicates where the data is available for inspection, e.g. using the :doc:`md`. This shows the *qfw dump* command on an x86 target: :: signature = QEMU id = 0x00000003 uuid = dc8275a0-59c6-11f0-b383-0f1ea10dd2f7 ram_size = 0x0000000020000000 nographic = 0x00000000 nb cpus = 0x00000004 machine id = 0x00000000 kernel addr = 0x00100000 kernel size = 0x00e9e988 kernel cmdl = 0x00000000 initrd addr = 0x1b446000 initrd size = 0x04b91d57 boot device = 0x00000000 numa = 0x00000000 boot menu = 0x00000000 max cpus = 0x00000004 kernel entry= 0x00000000 cmdline addr= 0x00020000 cmdline size= 0x0000000f cmdline data= root=/dev/sda1 setup addr = 0x00010000 setup size = 0x00005000 file dir le = 0x0000000d The available CPUs can be shown via the *qfw cpus* command: :: => qfw cpu 2 cpu(s) online The *-kernel* and *-initrd* parameters allow to specify a kernel and an initial RAM disk for QEMU: .. code-block:: bash $ qemu-system-x86_64 -machine pc-i440fx-2.5 -bios u-boot.rom -m 1G \ -nographic -kernel vmlinuz -initrd initrd Now the kernel and the initial RAM disk can be loaded to the U-Boot memory via the *qfw load* command and booted thereafter. :: => qfw load ${kernel_addr_r} ${ramdisk_addr_r} loading kernel to address 0000000001000000 size 5048f0 initrd 0000000004000000 size 3c94891 => zboot 1000000 5048f0 4000000 3c94891 Valid Boot Flag Magic signature found Linux kernel version 4.19.0-14-amd64 (debian-kernel@lists.debian.org) #1 SMP Debian 4.19.171-2 (2021-01-30) Building boot_params at 0x00090000 Loading bzImage at address 100000 (5260160 bytes) This shows the *qfw table* command on an x86 target: :: => qfw table 0 alloc: align 10 zone fseg name 'etc/acpi/rsdp' 1 alloc: align 40 zone high name 'etc/acpi/tables' 2 add-chksum offset 49 start 40 length 1ab4 name 'etc/acpi/tables' 3 add-ptr offset 1b18 size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 4 add-ptr offset 1b1c size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 5 add-chksum offset 1afd start 1af4 length 74 name 'etc/acpi/tables' 6 add-chksum offset 1b71 start 1b68 length 78 name 'etc/acpi/tables' 7 add-chksum offset 1be9 start 1be0 length 38 name 'etc/acpi/tables' 8 add-chksum offset 1c21 start 1c18 length 28 name 'etc/acpi/tables' 9 add-ptr offset 1c64 size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 10 add-ptr offset 1c68 size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 11 add-ptr offset 1c6c size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 12 add-ptr offset 1c70 size 4 dest 'etc/acpi/tables' src 'etc/acpi/tables' 13 add-chksum offset 1c49 start 1c40 length 34 name 'etc/acpi/tables' 14 add-ptr offset 10 size 4 dest 'etc/acpi/rsdp' src 'etc/acpi/tables' 15 add-chksum offset 8 start 0 length 14 name 'etc/acpi/rsdp' This shows the *qfw table* command on an x86 target: :: => qfw arch acpi tables = 0x00000000 smbios entrs= 0x00000000 irq0 overr = 0x00000001 hpet = 0x00000000 This shows reading a named qfw file into memory then dumping it, using the provided size information: :: => qfw list Addr Size Sel Name -------- -------- --- ------------ 0 0 20 bios-geometry 0 0 21 bootorder 1ec3f000 14 22 etc/acpi/rsdp 1ec3f040 20000 23 etc/acpi/tables 0 4 24 etc/boot-fail-wait 0 28 25 etc/e820 0 18 26 etc/smbios/smbios-anchor 0 151 27 etc/smbios/smbios-tables 0 6 28 etc/system-states 0 1000 29 etc/table-loader 0 0 2a etc/tpm/log 0 2400 2b genroms/kvmvapic.bin => qfw read 1000 etc/acpi/rsdp => md.b 1000 14 00001000: 52 53 44 20 50 54 52 20 00 42 4f 43 48 53 20 00 RSD PTR .BOCHS . 00001010: 40 1c 00 00 @... This shows dumping the E820 table, showing the emulated RAM as well as some reserved memory: :: => qfw e820 Addr Size Type fd00000000 300000000 Reserved 0 20000000 RAM => Configuration ------------- The qfw command is only available if CONFIG_CMD_QFW=y. |