|
21 | 21 | 'arm32_v7',
|
22 | 22 | 'arm64',
|
23 | 23 | 'arm64be',
|
| 24 | + 'loongarch', |
24 | 25 | 'm68k',
|
25 | 26 | 'mips',
|
26 | 27 | 'mipsel',
|
@@ -476,6 +477,35 @@ def __init__(self):
|
476 | 477 | self._initrd_arch = 'arm64be'
|
477 | 478 |
|
478 | 479 |
|
| 480 | +class LoongArchQEMURunner(QEMURunner): |
| 481 | + |
| 482 | + def __init__(self): |
| 483 | + super().__init__() |
| 484 | + |
| 485 | + self.cmdline.append('console=ttyS0,115200') |
| 486 | + self._default_kernel_path = Path('arch/loongarch/boot/vmlinuz.efi') |
| 487 | + self._initrd_arch = 'loongarch' |
| 488 | + |
| 489 | + bios = Path(utils.BOOT_UTILS, 'images', self._initrd_arch, |
| 490 | + 'edk2-loongarch64-code.fd') |
| 491 | + if not bios.exists(): |
| 492 | + firmware_url = f"https://github.com/loongson/Firmware/raw/main/LoongArchVirtMachine/{bios.name}" |
| 493 | + utils.green( |
| 494 | + f"Downloading LoongArch firmware from {firmware_url}...") |
| 495 | + curl_cmd = ['curl', '-LSs', '-o', bios, firmware_url] |
| 496 | + subprocess.run(curl_cmd, check=True) |
| 497 | + |
| 498 | + self._qemu_arch = 'loongarch64' |
| 499 | + self._qemu_args += [ |
| 500 | + '-M', 'virt', |
| 501 | + '-cpu', 'la464', |
| 502 | + '-bios', bios, |
| 503 | + '-no-reboot', |
| 504 | + ] # yapf: disable |
| 505 | + self._ram = '2G' |
| 506 | + self.smp = 2 |
| 507 | + |
| 508 | + |
479 | 509 | class M68KQEMURunner(QEMURunner):
|
480 | 510 |
|
481 | 511 | def __init__(self):
|
@@ -699,6 +729,7 @@ def guess_arch(kernel_arg):
|
699 | 729 | 'ELF 64-bit MSB executable, ARM aarch64': 'arm64be',
|
700 | 730 | 'ELF 64-bit LSB pie executable, ARM aarch64': 'arm64',
|
701 | 731 | 'ELF 64-bit MSB pie executable, ARM aarch64': 'arm64be',
|
| 732 | + 'ELF 64-bit LSB executable, LoongArch': 'loongarch', |
702 | 733 | 'ELF 32-bit MSB executable, Motorola m68k, 68020': 'm68k',
|
703 | 734 | 'ELF 32-bit MSB executable, MIPS, MIPS32': 'mips',
|
704 | 735 | 'ELF 32-bit LSB executable, MIPS, MIPS32': 'mipsel',
|
@@ -802,6 +833,7 @@ def parse_arguments():
|
802 | 833 | 'arm32_v7': ARMV7QEMURunner,
|
803 | 834 | 'arm64': ARM64QEMURunner,
|
804 | 835 | 'arm64be': ARM64BEQEMURunner,
|
| 836 | + 'loongarch': LoongArchQEMURunner, |
805 | 837 | 'm68k': M68KQEMURunner,
|
806 | 838 | 'mips': MIPSQEMURunner,
|
807 | 839 | 'mipsel': MIPSELQEMURunner,
|
|
0 commit comments