| :orphan: | 
 |  | 
 | ========================================== | 
 | loongson3 virt generic platform (``virt``) | 
 | ========================================== | 
 |  | 
 | The ``virt`` machine use gpex host bridge, and there are some | 
 | emulated devices on virt board, such as loongson7a RTC device, | 
 | IOAPIC device, ACPI device and so on. | 
 |  | 
 | Supported devices | 
 | ----------------- | 
 |  | 
 | The ``virt`` machine supports: | 
 |  | 
 | * Gpex host bridge | 
 | * Ls7a RTC device | 
 | * Ls7a IOAPIC device | 
 | * ACPI GED device | 
 | * Fw_cfg device | 
 | * PCI/PCIe devices | 
 | * Memory device | 
 | * CPU device. Type: la464. | 
 |  | 
 | CPU and machine Type | 
 | -------------------- | 
 |  | 
 | The ``qemu-system-loongarch64`` provides emulation for virt | 
 | machine. You can specify the machine type ``virt`` and | 
 | cpu type ``la464``. | 
 |  | 
 | Boot options | 
 | ------------ | 
 |  | 
 | We can boot the LoongArch virt machine by specifying the uefi bios, | 
 | initrd, and linux kernel. And those source codes and binary files | 
 | can be accessed by following steps. | 
 |  | 
 | (1) Build qemu-system-loongarch64: | 
 |  | 
 | .. code-block:: bash | 
 |  | 
 |   ./configure --target-list="loongarch64-softmmu" | 
 |   make -j8 | 
 |  | 
 | (2) Set cross tools: | 
 |  | 
 | .. code-block:: bash | 
 |  | 
 |   wget https://github.com/loongson/build-tools/releases/download/2022.09.06/loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz | 
 |   tar -vxf loongarch64-clfs-6.3-cross-tools-gcc-glibc.tar.xz  -C /opt | 
 |   export PATH=/opt/cross-tools/bin:$PATH | 
 |   export LD_LIBRARY_PATH=/opt/cross-tools/lib:$LD_LIBRARY_PATH | 
 |   export LD_LIBRARY_PATH=/opt/cross-tools/loongarch64-unknown-linux-gnu/lib/:$LD_LIBRARY_PATH | 
 |  | 
 | Note: You need get the latest cross-tools at https://github.com/loongson/build-tools | 
 |  | 
 | (3) Build BIOS: | 
 |  | 
 |     See: https://github.com/tianocore/edk2/tree/master/OvmfPkg/LoongArchVirt#readme | 
 |  | 
 | Note: To build the release version of the bios,  set --buildtarget=RELEASE, | 
 |       the bios file path:  Build/LoongArchQemu/RELEASE_GCC5/FV/QEMU_EFI.fd | 
 |  | 
 | (4) Build kernel: | 
 |  | 
 | .. code-block:: bash | 
 |  | 
 |   git clone https://github.com/loongson/linux.git | 
 |   cd linux | 
 |   git checkout loongarch-next | 
 |   make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- loongson3_defconfig | 
 |   make ARCH=loongarch CROSS_COMPILE=loongarch64-unknown-linux-gnu- -j32 | 
 |  | 
 | Note: The branch of linux source code is loongarch-next. | 
 |       the kernel file: arch/loongarch/boot/vmlinuz.efi | 
 |  | 
 | (5) Get initrd: | 
 |  | 
 |   You can use busybox tool and the linux modules to make a initrd file. Or you can access the | 
 |   binary files: https://github.com/yangxiaojuan-loongson/qemu-binary | 
 |  | 
 | .. code-block:: bash | 
 |  | 
 |   git clone https://github.com/yangxiaojuan-loongson/qemu-binary | 
 |  | 
 | Note: the initrd file is ramdisk | 
 |  | 
 | (6) Booting LoongArch: | 
 |  | 
 | .. code-block:: bash | 
 |  | 
 |   $ ./build/qemu-system-loongarch64 -machine virt -m 4G -cpu la464 \ | 
 |       -smp 1 -bios QEMU_EFI.fd -kernel vmlinuz.efi -initrd ramdisk \ | 
 |       -serial stdio   -monitor telnet:localhost:4495,server,nowait \ | 
 |       -append "root=/dev/ram rdinit=/sbin/init console=ttyS0,115200" \ | 
 |       --nographic |