2013-03-24 163 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