| :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 --disable-rdma --prefix=/usr \ |
| --target-list="loongarch64-softmmu" \ |
| --disable-libiscsi --disable-libnfs --disable-libpmem \ |
| --disable-glusterfs --enable-libusb --enable-usb-redir \ |
| --disable-opengl --disable-xen --enable-spice \ |
| --enable-debug --disable-capstone --disable-kvm \ |
| --enable-profiler |
| 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 |