Cpu abi что это такое
Русские Блоги
(Воспроизводятся) Как бороться с системной системой CPU / ABI для цели
Нажмите [Computer] на рабочем столе, затем нажмите [Свойства системы] над всплывающим интерфейсом, за которым следуют левая кнопка в панели [Система]. [Изменить настройки]
В это время появится панель [Свойства системы], щелкните [Advanced] выше этой панели, затем выберите переменные среды ниже интерфейса.
Далее, обязательно добавьте переменные среды ниже [User Carriable XXX] [ANDROID_SDK_HOME 】, Не забудьте добавить эту переменную среды в первой коробке переменной окружающей среды, которая может быть предоставлена самими, как показано
Затем перезапустите Eclipse, нажмите Создать симулятор Android, попробуйте успешно
Если вы не можете открыть Android SDK Manager, загрузите три файлы для ARM EABI V7A System Image, Intel X86 Atom System Image Image Image Image.
Когда вы загружаете вышеприведенные три файла, вы должны сначала щелкнуть [Tools] над интерфейсом, затем выберите [Опция], и установите внешнюю сеть соединения, чтобы загрузить.
Попробуйте еще раз создать открытие виртуального машины Android, чтобы успешно создавать виртуальные машины Android!
Русские Блоги
Android CPU ABI
Кратко об ABI
В разных телефонах Android используются разные процессоры, поэтому они поддерживают разные наборы команд. Каждая комбинация процессора и набора команд имеет собственный двоичный интерфейс приложения (или ABI). ABI может очень точно определить, как машинный код приложения взаимодействует с системой во время выполнения. Вы должны указать ABI для каждой архитектуры ЦП, которая будет использоваться приложением.
Типичный ABI содержит следующую информацию:
Несколько Android CPU ABI
Архитектура процессора | описание |
---|---|
armeabi | ARM v5TE 5-го поколения, использующий программное вычисление с плавающей запятой, совместим со всеми устройствами ARM, высокая универсальность, низкая скорость |
armeabi-v7a | ARM v7 7-го поколения, использующий аппаратные операции с плавающей запятой, с расширенными расширенными функциями |
arm64-v8a | 8-е поколение, 64-битное, включая AArch32 и AArch64, два состояния выполнения, соответствующие 32, 64-битным |
x86 | Intel 32 бит, обычно используется для планшетов |
x86_64 | Intel 64 бит, обычно используется для планшетов |
mips | Меньше контактов |
mips64 | Меньше контактов |
Установите соответствующую поддержку для APK
Просмотр ABI процессора
Обычно мы можем просмотреть архитектуру ABI, поддерживаемую ЦП, следующим образом:
Просмотр через команду adb
1. Подключаем телефон к компу
2. Откройте командное окно cmd и введите команду adb shell.
3. Затем введите команду cat / proc / cpuinfo.
Русские Блоги
ЦП и архитектура собственных средств разработки (3)
Продвинутое видео архитектора мобильного Интернета Alibaba P7 (обновляется ежедневно) для бесплатного обучения, нажмите:https://space.bilibili.com/474380680
1. Введение
При использовании нативного кода важно оборудование. NDK предоставляет вам на выбор множество ABI, что позволяет гарантировать, что вы компилируете для правильной архитектуры и процессора.
В этом разделе описывается, как настроить таргетинг на конкретныеАрхитектура и ЦП, Как пользоваться ARMРасширенный набор инструкций NEONИ как его использовать во время выполненияcpufeatures Необязательная функция библиотечного запроса.
2. Управление ABI
В разных телефонах Android используются разные процессоры, а разные процессоры поддерживают разные наборы команд. Каждая комбинация процессора и набора команд имеет собственный двоичный интерфейс приложения, а именно ABI. ABI может очень точно определить, как машинный код приложения взаимодействует с системой во время выполнения. Вы должны указать ABI для каждой архитектуры ЦП, которая будет использоваться приложением.
Типичный ABI содержит следующую информацию:
На этой странице перечислены ABI, поддерживаемые NDK, и описаны принципы работы каждого ABI. Список проблем с ABI в 32-битных системах см.32-битная ошибка ABI
Каждый ABI поддерживает один или несколько наборов инструкций. В таблице 1 представлен набор команд, поддерживаемый каждым ABI.
Таблица 1. ABI и поддерживаемый набор инструкций.
заметка: NDK ранее поддерживал 32-битные и 64-битные MIPS, но эта поддержка была удалена в NDK r17.
Более подробная информация о каждом ABI представлена ниже.
armeabi
заметка: Этот ABI был удален в NDK r17.
Этот ABI подходит для процессоров на базе ARM, которые поддерживают как минимум набор инструкций ARMv5TE. Подробнее см. В следующих документах:
Стандарт AAPCS определяет EABI как серию похожих, но разных ABI. Кроме того, Android также использует прямой порядок байтовARM GNU/Linux ABI。
Этот ABI не поддерживает аппаратные операции с плавающей запятой. Вместо этого все операции с плавающей запятой используют компилятор libgcc.a Программные вспомогательные функции в статической библиотеке.
armeabi ABI поддерживает ARMНабор инструкций Thumb (также известный как Thumb-1). NDK генерирует Thumb-код по умолчанию, если вы Android.mk Используется в файле LOCAL_ARM_MODE Переменные определяют различное поведение.
armeabi-v7a
Этот ABI может расширить armeabi, включив в него несколькоРасширенный набор команд ЦП. Расширенные инструкции, поддерживаемые этим специфичным для Android ABI, включают:
Другие расширенные наборы инструкций, описанные в спецификации v7-a ARM, включаяРасширенный SIMD(Также известный как NEON), VFPv3-D32 и ThumbEE, являются необязательными расширенными наборами инструкций этого ABI. Поскольку их существование не может быть гарантировано, система должна проверить, доступен ли расширенный набор команд во время выполнения. Если он недоступен, вы должны использовать альтернативный путь кода. Эта проверка аналогична проверке системы или использованиюMMX、SSE2 И другие специальные инструкции для процессора x86.
Чтобы узнать, как выполнять эти проверки во время выполнения, см. cpufeatures Библиотека. Кроме того, для получения информации о поддержке NDK компиляции машинного кода для NEON см.Поддержка NEON。
arm64-v8a
Этот ABI подходит для процессоров на базе ARMv8, поддерживающих AArch64. Он также содержит наборы инструкций NEON и VFPv4.
Для получения дополнительной информации см.Предварительный просмотр технологии ARMv8И свяжитесь с ARM для получения дополнительной информации.
Этот ABI предназначен для процессоров, которые поддерживают набор команд, обычно называемый «x86» или «IA-32». Особенности этого ABI включают:
Эти теги указывают на набор команд Pentium Pro, иMMX、SSE、SSE2、SSE3 ИSSSE3 Расширенный набор инструкций. Сгенерированный код сбалансирован и оптимизирован для лучших 32-разрядных процессоров Intel.
Для получения дополнительной информации о флагах компилятора, особенно информации, связанной с оптимизацией производительности, см.Советы по производительности GCC x86。
ABI не содержит какого-либо другого необязательного расширенного набора инструкций IA-32, например:
Вы по-прежнему можете использовать эти расширенные наборы инструкций, если используете обнаружение функций во время выполнения, чтобы включить их и предоставить резервный механизм для устройств, которые их не поддерживают.
Цепочка инструментов NDK предполагает выравнивание стека по 16 байт перед вызовом функций. Инструменты и параметры по умолчанию применяют это правило. Если вы пишете ассемблерный код, вы должны обеспечить выравнивание стека, и другие компиляторы также следуют этому правилу.
Для получения более подробной информации обратитесь к следующим документам:
x86_64
Этот ABI предназначен для процессоров, которые поддерживают набор команд, обычно называемый «x86-64». Он поддерживает инструкции, которые GCC обычно генерирует со следующими флагами компилятора:
Эти теги указывают на набор инструкций x86-64 (согласно документации GCC) иMMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2 с участием POPCNT Расширенный набор инструкций. Сгенерированный код сбалансирован и оптимизирован для лучших 64-разрядных процессоров Intel.
Для получения дополнительной информации о флагах компилятора, особенно информации, связанной с оптимизацией производительности, см.Производительность GCC x86。
Этот ABI не содержит никаких других необязательных расширенных наборов инструкций x86-64, таких как:
Вы по-прежнему можете использовать эти расширенные наборы инструкций, если используете обнаружение функций во время выполнения, чтобы включить их и предоставить резервный механизм для устройств, которые их не поддерживают.
Для получения более подробной информации обратитесь к следующим документам:
Сгенерировать код для определенного ABI
По умолчанию NDK указывает на все нерекомендуемые ABI. Вы можете Application.mk Настройки в файле APP_ABI Чтобы указать на один ABI. Следующий фрагмент кода демонстрирует использование APP_ABI Несколько примеров
Чтобы узнать больше о APP_ABI Значение, указанное переменной, см.Android.mk。
Во время установки диспетчер пакетов распаковывает только машинный код, наиболее подходящий для целевого устройства. Подробнее см.Автоматически извлекать собственный код во время установки。
Управление ABI на платформе Android
В этом разделе подробно описано, как платформа Android управляет собственным кодом в APK.
Собственный код в пакете приложения
И Play Store, и менеджер пакетов надеются найти библиотеку, созданную NDK, в пути к APK-файлу, который соответствует следующему формату:
из их, даПоддерживаемый ABI Одно из названий ABI, перечисленных ниже, Ты для Android.mk В файле LOCAL_MODULE Имя библиотеки, используемое, когда переменная определяет библиотеку. Поскольку APK-файлы представляют собой просто ZIP-файлы, их легко открыть и убедиться, что общая собственная библиотека существует.
Если система не может найти собственные общие библиотеки в ожидаемом месте, их нельзя использовать. В этом случае само приложение должно скопировать эти библиотеки, а затем выполнить dlopen() 。
В толстом APK каждая библиотека находится в каталоге, имя которого совпадает с соответствующим ABI. Например, толстый APK может содержать:
заметка: Устройства Android на базе ARMv7 под управлением 4.0.3 или более ранней версии от armeabi Каталог (не armeabi-v7a Каталог, если существуют оба каталога) установите собственную библиотеку. Это потому, что в APK /lib/armeabi/ В /lib/armeabi-v7a/ Позади. Начиная с 4.0.4 эта проблема исправлена.
Поддержка ABI платформы Android
Система Android знает, какие ABI поддерживает во время выполнения, потому что свойства системы, зависящие от версии, указывают:
Этот механизм гарантирует, что система извлекает лучший машинный код из программного пакета во время установки.
64-битные устройства также поддерживают его 32-битный вариант. В качестве примера возьмем устройство arm64-v8a, это устройство также может запускать код armeabi и armeabi-v7a. Однако обратите внимание, что если приложение нацелено на arm64-v8a вместо того, чтобы полагаться на устройство, на котором запущена версия приложения armeabi-v7a, производительность приложения на 64-разрядных устройствах намного выше.
Автоматически извлекать собственный код во время установки
Когда приложение установлено, служба диспетчера пакетов просканирует APK и найдет все общие библиотеки следующих форм:
Если он не найден и вы определили вторичный ABI, служба просканирует разделяемые библиотеки в следующем виде:
Когда необходимые библиотеки найдены, менеджер пакетов копирует их в приложение data оглавление ( data/data/
Если общего объектного файла нет вообще, приложение скомпилируется и установится, но во время выполнения произойдет сбой.
Три, функция процессора обработки
ABI: предопределенные макросы с использованием препроцессора
Обычно используют #ifdef И следующие пункты наиболее удобны для определения ABI:
Количество ядер процессора: sysconf (3) с использованием libc
sysconf(3) Может запросить _SC_NPROCESSORS_CONF (Количество ядер ЦП в системе), и вы можете запросить _SC_NPROCESSORS_ONLN (Количество ядер ЦП в настоящее время в сети).
Функция: используйте getauxval (3) из libc
Библиотека Google cpu_features
AT_HWCAP Одна проблема в том, что иногда устройство выходит из строя. Например, некоторые старые устройства утверждают, что имеют инструкции деления на целые числа, но это не так.
Cpu_features от Google Библиотека полагается на свои знания о конкретной SoC (посредством анализа /proc/cpuinfo Освойте соответствующий SoC) для решения таких проблем.
Библиотека cpufeatures NDK
NDK предоставляет программу под названием cpufeatures Функция аналогична getauxval (3), но также может использоваться в версиях до уровня API 18. И другиеcpu_features В отличие от библиотеки, он не имеет дополнительных знаний о конкретной SoC.
NDK cpufeatures API
Возвращает набор битовых флагов, каждый флаг представляет определенную функцию серии ЦП. Остальная часть этого раздела описывает функции каждой серии.
32-битная серия процессоров ARM
Следующие обозначения применимы к 32-разрядным ЦП ARM:
ANDROID_CPU_ARM_FEATURE_VFPv2
означает, что ЦП устройства поддерживает набор инструкций VFPv2. Большинство процессоров ARMv6 поддерживают этот набор команд.
ANDROID_CPU_ARM_FEATURE_ARMv7
означает поддержку ЦП устройством.armeabi-v7a Набор инструкций ARMv7-A, поддерживаемый ABI. Этот набор команд поддерживает инструкции как Thumb-2, так и VFPv3-D16. Это возвращаемое значение также указывает, что поддерживается расширенный набор инструкций аппаратного FPU VFPv3.
ANDROID_CPU_ARM_FEATURE_VFPv3
означает, что ЦП устройства поддерживает расширенный набор инструкций аппаратного FPU VFPv3.
Это значение эквивалентно набору инструкций VFPv3-D16, который предоставляет только 16 аппаратных регистров FP двойной точности.
ANDROID_CPU_ARM_FEATURE_VFP_D32
означает, что ЦП устройства поддерживает 32 (вместо 16) аппаратных регистров FP двойной точности. Даже если имеется 32 аппаратных FP-регистра двойной точности, только 32 регистра одинарной точности отображаются в один и тот же банк регистров.
ANDROID_CPU_ARM_FEATURE_NEON
означает, что ЦП устройства поддерживает расширенный набор векторных команд ARM Advanced SIMD (NEON). Обратите внимание, что ARM требует, чтобы эти процессоры также реализовывали VFPv3-D32. VFPv3-D32 предоставляет 32 аппаратных регистра FP (совместно используемых с модулями NEON).
ANDROID_CPU_ARM_FEATURE_VFP_FP16
означает, что ЦП устройства поддерживает инструкции для выполнения операций с плавающей запятой в 16-разрядных регистрах. Эта функция является частью спецификации VFPv4.
ANDROID_CPU_ARM_FEATURE_VFP_FMA
означает, что ЦП устройства поддерживает объединение, накопление и расширение набора команд VFP. Это также часть спецификации VFPv4.
ANDROID_CPU_ARM_FEATURE_NEON_FMA
означает, что ЦП устройства поддерживает интеграцию, накопление и расширение набора команд NEON. Это также часть спецификации VFPv4.
ANDROID_CPU_ARM_FEATURE_IDIV_ARM
означает, что ЦП устройства поддерживает целочисленное деление в режиме ARM. Применимо только к процессорам более высоких моделей, например Cortex-A15.
ANDROID_CPU_ARM_FEATURE_IDIV_THUMB2
означает, что ЦП устройства поддерживает целочисленное деление в режиме Thumb-2. Применимо только к процессорам более высоких моделей, например Cortex-A15.
ANDROID_CPU_ARM_FEATURE_iWMMXt
означает, что ЦП устройства поддерживает расширенный набор инструкций, который может добавлять регистры и инструкции MMX. Эта функция доступна только для нескольких процессоров на базе XScale.
ANDROID_CPU_ARM_FEATURE_LDREX_STREX
означает, что ЦП устройства поддерживает инструкции LDREX и STREX, доступные с ARMv6. С выделенными мониторами эти инструкции могут быть объединены для обеспечения атомарных обновлений в памяти.
64-битная серия процессоров ARM
Следующие обозначения применимы к серии 64-битных ЦП ARM:
ANDROID_CPU_ARM64_FEATURE_FP
означает, что ЦП устройства имеет модуль с плавающей запятой (FPU). Все устройства Android ARM64 должны поддерживать эту функцию.
ANDROID_CPU_ARM64_FEATURE_ASIMD
означает, что ЦП устройства имеет усовершенствованный модуль SIMD (ASIMD). Все устройства Android ARM64 должны поддерживать эту функцию.
ANDROID_CPU_ARM64_FEATURE_AES
означает, что ЦП устройства поддерживает инструкции AES.
ANDROID_CPU_ARM64_FEATURE_CRC32
означает, что ЦП устройства поддерживает инструкции CRC32.
ANDROID_CPU_ARM64_FEATURE_SHA1
означает, что ЦП устройства поддерживает инструкции SHA1.
ANDROID_CPU_ARM64_FEATURE_SHA2
означает, что ЦП устройства поддерживает инструкции SHA2.
ANDROID_CPU_ARM64_FEATURE_PMULL
означает, что ЦП устройства поддерживает 64-битные инструкции PMULL и PMULL2.
32-битный процессор серии x86
Следующие обозначения применимы к 32-разрядным процессорам серии x86.
ANDROID_CPU_X86_FEATURE_SSSE3
означает, что ЦП устройства поддерживает расширенный набор инструкций SSSE3.
ANDROID_CPU_X86_FEATURE_POPCNT
означает, что ЦП устройства поддерживает инструкцию POPCNT.
ANDROID_CPU_X86_FEATURE_MOVBE
означает, что ЦП устройства поддерживает инструкцию MOVBE. Эта инструкция характерна для некоторых процессоров Intel IA-32, таких как Atom.
android_getCpuFeatures () возвращает 0 для серий ЦП, в которых не указан расширенный набор инструкций.
Примечание: учитывая sysconf (3), эта функция обычно бесполезна.
возвращает количество ядер ЦП в системе, которое может быть больше фактического количества онлайн-ядер.
Примечание: с учетом макросов препроцессора эта функция обычно бесполезна.
возвращает одну из следующих констант, представляющих серию / архитектуру ЦП, поддерживаемую устройством:
Для 32-битных исполняемых файлов в 64-битных системах эта функция возвращает 32-битную архитектуру.
Используйте cpufeatures NDK с ndk-build
cpufeatures Библиотеку можно использовать как модуль импорта. Чтобы использовать эту библиотеку:
Будет cpufeatures добавить к LOCAL_STATIC_LIBRARIES 。
В исходном коде #include 。
ВAndroid.mk Импортировать в конце android/cpufeatures 。
Ниже приводится импорт cpufeatures из Android.mk Пример:
3. Поддержка NEON
NDK поддерживает ARM Advanced SIMD (обычно называемый NEON), дополнительный расширенный набор инструкций для ARMv7 и ARMv8. NEON предоставляет скалярные / векторные инструкции и регистры (общие с FPU), сравнимые с MMX / SSE / 3DNow! В x86. Для запуска NEON требуется VFPv3-D32 (32 аппаратных 64-битных регистра FPU вместо минимальных 16).
Не все устройства Android на базе ARMv7 поддерживают NEON, но поддерживаемые устройства могут извлечь большую пользу из поддержки NEON для скалярных / векторных инструкций.
NDK поддерживает компиляцию модулей и даже может компилировать определенные исходные файлы, поддерживающие NEON.
Используйте LOCAL_ARM_NEON
Чтобы NDK скомпилировал все исходные файлы, поддерживающие NEON, добавьте следующую строку кода в определение модуля: makefile LOCAL_ARM_NEON: = true
Если вы хотите скомпилировать статические или разделяемые библиотеки, которые содержат только код NEON, компиляция всех исходных файлов, поддерживающих NEON, может быть особенно полезной.
Требования к компиляции
Поддержка NEON распространяется на [armeabi-v7a](https://developer.android.google.cn/ndk/guides/abis.html#v7a) с участием [arm64-v8a](https://developer.android.google.cn/ndk/guides/abis.html#arm64-v8a) ABI. Если сценарий компиляции NDK встречает другие ABI при попытке компиляции с поддержкой NEON, сценарий компиляции NDK завершится. Должен быть в Android.mk Добавьте в файл следующий контрольный код:
Обнаружение времени выполнения
Приложение должно выполнить тестирование во время выполнения, чтобы подтвердить, что машинный код с поддержкой NEON может работать на целевом устройстве. Это связано с тем, что не все устройства Android на базе ARMv7 поддерживают NEON. Приложения могут использовать cpufeatures Библиотека выполняет эту проверку.
Обеспечить кроссплатформенную поддержку x86
NDK поддерживает использование третьих лицNEON_2_SSE.h Кроссплатформенная компиляция существующих встроенных функций ARM SIMD (NEON) в код SSE x86. Чтобы узнать больше об этом, см.От ARM NEON к Intel SSE: решения для автоматического портирования, советы и рекомендации。
Образец кода
привет-неоновый примерПоказывает, как использовать оба cpufeatures Библиотеки и встроенные функции NEON. В этом примере реализуется версия C крошечного теста цикла FIR-фильтра и реализуется тестовый тест, оптимизированный для NEON, для устройств с поддержкой NEON.
Исходная ссылкаhttps://developer.android.google.cn/ndk/guides/cpu-arm-neon
Продвинутое видео архитектора мобильного Интернета Alibaba P7 (обновляется ежедневно) для бесплатного обучения, нажмите:https://space.bilibili.com/474380680
Интеллектуальная рекомендация
Преобразования общих типов для передачи данных по протоколу iOS-TCP / IP (приветствуются дополнения
Раньше я работал над проектами TCP / IP. Обработка данных является наиболее сложной задачей. Каждый раз, когда встречается новый тип данных, добавляется новый класс методов, что приводит к путанице. С.
Lotus версия 0.4.1 Данные цепочки блока Copy Block снижает синхронизацию
Lotus версия Скопируйте данные с узла, который был синхронизирован высотой блока Узел паузыlotus daemonБеги, сжатый каталогdatastoreПуть кlotus/datastore Копировать каталогchainс участиемmetadataЗамен.
Маленькая программа wx: ограничение количества списков цикла for
Все мы знаем, что wx: for используется для зацикливания массива. В этом цикле будут зациклены все данные в списке. Но часто нам не нужно зацикливать все данные или мы не хотим отображать все данные. О.
Шантажировал биткойн впервые
Предисловие Новости о вымогателях всегда случались, но я всегда чувствую, что это вряд ли случится со мной. В итоге я встретился сегодня. проблема Во второй половине дня я отправлю интерфейс студентам.
Установить не удалось CPU ABI несовместимый на устройстве с помощью intellij
Я видел некоторые вопросы об этом, но ни с реальными ответами, ни с деталями. Вот мой случай:
У меня есть приложение, которое использует Google Maps API v2, который работает просто отлично. Недавно я узнал, что не могу установить его на этой Не устройство на основе ARM.
чтобы прибить проблему, я работаю с образцами Google Maps, предоставленными с SDK (sdkextrasgooglegoogle_play_servicessamples)
что дает мне то же сообщение об ошибке во время установки:
Я получаю это сообщение только на реальном устройстве с помощью Intellij (12.1.1)
он отлично работает как с Eclipse на реальном устройстве, так и с Intellij на эмуляторе, настроенном с CPU: Intel Atom (x86)
любая помощь будет высоко ценится!
обновление
как и ожидалось, то же самое происходит с Android Studio
3 ответов
по умолчанию, IntelliJ предполагает, что libs папка в корне модуля Android содержит собственные библиотеки, даже если она просто содержит банки. Таким образом, он упаковывает APK, делая его похожим на родные библиотеки. У меня просто была аналогичная проблема, когда мое приложение не имело собственного кода и работало на эмуляторе по умолчанию, но получило предупреждение ABI при установке на эмулятор Genymotion. Чтобы исправить это, скажите IntelliJ (или Android Studio), что ваши библиотеки не являются родными код:
последний Genymotion не будет поддерживать двоичный ARM. Если у вас есть собственный код, скомпилированный для ARM, вы можете использовать Genymotion-ARM-Translation. Просто перетащите этот файл в домашнюю папку Genymotion и перезагрузитесь.
В Android studio исправьте эту проблему:
1 Скачать Genymotion-ARM-Translation_v1.1.zip
2 перетащите zip-файл в работающее виртуальное устройство и нажмите ok
3 перезапустить виртуальное устройство Genymotion