Поддръжка на 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, който получава битова карта на cpu id. 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