Поддержка ARM NEON в Qemu

Эмулятор Android, поставляемый с Android SDK, поддерживает эмуляцию набора инструкций NEON (сам проверял). И он основан на QEMU.

Недавно я попытался создать пользовательскую виртуальную машину с QEMU (эмулируя Cortex-A9) и установил какой-то дистрибутив ARMEL Linux.

Однако после установки /proc/cpuinfo не отображается neon в функциях процессора. Какой трюк на самом деле делает эмулятор Android, чтобы NEON был доступен внутри их виртуальной машины?


person NumberFour    schedule 24.03.2013    source источник
comment
это либо более новая версия, чем ваша, либо ваша настроена по-другому.   -  person auselen    schedule 24.03.2013


Ответы (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() – это макрос для сопроцессора CP15, который получает битовую карту идентификатора процессора. fmrx() также использует другой регистр сопроцессора VFP. Таким образом, используемый вами эмулятор не отвечает должным образом на инструкции MRC ни из одного из регистров сопроцессора; или, может быть, он не поддерживает эмуляцию NEON.

person artless noise    schedule 24.03.2013
comment
Таким образом, отсутствие Neon в /proc/cpuinfo не обязательно означает, что эмуляция не поддерживается, верно? - person NumberFour; 25.03.2013
comment
@NumberFour Это правильно. Вы должны быть осторожны, Linux может эмулировать Neon через исключение неопределенных инструкций. Тогда вы будете эмулировать NEON под гипервизором. Я вижу только alignment.c, vfpdouble.c и vfpsingle.c, которые, похоже, эмулируют инструкции. - person artless noise; 25.03.2013

Я столкнулся с той же проблемой. Вы должны эмулировать оборудование с поддержкой неона. beaglexm имеет поддержку. проверьте это здесь

person junaids    schedule 18.02.2016