
Win11下用QEMU玩转龙芯3A5000从零配置ArchLinux虚拟环境附资源包这几年国产CPU平台越来越受开发者关注尤其是龙芯3A5000这套采用LoongArch64指令集的硬件在信创圈、嵌入式领域的存在感一直不低。但问题是多数人手里只有一台x86的Windows机器想上手3A5000还得再掏钱买实体开发板或整机试错成本实在有点高。其实完全不用这么麻烦QEMU这个老牌模拟器从7.2版本开始就提供了对LoongArch64虚拟机的支持在Win11下面装一个Windows版QEMU配合ArchLinux的龙芯移植版镜像就能在本地跑起一个真正的3A5000虚拟环境。这篇博文我会把从零配置的完整流程、踩过的坑、启动参数的细节全部倒出来适合想体验国产架构、做LoongArch交叉编译验证或者纯粹想折腾的开发者参考。1. 方案选型与整体思路拆解1.1 为什么选QEMU而不是其他方案如果你在Windows上想碰龙芯平台有两条路一是用云端的龙芯服务器或购买实体设备成本高、门槛大二就是用模拟器。模拟器里名气最大的就是QEMU它跟VirtualBox、VMware这类“同架构虚拟机”有本质区别——QEMU既能做同架构的硬件辅助虚拟化也能做跨架构的纯软件模拟也就是把x86的机器指令翻译成目标架构的指令来执行。正因为这个能力QEMU才能在一台普通的Win11电脑上模拟出完全不同的龙芯3A5000环境。Docker之类的容器方案在这个场景下也帮不上忙。容器共享宿主机内核x86的Windows上跑Linux容器已经要套一层虚拟机了更别说容器镜像里的程序还是x86二进制根本没法直接变成LoongArch指令集。所以真正能落地的方案就是QEMU全系统模拟。1.2 为什么选择ArchLinux龙芯移植版龙芯3A5000的软件生态这几年进步很大能装的系统不少Loongnix、统信UOS、银河麒麟都有龙芯版但如果你是开发者或者想折腾的人我首推ArchLinux LoongArch移植版。原因有几个第一Arch的滚动更新机制能保证你拿到的是最新的软件包包括GCC工具链和内核第二pacman的包管理体验在Linux发行版里属于第一梯队装软件、查依赖都干净利落第三Arch的Wiki和社区资料太丰富了遇到问题搜一下几乎都有现成答案。还有一个务实的原因ArchLinux的移植版提供了QEMU专用的内核vmlinux和initramfs镜像组合起来启动非常方便。不像某些发行版只给整盘镜像在模拟器里要先倒腾格式麻烦。1.3 整体流程概览整个配置流程可以拆成四步先在Win11上装好QEMU本体再准备龙芯平台需要的UEFI固件、内核、根文件系统镜像创建虚拟磁盘然后通过QEMU启动到安装环境用pacstrap把ArchLinux装进虚拟盘最后做网络配置、系统配置和必要的性能优化。每步之间都有承接关系别跳步尤其是固件和内核的版本要配对不然启动阶段就会卡住。2. 环境准备QEMU安装与关键组件获取2.1 Win11下安装QEMU的两种方式Windows下装QEMU我用过两种方式都靠谱。第一种是直接去qemu.org下载官方Windows安装包目前官网提供的是基于MSYS2构建的64位版本安装完成后把安装目录下的qemu-system-loongarch64.exe路径加进系统PATH方便在任意终端调用。第二种是用MSYS2自己装pacman -S mingw-w64-ucrt-x86_64-qemu好处是后续更新方便缺点是要先装MSYS2环境对新手多一层学习成本。提示安装完成后在PowerShell里执行qemu-system-loongarch64 --version如果能输出版本号就说明环境OK。建议使用QEMU 8.0以上版本7.2虽然也能跑但后续安装脚本和内核的兼容性没有高版本好。我自己用的版本是QEMU 8.2.x实测在Win11 23H2和24H2下都能稳定运行。安装目录建议放在D:\qemu这种纯英文路径避免中文路径引发奇怪的权限或解析问题。2.2 关键组件UEFI固件、内核与initramfsQEMU模拟龙芯3A5000时不像是模拟x86那样自带BIOS它需要一个LoongArch版的UEFI固件通常是QEMU_EFI.fd这个文件。这个固件相当于虚拟机的主板BIOS负责把内核加载起来。你可以在edk2的LoongArch构建产物里找到它ArchLinux龙芯移植版的镜像仓库里一般也会附带下载后放到一个专门的目录里比如D:\loongarch\firmware。内核和initramfs则来自ArchLinux LoongArch移植版。通常是一个vmlinux或叫vmlinuz文件配合一个initramfs-xxx.img这两个文件在移植版的仓库boot目录下可以下载。要注意内核版本和initramfs的版本必须一致不然启动时可能报VFS: Cannot open root device之类的错误。2.3 创建虚拟磁盘镜像龙芯3A5000虚拟机需要一块虚拟硬盘来装系统QEMU最常用的格式是qcow2。这种格式的特点是“按需分配空间”也就是说你创建一块20GB的虚拟盘宿主机并不会立刻占用20GB而是随着虚拟机里的数据增长慢慢膨胀非常省磁盘。创建命令如下qemu-img create -f qcow2 D:\loongarch\disk\archlinux.qcow2 32G我一般给32GB兼顾系统和编译缓存。如果你打算在虚拟机里编译大软件包建议直接给到50GB反正qcow2格式前期不占空间不用心疼。3. QEMU启动参数逐段解析3.1 一条能跑起来的启动命令准备好固件、内核、initramfs和虚拟磁盘之后就可以尝试启动安装环境了。我在Win11的PowerShell里实际跑通的命令是这样qemu-system-loongarch64 -machine virt -cpu loongarch64 -smp 4 -m 8G -bios D:\loongarch\firmware\QEMU_EFI.fd -kernel D:\loongarch\boot\vmlinux -initrd D:\loongarch\boot\initramfs-linux.img -append root/dev/ram0 rdinit/sbin/init consolettyS0 -drive fileD:\loongarch\disk\archlinux.qcow2,formatqcow2,ifvirtio -device virtio-net-pci,netdevnet0 -netdev user,idnet0 -accel tcg,threadmulti -nographic这条命令信息量很大我挑重点拆解一下。-machine virt指定虚拟机型号在QEMU里龙芯3A5000对应的就是virt平台这是QEMU为LoongArch提供的基础设备模型。-cpu loongarch64告诉QEMU模拟LoongArch64指令集。-smp 4给虚拟机分配4个虚拟CPU核心-m 8G分配8GB内存。实测Win11宿主机16GB内存的情况下给虚拟机8GB比较均衡跑桌面环境不会太卡宿主机也不会被拖死。-bios QEMU_EFI.fd是启动的第一步固件会初始化设备然后按UEFI规范寻找可启动介质。但因为我们是直接指定了内核和initramfs所以实际上固件加载完硬件后QEMU会直接把vmlinux和initramfs加载进内存这是模拟器常见的“直载内核”模式。-append后面的参数是传给内核的启动参数root/dev/ram0 rdinit/sbin/init的意思是根文件系统从内存盘initramfs加载consolettyS0把控制台输出到串口配合-nographic在终端里直接看输出。3.2 为什么这里不能用KVM加速x86的Windows宿主机上跑QEMU默认的加速器是TCGTiny Code Generator也就是纯软件模拟它把LoongArch64的指令翻译成x86指令执行。很多人会问为什么不能用KVM因为KVM需要CPU支持同架构的虚拟化扩展你的宿主机CPU是x86模拟的目标却是LoongArch64两者指令集不同根本没法走硬件虚拟化路径只能靠TCG慢慢翻译。-accel tcg,threadmulti这个参数值得专门说一下。TCG模式默认是单线程翻译执行对多核虚拟机的支持很差。加上threadmulti之后QEMU会用多个宿主机线程来分担翻译和执行任务4核虚拟机的性能会有肉眼可见的提升。不过也别指望它能跟真机比TCG模式跑龙芯系统大概只有真机性能的十分之一到五分之一做软件测试、编译验证没问题跑大型图形程序就别想了。注意-nographic参数决定了QEMU把控制台绑定到当前终端窗口。这个模式对纯命令行安装非常友好复制粘贴命令都方便。但如果后面你想用VNC或者图形窗口看桌面环境不能加这个参数。3.3 系统安装完成后的启动命令等系统装进虚拟磁盘之后就不需要每次手动指定内核和initramfs了固件会直接从虚拟磁盘的EFI分区引导。此时启动命令可以精简成qemu-system-loongarch64 -machine virt -cpu loongarch64 -smp 4 -m 8G -bios D:\loongarch\firmware\QEMU_EFI.fd -drive fileD:\loongarch\disk\archlinux.qcow2,formatqcow2,ifvirtio -device virtio-net-pci,netdevnet0 -netdev user,idnet0 -accel tcg,threadmulti -nographic记忆的方法是有-kernel和-initrd是安装模式没有是正常启动模式。两者的区别其实就是内核从哪来——安装时从宿主机直载内核进内存正常启动时由虚拟磁盘里的bootloader加载。4. 在虚拟机中安装ArchLinux全流程4.1 分区与格式化当QEMU启动到安装环境的Shell后第一件事就是给虚拟磁盘分区。执行fdisk /dev/vda创建一个GPT分区表然后建两个分区一个EFI系统分区大小512MB到1GB类型设为EFI System一个根分区剩余空间全部给根分区。具体操作流程是输入g创建GPT分区表输入n新建分区第一个分区按1G指定大小然后用t把分区类型改成1EFI System接着再n新建第二个分区直接用默认大小占满剩余空间类型保持默认的Linux filesystem即可。最后w写入分区表。分区完成后执行格式化mkfs.fat -F32 /dev/vda1 mkfs.ext4 /dev/vda2/dev/vda1是EFI分区FAT32格式是UEFI固件的硬性要求/dev/vda2是根分区ext4稳定可靠。如果你对性能有更高要求根分区也可以考虑f2fs或者xfs但从兼容性角度新手我还是建议ext4踩坑概率最低。4.2 挂载分区并安装基础系统格式化完成后按顺序挂载分区mount /dev/vda2 /mnt mkdir -p /mnt/boot mount /dev/vda1 /mnt/boot接下来用pacstrap安装基础系统。这里要强调一下在龙芯ArchLinux的安装环境里仓库源已经预配置为LoongArch移植版的软件源所以直接执行pacstrap /mnt base linux linux-firmware grub efibootmgr networkmanager vim sudobase是一组基础包linux是龙芯版内核linux-firmware包含必要的固件文件grub和efibootmgr是引导程序相关networkmanager用于装完系统后管理网络vim是编辑器sudo用来授权普通用户。这组包搭配下来装完就能直接进系统做基础配置。pacstrap会很诚实地把几百上千个包挨个下载解压在TCG模拟下这个过程耗时比较长我实测大约20到40分钟取决于你的网络和CPU性能。这时候别干等着可以顺便检查一下源的速度——如果觉得慢编辑/etc/pacman.d/mirrorlist把离你近的镜像源挪到最前面。4.3 系统基础配置pacstrap完成后需要生成fstab文件让系统启动时知道自动挂载哪些分区genfstab -U /mnt /mnt/etc/fstab然后chroot进入新系统arch-chroot /mnt在里面依次配置设置时区ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime hwclock --systohc设置locale编辑/etc/locale.gen去掉en_US.UTF-8和zh_CN.UTF-8前面的注释然后执行locale-gen再写/etc/locale.confecho LANGen_US.UTF-8 /etc/locale.conf设置主机名echo loongarch64 /etc/hostname设置root密码passwd创建普通用户并加入wheel组useradd -m -G wheel arch passwd arch编辑/etc/sudoers用EDITORvim visudo打开取消%wheel ALL(ALL:ALL) ALL这一行的注释这样普通用户就能用sudo了。4.4 安装引导程序这一步是最容易出问题的环节。在龙芯QEMU的virt平台上安装GRUB时要指定EFI目录并且需要确保GRUB安装了LoongArch64的EFI模块。执行grub-install --targetloongarch64-efi --efi-directory/boot --bootloader-idGRUB grub-mkconfig -o /boot/grub/grub.cfg第一行会把GRUB的EFI引导文件写到/boot/EFI目录第二行生成常规的GRUB配置文件。注意--targetloongarch64-efi不能漏默认目标可能不对应龙芯平台漏了的话grub-install会直接报平台不支持的错。装完之后退出chroot重启exit umount -R /mnt systemctl reboot如果一切顺利QEMU会从虚拟磁盘的EFI分区加载GRUB然后进入ArchLinux的登录提示符。5. 网络配置与性能优化5.1 用户模式网络与端口转发QEMU的-netdev user模式是默认推荐给普通用户的网络方案它不需要虚拟机里配置复杂的网桥也不要求管理员权限。虚拟机内部会拿到一个10.0.2.x的私有IP宿主机可以通过QEMU内置的虚拟网关访问外部网络。登录进系统后NetworkManager一般会自动配置DHCP如果没生效执行systemctl start NetworkManager然后dhcpcd手动获取IP或者直接ip link set dev enp0s2 up dhclient enp0s2。user模式做外向访问很方便虚拟机访问宿主机之外的网络都是通的。但如果你需要从宿主机直接连接虚拟机里跑的服务比如SSH就得靠端口转发了。启动QEMU时加上这样一段-netdev user,idnet0,hostfwdtcp::2222-:22意思是把宿主机的2222端口映射到虚拟机的22端口。之后在Win11的终端里执行ssh archlocalhost -p 2222就能直接连进虚拟机的SSH服务。经验在安装在系统阶段最好就顺手把SSH服务装好、启用后面很多操作通过SSH来做会比在-nographic终端里敲命令舒服得多尤其是复制粘贴长命令的时候。5.2 提升TCG模拟性能的几个实用技巧TCG模式的性能瓶颈主要在CPU翻译执行效率上但通过合理的配置还是能榨出一些余力。第一CPU核心数不是越多越好。在纯软件模拟下多核虽然可以用多线程但线程间同步也有开销实测4核是一个甜点值再往上加性能提升非常有限反而增加宿主机负担。第二磁盘IO一定要走virtio。安装时如果你用的是ifvirtio系统会加载virtio_blk驱动性能比默认的IDE模拟快很多。可以在虚拟机里执行lsblk -d -o name,tran验证如果传输类型显示virtio就对了。第三内存给足。TCG模式翻译执行对内存带宽有要求如果内存只有4GB编译大软件时swap会频繁触发拖慢几倍不止8GB起步是合理选择。第四如果只是做命令行开发测试建议始终用-nographic模式省掉VGA显示的模拟开销CPU资源能更集中地分配给计算任务。5.3 安装轻量桌面环境可选如果你不只是想玩命令行想在龙芯虚拟机上看看图形界面比如跑一下Qt程序、验证GUI应用在LoongArch平台上的表现可以装一个轻量桌面。XFCE4是个好选择对资源消耗低在TCG模拟下还能勉强拖动窗口。pacman -S xfce4 xfce4-goodies lightdm lightdm-gtk-greeter systemctl enable lightdm然后启动虚拟机时把-nographic换成-vga virtio再加一句-display sdl,gloff或者用gtkQEMU会弹出一个本地窗口显示龙芯虚拟机的桌面。实话说交互流畅度肯定不如真机但做软件布局验证、截图、跑简单的GUI应用是够用的。6. 常见问题与排查技巧实录6.1 启动卡住、黑屏、无输出这是新手最容易碰到的问题。先确认你下载的vmlinux和initramfs是不是ArchLinux LoongArch移植版仓库里的配套文件版本不匹配是黑屏的常见原因。其次检查-append参数如果consolettyS0写错或者没有-nographic模式下你看不到任何输出误以为启动失败其实系统可能已经在后台跑起来了。另外固件文件QEMU_EFI.fd必须是LoongArch版本的如果误用了x86或ARM的UEFI固件QEMU启动时会直接退出或卡在固件早期阶段可以通过去掉-kernel和-initrd参数只保留-bios和-drive看固件是否能进到UEFI Shell来验证固件是否正常。6.2 pacman更新慢或者密钥错误安装完系统后第一件常规操作就是pacman -Syu。如果更新慢编辑/etc/pacman.d/mirrorlist把速度快的镜像放到最前面。如果报GPG error或者密钥无法验证通常是archlinux-keyring包过期了先手动更新这个包pacman -Sy archlinux-keyring pacman -Syu在龙芯移植版上密钥环的初始化偶尔也会出问题需要执行pacman-key --init和pacman-key --populate archlinux来重建密钥环。6.3 虚拟机里时间不准因为TCG模式翻译执行指令比较慢虚拟机的时钟容易出现漂移尤其是挂起宿主机再唤醒后时间偏差可能达到几分钟。安装chrony并启用pacman -S chrony systemctl enable --now chronydNTP会自动校准时间避免因为时间不准导致SSL证书验证失败、git提交时间混乱之类的问题。6.4 虚拟磁盘越来越大宿主机磁盘告急qcow2镜像虽然初始很小但随着虚拟机里写入数据增多它会膨胀到最大分配值。如果发现磁盘空间被吃满了简单粗暴的方法是删除虚拟机里的垃圾文件后执行qemu-img convert来做收缩qemu-img convert -O qcow2 archlinux.qcow2 archlinux-compact.qcow2这个命令会把当前实际使用的数据重新打包到新镜像里未使用空间不再占宿主磁盘。压缩完成后把新镜像重命名替换旧镜像即可。6.5 常用问题速查表现象可能原因排查思路启动后黑屏无输出内核/initramfs版本不匹配console参数错误固件错误检查内核与initrd版本核对-append参数换QEMU_EFI.fd安装时无法挂载根目录initramfs问题或内核没有对应驱动重新下载匹配的initramfs换更新的linux内核pacman更新慢镜像源不合适编辑mirrorlist选就近镜像sudo无法使用wheel组未配置用visudo启用%wheel ALL(ALL:ALL) ALLSSH连接不上端口映射不对或sshd未启动检查hostfwd映射确认虚拟机里systemctl start sshd显示模糊或分辨率低缺少VGA驱动或参数配置确认启动参数有-vga virtio安装xf86-video-qxl总结一点个人体会折腾这个龙芯虚拟环境我最深的感触是它虽然不是一台真正的3A5000机器但对于绝大多数开发场景已经是性价比极高的替代方案。你可以在里面写代码、编译LoongArch64的程序、测试交叉编译工具链、复现软件在国产平台上的兼容性问题甚至能提前发现一些只在大端架构或特定指令集实现上才会出现的bug。说白了你不需要花几千块买一台实体龙芯整机就能把国产平台开发的大部分准备工作做掉。最后分享一个小技巧如果你打算长期用这个虚拟机建议在装好系统、配好网络之后把虚拟磁盘文件单独备份一份。比如复制一份archlinux.qcow2.bak后面万一折腾坏系统直接从备份文件重新启动2分钟就恢复回来了省得重装系统再熬一遍等待。我自己就是因为频繁测试不同软件包把系统搞挂了两三次后来养成备份镜像的习惯再没为系统崩溃头疼过。希望这份流程能帮你少走点弯路痛快地在龙芯平台上玩起来。