(self)
| 286 | self._qemu_path = Path(qemu_path) |
| 287 | |
| 288 | def run(self) -> None: |
| 289 | # Make sure QEMU binary is configured and available |
| 290 | self._set_qemu_path() |
| 291 | |
| 292 | # Locate kernel (may be done earlier in subclasses) |
| 293 | self._set_kernel_vars() |
| 294 | |
| 295 | # EFI: |
| 296 | if self.efi: |
| 297 | self._qemu_args += [ |
| 298 | '-drive', f"if=pflash,format=raw,file={self._efi_img},readonly=on", |
| 299 | '-drive', f"if=pflash,format=raw,file={self._efi_vars}", |
| 300 | '-object', 'rng-random,filename=/dev/urandom,id=rng0', |
| 301 | '-device', 'virtio-rng-pci', |
| 302 | ] # fmt: off |
| 303 | |
| 304 | # Kernel options |
| 305 | if self.interactive or self.gdb: |
| 306 | self.cmdline.append('rdinit=/bin/sh') |
| 307 | if self.gdb: |
| 308 | self.cmdline.append('nokaslr') |
| 309 | if self.cmdline: |
| 310 | self._qemu_args += ['-append', ' '.join(self.cmdline)] |
| 311 | if self._dtbs: |
| 312 | self._qemu_args += ['-dtb', self._find_dtb()] |
| 313 | self._qemu_args += ['-kernel', self.kernel] |
| 314 | self._qemu_args += ['-initrd', self._prepare_initrd()] |
| 315 | |
| 316 | # KVM |
| 317 | if self.use_kvm: |
| 318 | if not self.smp: |
| 319 | self.smp = self._get_default_smp_value() |
| 320 | self._qemu_args += ['-cpu', ','.join(self._kvm_cpu), '-enable-kvm'] |
| 321 | |
| 322 | # Machine specs |
| 323 | self._qemu_args += ['-m', self.memory] |
| 324 | if self.smp: |
| 325 | self._qemu_args += ['-smp', str(self.smp)] |
| 326 | |
| 327 | # Show information about QEMU |
| 328 | utils.green(f"QEMU location: \033[0m{self._qemu_path.parent}") |
| 329 | utils.green(f"QEMU version: \033[0m{self._get_qemu_ver_string()}") |
| 330 | |
| 331 | if self.gdb: |
| 332 | self._qemu_args += ['-s', '-S'] |
| 333 | |
| 334 | self._run_gdb() |
| 335 | else: |
| 336 | self._qemu_args += ['-serial', 'mon:stdio'] |
| 337 | |
| 338 | self._run_fg() |
| 339 | |
| 340 | |
| 341 | class ARMEFIQEMURunner(QEMURunner): |
no test coverage detected