解决 Mac OS X 中 VT/NX 未开启问题

Android-Emulator
Android-Emulator

首先需要说一下什么是 HAXM,HAXM 全拼是 Hardware Accelerated Execution Manager (硬件加速处理管理器),是 Intel 专门为其品牌的 CPU 推出的软件,它利用 Intel 的虚拟化技术 VT (Virtualization Technology) 来大幅提升 Android 虚拟机的运行速度。

按照 Intel 官方的安装说明安装,安装到最后一步的时候却蹦出警告,告诉我 VT/NX 在我的机器上没有开启。

警告是这样的:

VT/NX not enabled While your machine supports it, your hardware is in a state which has disabled it.

这时,kextstat | grep intel 也看不到有关模块,也就是 intelhaxm 没有加载成功。

然而 Intel 的资料中叙述道,在所有的 Mac 机器中,VT/NX 的硬件默认是打开的,如果提示未开启虚拟化则表明机器不支持 VT/NX。WTF?Haswell 不支持虚拟化?开什么玩笑,这完全不可能。为了确认,又去查了查自己的 CPU,CPU 是肯定支持 VT/NX 的。而且在 sysctl -a | grep machdep.cpu.features 里面可以找到 vmx,现在可以排除硬件问题了。

查阅了大量的问答社区和博客,终于找到了答案。

没有签名或者签名无效的内核模块将不会被系统加载。如果需要加载未签名模块,则要开启模块开发模式,也就是需要添加一个 “kext-dev-mode=1” 的启动参数。

好消息是 Mac OS X 10.10 Yosemite 又增强了系统的安全性,现在默认不允许没有签名的模块加载了,但是坏消息是 Intel 还没来得及给 HAXM 签名。

改机器的启动参数需要用到 nvram 命令,nvram 是 manipulate firmware NVRAM variables,用来调整 NVRAM 中所存储的变量的,详细用法请自己去 man。

这样 sudo nvram boot-args=”kext-dev-mode=1” 可以添加我们所需要的内核参数 ,这样 sudo nvram -d “boot-args” 可以删除之前增加的参数。开启 kext 开发模式后即可加载未签名变量,但是请注意这有一定的安全风险。这样就可以让 HAXM 工作起来了,开启加速之后,Android 虚拟机确实跑的飞快。

PS:Android 5.0 的设计真的很赞!

Issue:
Starting emulator for AVD ‘X86’
emulator: ERROR: x86 emulation currently requires hardware acceleration!
Please ensure Intel HAXM is properly installed and usable.
CPU acceleration status: HAX is not installed on this machine (/dev/HAX is missing).

展开阅读全文

没有更多推荐了,返回首页