mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-28 21:03:54 -06:00

Added loongarch UEFI BIOS support to compiled scripts. UEFI code images require 16M alignment, flash images require 16M alignment, under the loongarch architecture.This is agreed upon when the firmware is loaded in QEMU under Loongarch. The naming of UEFI under loongarch refers to the x86 and arm naming methods, and the UEFI image names in x86 and arm are: edk2-i386-code.fd edk2-i386-vars.fd edk2-arm-code.fd edk2-arm-vars.fd So on loongarch, we named it: edk2-loongarch64-code.fd edk2-loongarch64-vars.fd Signed-off-by: Xianglai Li <lixianglai@loongson.cn> Message-ID: <20240724022245.1317884-1-lixianglai@loongson.cn> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
108 lines
3.1 KiB
ReStructuredText
108 lines
3.1 KiB
ReStructuredText
: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
|