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 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 | .. SPDX-License-Identifier: GPL-2.0+ .. index:: single: virtio (command) virtio command ============== Synopsis -------- :: virtio scan virtio info virtio list virtio device virtio part virtio read <addr> <blk#> <cnt> virtio write <addr> <blk#> <cnt> Description ----------- The *virtio* command is used to control a virtio block-device. It also provides some more general features. dev Device number fo select addr memory address blk# start block offset cnt block count virtio scan ~~~~~~~~~~~ This initiates a scan of the paravirtualized devices provided by QEMU. For each QEMU device which U-Boot supports, a new device is bound, allowing it to be used within U-Boot. You can use *dm tree* to see all the devices. virtio info ~~~~~~~~~~~ This lists the available block devices (only), including the name, type and capacity. virtio list ~~~~~~~~~~~ This shows a list of QEMU devices along with U-Boot each attached to each. Note that QEMU devices that U-Boot doesn't support will not be assigned a driver. virtio device ~~~~~~~~~~~~~ This selects a particular numbered device as the current one to be used for virtio operations. virtio part ~~~~~~~~~~~ This displays a list of the available partition on the selected device, or the current one if the device is omitted. virtio read ~~~~~~~~~~~ This reads raw data to memory address from a virtio block-device. Reading starts at block number <blk#> (numbered from 0) and extends for <cnt> blocks. The block size is typically 512 but you can change it in the QEMU configuration. For example, to set the block size to 4K: :: qemu-system-x86_64 -drive file=disk.img,if=none,id=drive0,format=raw \ -device virtio-blk-pci,drive=drive0,id=virtio_disk0,logical_block_size=4096 virtio write ~~~~~~~~~~~~ This writes raw data to the virtio device from the given memory address. Writing starts at block number <blk#> (numbered from 0) and extends for <cnt> blocks. Examples -------- For most of these examples, the following QEMU invocation was used with the qemu-x86_64 build:: qemu-system-x86_64 -bios u-boot.rom -nographic -drive if=virtio,file=root.img,format=raw,id=hd0 -drive if=virtio,file=README,format=raw,id=hd1 This example shows scanning for devices and then listing them. You can see the virtio device `virtio-pci.l#0` has a `virtio-blk#0` child. The 'No filesystem' warning indicates that device 1 does not have a valid filesystem. :: => virtio scan => virtio info Device 0: 1af4 VirtIO Block Device Type: Hard Disk Capacity: 15360.0 MB = 15.0 GB (31457280 x 512) No filesystem (err -19) Device 1: 1af4 VirtIO Block Device Type: Hard Disk Capacity: 0.0 MB = 0.0 GB (171 x 512) => dm tree Class Seq Probed Driver Name ----------------------------------------------------------- root 0 [ + ] root_driver root_driver qfw 0 [ + ] qfw_pio |-- qfw_pio bootdev 0 [ ] qfw_bootdev | `-- qfw_pio.bootdev serial 0 [ + ] ns16550_serial |-- serial keyboard 0 [ + ] i8042_kbd |-- keyboard sysreset 0 [ ] x86_reset |-- reset rtc 0 [ ] motorola_mc146818 |-- rtc timer 0 [ + ] x86_tsc_timer |-- tsc-timer sysinfo 0 [ ] sysinfo_smbios |-- smbios pci 0 [ + ] pci_x86 |-- pci pch 0 [ + ] intel-pch7 | |-- pch@1,0 pci_generi 0 [ ] pci_generic_drv | |-- pci_0:0.0 ide 0 [ ] ide | |-- ide pci_generi 1 [ ] pci_generic_drv | |-- pci_0:1.3 video 0 [ + ] bochs_video | |-- bochs_video vidconsole 0 [ + ] vidconsole_tt | | `-- bochs_video.vidconsole_tt ethernet 0 [ + ] eth_e1000 | |-- e1000#0 bootdev 1 [ ] eth_bootdev | | `-- e1000#0.bootdev virtio 0 [ + ] virtio-pci.l | |-- virtio-pci.l#0 blk 0 [ + ] virtio-blk | | |-- virtio-blk#0 partition 0 [ + ] blk_partition | | | |-- virtio-blk#0:1 partition 1 [ + ] blk_partition | | | `-- virtio-blk#0:2 bootdev 2 [ ] virtio_bootdev | | `-- virtio-blk#0.bootdev virtio 1 [ + ] virtio-pci.l | `-- virtio-pci.l#1 blk 1 [ ] virtio-blk | |-- virtio-blk#1 bootdev 3 [ ] virtio_bootdev | `-- virtio-blk#1.bootdev bootstd 0 [ + ] bootstd_drv |-- bootstd bootmeth 0 [ ] bootmeth_extlinux | |-- extlinux bootmeth 1 [ ] bootmeth_script | |-- script bootmeth 2 [ ] bootmeth_efi_mgr | |-- efi_mgr bootmeth 3 [ ] bootmeth_efi | |-- efi bootmeth 4 [ ] bootmeth_cros | |-- cros bootmeth 5 [ ] bootmeth_qfw | |-- qfw bootmeth 6 [ ] bootmeth_pxe | |-- pxe bootmeth 7 [ ] vbe_simple | `-- vbe_simple efi 0 [ ] EFI block driver |-- efi simple_bus 0 [ ] cpu_bus `-- cpus cpu 0 [ ] cpu_qemu `-- cpu@0 => This shows listing QEMU devices before and after scanning. Note that devices which show '(none)' in the Driver column are not supported by U-Boot. :: => virtio list Name Type Driver -------------------- -------------- --------------- virtio-pci.m#0 0: (unknown) (none) virtio-pci.m#1 0: (unknown) (none) virtio-pci.m#2 0: (unknown) (none) virtio-pci.m#3 0: (unknown) (none) virtio-pci.m#4 0: (unknown) (none) virtio-pci.m#5 0: (unknown) (none) virtio-pci.m#6 0: (unknown) (none) virtio-pci.m#7 0: (unknown) (none) virtio-pci.m#8 0: (unknown) (none) virtio-pci.m#9 0: (unknown) (none) virtio-pci.m#10 0: (unknown) (none) => virtio scan => virtio list Name Type Driver -------------------- -------------- --------------- virtio-pci.m#0 5: balloon (none) virtio-pci.m#1 4: rng (none) virtio-pci.m#2 12: input-host (none) virtio-pci.m#3 12: input-host (none) virtio-pci.m#4 13: vsock (none) virtio-pci.m#5 3: serial (none) virtio-pci.m#6 8: scsi virtio-scsi#6 virtio-pci.m#7 9: 9p (none) virtio-pci.m#8 1a: fs virtio-fs#8 virtio-pci.m#9 10: gpu (none) virtio-pci.m#10 1: net virtio-net#a => This shows reading and displaying the partition table for device 0:: => virtio part 0 Partition Map for virtio device 0 -- Partition Type: EFI Part Start LBA End LBA Name Attributes Type GUID Partition GUID 1 0x00000800 0x00165fff "" attrs: 0x0000000000000000 type: c12a7328-f81f-11d2-ba4b-00a0c93ec93b (EFI System Partition) guid: eccaac1c-b634-441b-a788-ab0f959111af 2 0x00166000 0x01dff7ff "" attrs: 0x0000000000000000 type: 0fc63daf-8483-4772-8e79-3d69d8477de4 (linux) guid: e71469a9-dba2-4f46-b959-75e732466bf8 => This shows reading some data from device 1 (which is the README file):: => virtio dev 1 Device 1: No filesystem (err -19) 1af4 VirtIO Block Device Type: Hard Disk Capacity: 0.0 MB = 0.0 GB (171 x 512) ... is now current device => virtio read 1000 0 1 virtio read: device 1 block # 0, count 1 ... 1 blocks read: OK => md 1000 20 00001000: 50532023 4c2d5844 6e656369 492d6573 # SPDX-License-I 00001010: 746e6564 65696669 47203a72 322d4c50 dentifier: GPL-2 00001020: 0a2b302e 20230a23 20294328 79706f43 .0+.#.# (C) Copy 00001030: 68676972 30322074 2d203030 31303220 right 2000 - 201 00001040: 20230a33 666c6f57 676e6167 6e654420 3.# Wolfgang Den 00001050: 44202c6b 20584e45 74666f53 65726177 k, DENX Software 00001060: 676e4520 65656e69 676e6972 6477202c Engineering, wd 00001070: 6e656440 65642e78 530a0a2e 616d6d75 @denx.de...Summa => This shows modifying some data and writing it back. If you try this it will modify the first character of the README file in your U-Boot tree:: => virtio dev 1 Device 1: No filesystem (err -19) 1af4 VirtIO Block Device Type: Hard Disk Capacity: 0.0 MB = 0.0 GB (171 x 512) ... is now current device => mw.b 1000 61 => md 1000 10 00001000: 50532061 4c2d5844 6e656369 492d6573 a SPDX-License-I 00001010: 746e6564 65696669 47203a72 322d4c50 dentifier: GPL-2 00001020: 0a2b302e 20230a23 20294328 79706f43 .0+.#.# (C) Copy 00001030: 68676972 30322074 2d203030 31303220 right 2000 - 201 => virtio write 1000 0 1 virtio write: device 1 block # 0, count 1 ... 1 blocks written: OK => Configuration ------------- The `virtio` command is only available if `CONFIG_CMD_VIRTIO=y`. |