WSL2 运行 FEMU 仿真完整踩坑解决方案(QEMU 启动报错、内存不足、QMP Socket 报错)
一、前言
最近做 3D NAND/SSD 存储仿真,用到开源 FEMU 框架,在 Windows WSL2 环境部署运行 run-blackbox.sh 启动脚本时,连续遇到两个致命报错:
- QMP unix socket 绑定失败:
Failed to bind socket to ./qmp-sock: Operation not supported - 内存分配失败:
GLib: failed to allocate 12884901888 bytes
网上资料零散,踩坑很久才彻底解决,本文整理从零配置 WSL2 + 完美跑通 FEMU 黑盒模式全套解决方案,可直接照着操作。
二、环境说明
- 宿主系统:Windows 10/11
- 运行环境:WSL2 Ubuntu 20.04 / 22.04
- 仿真框架:FEMU(SSD 开源仿真器,基于 QEMU 二次开发)
- 运行模式:BBSSD 黑盒模式
run-blackbox.sh
三、遇到的两大核心报错
报错1:QMP Socket 绑定失败
qemu-system-x86_64: -qmp unix:./qmp-sock,server,nowait:
Failed to bind socket to ./qmp-sock: Operation not supported
原因
WSL2 不支持在 Windows 挂载目录、普通工作目录 创建 Unix 域套接字,只能放在 Linux 原生临时目录 /tmp 下。
报错2:内存分配失败
GLib: ../../../glib/gmem.c:139:
failed to allocate 12884901888 bytes
原因
脚本默认配置 ssd_size=12288,对应 FEMU 要申请 12GB 内存,WSL2 默认内存限制不够,直接分配失败。
另外在 /mnt/f 等 Windows 挂载磁盘下运行,也会加剧内存分配、权限、兼容性问题。
四、解决方案一:修复 QMP Socket 路径
原脚本错误参数
-qmp unix:./qmp-sock,server,nowait
修改后正确参数
把相对路径改成 /tmp 绝对路径:
-qmp unix:/tmp/qmp-sock,server,nowait
每次运行前清理残留 socket
防止上次残留文件导致绑定失败:
rm -f /tmp/qmp-sock
五、解决方案二:解决内存分配失败
有两种方案,任选其一即可。
方案A:修改 FEMU 配置,减小 SSD 仿真容量(推荐)
打开 run-blackbox.sh,找到:
ssd_size=12288
改为小容量,适配 WSL 内存:
ssd_size=2048 # 2GB
# 或 ssd_size=4096 # 4GB
修改后 FEMU 只需分配少量内存,低配 WSL 也能直接跑通。
方案B:给 WSL2 扩容内存(不修改脚本)
-
Windows 打开用户目录,新建
.wslconfig文件
路径:C:\Users\你的用户名\.wslconfig -
写入以下内容
[wsl2]
memory=16GB
swap=4GB
processors=8
- 生效配置
以管理员身份打开 CMD/PowerShell:
wsl --shutdown
重启 WSL 后,内存就扩容到 16GB,可原生跑 12GB 的 FEMU 配置。
六、关键避坑:不要在 /mnt 挂载目录运行 FEMU
严重不推荐
/mnt/f/FEMU
/mnt/d/FEMU
这类是 Windows NTFS 挂载到 WSL 的目录,存在一堆兼容问题:
- Unix Socket 不支持
- QEMU 内存分配受限
- 权限异常、性能极低、仿真容易卡死
正确做法:移到 WSL 家目录
# 拷贝到 WSL 原生 Linux 文件系统
cp -r /mnt/f/FEMU ~/
# 进入家目录运行
cd ~/FEMU/build-femu
# 先清旧socket再运行
rm -f /tmp/qmp-sock
./run-blackbox.sh
七、修复后的完整可用 run-blackbox.sh 关键片段
只贴修改后的末尾部分,替换你原有脚本即可:
sudo ./qemu-system-x86_64 \
-name "FEMU-BBSSD-VM" \
-enable-kvm \
-cpu host \
-smp 2 \
-m 2G \
-device virtio-scsi-pci,id=scsi0 \
-device scsi-hd,drive=hd0 \
-drive file=$OSIMGF,if=none,aio=native,cache=none,format=qcow2,id=hd0 \
${FEMU_OPTIONS} \
-net user,hostfwd=tcp::8080-:22 \
-net nic,model=virtio \
-nographic \
-qmp unix:/tmp/qmp-sock,server,nowait 2>&1 | tee log
同时把脚本开头:
ssd_size=12288
改成:
ssd_size=2048
八、总结
- QMP socket 报错:把 ./qmp-sock 改为 /tmp/qmp-sock;
- 内存分配失败:减小 ssd_size 或给 WSL 扩容内存;
- 绝对不要在
/mnt/Windows 挂载目录跑 FEMU,移到~/家目录; - 每次运行前
rm -f /tmp/qmp-sock避免残留绑定失败。
按照本文配置,WSL2 可稳定跑通 FEMU 黑盒 SSD 仿真,无报错、不卡死。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)