部分环境准备: #
qemu: https://gitlab.com/qemu-project/qemu.git
固件: https://github.com/loongson/Firmware/raw/main/LoongArchVirtMachine/edk2-loongarch64-code.fd
系统: http://pkg.loongnix.cn/loongnix/isos/Loongnix-20.5/
qemu安装 #
# Arch系
pacman -S qemu-system-loongarch64
# Debian系
apt install qemu-system-loongarch64
# Fedora系
yum install qemu-system-loongarch64
自己编译安装:
git clone https://gitlab.com/qemu-project/qemu.git
cd qemu
mkdir build4la
cd build4la
../configure --target-list=loongarch64-softmmu --enable-kvm --disable-werror --enable-vnc --enable-debug --enable-gdb
make -j 8
qemu使用 #
qemu启动固件: #
./qemu-system-loongarch64 -m 4G -smp 1 --cpu la464 --machine virt -bios edk2-loongarch64-code.fd -display none --serial stdio
参数说明:
./qemu-system-loongarch64
: 这是QEMU模拟器的可执行文件,用于模拟LoongArch64架构的系统。
-m 4G
: 指定为虚拟机分配4GB内存(4096MB)。
-smp 1
: 设置虚拟机的CPU核心数为1个。
--cpu la464
: 指定要使用的虚拟CPU类型为la464,这是Loongson公司基于LoongArch架构的CPU型号或特性标识。
--machine virt
: 指定虚拟机的机器类型为“virt”,这是一个通用的、基于QEMU内部模型的虚拟机平台。
-bios edk2-loongarch64-code.fd
: 使用名为edk2-loongarch64-code.fd的固件镜像作为UEFI BIOS。这通常是一个包含UEFI固件实现的文件,用于在虚拟机启动时加载和执行。
-display none
: 关闭图形显示输出,意味着虚拟机不会打开一个窗口来显示图形界面。
--serial stdio
: 将虚拟机的串行端口连接到主机的标准输入/输出。这样,虚拟机的控制台输出将通过主机的终端进行显示,可以与虚拟机进行交互。
综上所述,该命令是在QEMU中启动一个具有1个CPU核心、4GB内存的LoongArch64架构虚拟机,并使用特定的UEFI固件镜像引导,同时将虚拟机的控制台输出重定向到主机终端。
qemu通过固件启动系统 #
./qemu-system-loongarch64 -m 4G -smp 1 --cpu la464 --machine virt -bios ../../qemu-kernel-debug/edk2-loongarch64-code.fd -display none --serial stdio -device virtio-gpu-pci -device nec-usb-xhci,id=xhci,addr=0x1b -device usb-tablet,id=tablet,bus=xhci.0,port=1 -device usb-kbd,id=keyboard,bus=xhci.0,port=2 -net nic,model=virtio -net user,hostfwd=tcp::10021-:22 -hda ../../qemu-kernel-debug/Loongnix-20.5.mate.mini.loongarch64.cn.qcow2 --accel kvm
基于上节, 其余的参数说明:
-device virtio-gpu-pci
: 添加一个virtio GPU设备(PCI总线上的图形卡)以支持图形加速。
-device nec-usb-xhci,id=xhci,addr=0x1b
: 添加USB 3.0控制器(nec-usb-xhci),并赋予ID为xhci,地址为0x1b。
-device usb-tablet,id=tablet,bus=xhci.0,port=1
: 添加一个USB触摸板设备,并将其连接到之前定义的USB控制器上,端口号为1。
-device usb-kbd,id=keyboard,bus=xhci.0,port=2
: 添加一个USB键盘设备,并同样连接到前述USB控制器上,端口号为2。
-net nic,model=virtio
: 添加一个virtio类型的网络接口卡(NIC)。
-net user,hostfwd=tcp::10021-:22
: 启用用户模式网络堆栈,同时设置端口转发规则,将主机的10021端口转发到虚拟机的22端口(通常这是SSH服务端口)。
-hda Loongnix-20.5.mate.mini.loongarch64.cn.qcow2
: 指定虚拟机硬盘映像路径,这里是一个名为“Loongnix-20.5.mate.mini.loongarch64.cn”的qcow2格式磁盘镜像。
--accel kvm
: 如果宿主机支持KVM硬件虚拟化技术,则启用加速功能以提高虚拟机性能。
总结:这个命令是启动了一个带有特定硬件设备配置的LoongArch64虚拟机,包括内存、CPU、显卡、USB控制器、USB外设、网络适配器以及硬盘驱动,并使用KVM加速功能,还设置了端口转发规则以便从主机访问虚拟机中的服务。
qemu文件系统挂载与卸载 #
modprobe nbd max_part=16
qemu-nbd -c /dev/nbd0 ./Loongnix-20.5.mate.mini.loongarch64.cn.qcow2
fdisk -l /dev/nbd0
mount /dev/nbd0p2 /mnt/
umount /mnt
在mount之后可以进行文件操作.