You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Mac Mini编译QEMU报错qemu_mprotect__osdep mprotect权限被拒绝如何解决

qemu-system-x86_64: qemu_mprotect__osdep: mprotect failed: Permission denied

报错根因

搭载M1系列芯片的Mac设备运行arm64架构macOS,默认启用W^X(写入、执行权限互斥)安全机制,禁止同一块内存页同时申请写入、执行权限。QEMU的x86架构模拟逻辑需要申请同时具备读写执行权限的内存页,被系统安全机制拦截触发该报错。

排查&解决步骤
  • 第一步:调整编译配置参数
    编译QEMU前运行configure时加入适配macOS的参数,配置命令参考:
    ./configure --enable-hvf --target-list=x86_64-softmmu --disable-strip
    其中--enable-hvf参数启用苹果官方硬件虚拟化框架适配,可大幅降低内存权限冲突概率。
  • 第二步:为QEMU二进制文件添加权限签名
    本地编译的QEMU默认没有申请JIT内存权限的 entitlements,需要手动添加签名:
    1. 新建qemu.entitlements文件,写入以下内容:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.cs.allow-jit</key>
        <true/>
        <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
        <true/>
        <key>com.apple.security.cs.disable-executable-page-protection</key>
        <true/>
    </dict>
    </plist>
    
    1. 运行ad-hoc签名命令,替换命令中的路径为你本地编译生成的qemu-system-x86_64二进制文件路径:
      codesign --entitlements qemu.entitlements --force --sign - /path/to/qemu-system-x86_64
  • 第三步:规避系统文件夹沙箱限制
    不要将编译好的QEMU二进制文件放在下载、桌面等带有额外沙箱限制的系统文件夹内,建议移动到/Applications或者用户主目录下的自定义文件夹运行。
  • 第四步:启动时指定虚拟化加速参数
    运行QEMU时添加-accel hvf参数强制启用硬件虚拟化加速,可完全规避纯软件模拟触发的W^X权限限制。

内容的提问来源于stack exchange,提问作者KittyBorgX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 20:27:01