2013-03-24 263 views
2

Android SDK附带的Android仿真器支持NEON指令集仿真(测试自己)。 它基于QEMU。Qemu中的ARM NEON支持

我最近试图用QEMU(仿真Cortex-A9)创建一个自定义虚拟机,并安装了一些ARMEL Linux发行版。

但是,安装后/proc/cpuinfo在CPU功能中没有显示neon。 实际上Android模拟器有什么窍门,NEON似乎可以在虚拟机内部使用?

+0

它是一个比你更新的版本或您的配置不同。 – auselen 2013-03-24 15:43:26

回答

2

这些值存储在elf_hwcap(请参见kernel/setup.c)。 vfp/vfpmodule.c检测到NEON支持并在elf_hwcap中设置了一点。从这个代码具体而言,

  /* 
      * Check for the presence of the Advanced SIMD 
      * load/store instructions, integer and single 
      * precision floating point operations. Only check 
      * for NEON if the hardware has the MVFR registers. 
      */ 
      if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) { 
#ifdef CONFIG_NEON 
        if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100) 
          elf_hwcap |= HWCAP_NEON; 
#endif 
#ifdef CONFIG_VFPv3 
        if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000) 
          elf_hwcap |= HWCAP_VFPv4; 
#endif 
      } 

read_cpuid_id()为它获取一个CPU ID位图的协处理器CP15的宏。 fmrx()也使用另一个VFP协处理器寄存器。因此,您正在使用的仿真器没有正确响应来自任一协处理器寄存器的MRC指令;或者它可能不支持NEON仿真。

+0

所以霓虹灯没有在/ proc/cpuinfo中列出并不一定意味着仿真不被支持,对吧? – NumberFour 2013-03-25 08:56:40

+1

@NumberFour这是正确的。你应该小心,Linux可以通过* undefined instructions * exception模拟Neon。然后你会在超级面罩下模仿NEON。我只看到[alignment.c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/mm/alignment.c),[vfpdouble .c](https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/vfp/vfpdouble.c)和[vfpsingle.c]( https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/arm/vfp/vfpsingle.c)似乎在模拟指令。 – 2013-03-25 13:46:34

0

我正面临同样的问题。你必须模拟有氖支持的硬件。 beaglexm有支持。检查这here