2013-03-24 3 views
2

Android SDK와 함께 제공되는 Android 에뮬레이터는 NEON 명령어 세트 에뮬레이션 (자체 테스트)을 지원합니다. QEMU를 기반으로합니다.Qemu의 ARM NEON 지원

최근 QEMU (Cortex-A9를 에뮬레이트)로 사용자 지정 VM을 만들고 ARMEL Linux 배포판을 설치했습니다.

그러나 설치 후 /proc/cpuinfo은 (는) CPU 기능에 neon을 표시하지 않습니다. Android 에뮬레이터는 실제로 어떤 트릭을 사용합니까? NEON이 VM 내부에서 사용 가능한 것으로 보입니까?

+0

귀하의 것보다 최신 버전이거나 귀하의 설정이 다르게 구성되어 있습니다. – auselen

답변

2

이 값은 elf_hwcap에 저장됩니다 (kernel/setup.c 참조). vfp/vfpmodule.cNEON을 감지하고 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

+1

@NumberFour 맞습니다. 리눅스는 * 정의되지 않은 명령어 * 예외를 통해 네온을 에뮬레이션 할 수 있습니다. 그런 다음 하이퍼 바이저 아래에서 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) 명령을 에뮬레이트하는 것처럼 보입니다. –

0

나는 같은 문제에 직면했다. 네온을 지원하는 하드웨어를 에뮬레이션해야합니다. beaglexm에는 지원이 있습니다. 이것을 확인하십시오 here

관련 문제