7 votes

Applications Android pour l'architecture "armeabi-v7a" et "x86" : SoC vs. processeur vs. ABI

En téléchargeant des applications Android, j'ai parfois vu des applications pour armeabi-v7a y x86 l'architecture.

J'ai lu quelques références pour armeabi-v7a y x86 architecture. Cependant, à la fin, je n'ai pas pu finaliser quels processeurs et architectures mobiles appartiennent à armeabi-v7a et qui appartiennent à x86 .

À ma connaissance, les processeurs mobiles couramment utilisés dans les appareils Android sont Snapdragon (par Qualcomm), MediaTek, Exynos (par Samsung) et Kirin (par Huawei). Presque toutes les marques expliquent les spécifications d'un smartphone et presque toutes les spécifications indiquent si le processeur mobile est 64 bits ou non. Dois-je en conclure que les processeurs mobiles 64 bits (Snapdragon, MediaTek, Exynos ou Kirin) appartiennent à l'architecture ARM ?

EDIT。
Pour comprendre quel SoC supporte armeabi-v7a Android apk et quel SoC supporte x86 Android apk, j'ai passé en revue les spécifications de MediaTek Helio X30 y Snapdragon 855 . La spécification du Helio X30 dit qu'il supporte le dual-core ARM Cortex-A73 et le quad-core ARM Cortex-A53 mais ARM n'est mentionné nulle part dans la spécification du Snapdragon 855. Donc, dois-je en conclure que l'Helio X30 va supporter armeabi-v7a Les applications Android et le Snapdragon 855 ne seront pas pris en charge armeabi-v7a des applications ?

Veuillez clarifier mes confusions.

11voto

Irfan Latif Points 16863

Voici mes notes résumées incomplètes sur le sujet, mais suffisantes pour répondre à votre question.

JEU D'INSTRUCTIONS :

Les processeurs sont constitués de matrices de semi-conducteurs, généralement du silicium monocristallin de qualité électronique. Ils ne connaissent pas l'anglais ou toute autre langue humaine, ils comprennent seulement 0 y 1 . Le concepteur du processeur nous indique donc dans quelle séquence de zéros et de uns nous pouvons donner des instructions à ce processeur spécifique. Ce langage numérique d'instructions est normalisé comme suit Machine Language et l'ensemble des instructions machine est appelé Instruction Set . Un processeur ne peut agir que sur un ou plusieurs types spécifiques de jeu d'instructions.
Les jeux d'instructions peuvent être de 8/16/32/64 bits (définissant le nombre d'instructions qu'un processeur peut traiter à la fois), les deux derniers étant les plus courants de nos jours.

LES LANGAGES DE BAS NIVEAU :

Mais écrire le code du programme (instructions) directement en langage machine (le fichier exécutable) est presque impossible car il faudra des années pour écrire et déboguer un programme de taille raisonnable (que nous pouvons écrire en quelques heures de nos jours). Ainsi, pour mettre les programmeurs à l'aise, le langage d'assemblage a été développé, toujours un langage spécifique au processeur mais relativement facile à comprendre. Le code écrit en langage d'assemblage est converti en code machine par Assembler - un programme écrit en langage machine. Ces deux langages sont appelés langages de bas niveau.

LES LANGAGES DE HAUT NIVEAU :

Pour réduire encore l'effort humain de communication avec le matériel, des langages de haut niveau ont été développés, qui ne sont pas liés à un jeu d'instructions spécifique (désignant une architecture spécifique). Ils sont identiques aux langages humains, donc faciles à écrire, à comprendre, à déboguer et à appliquer à de multiples architectures. Le code écrit en langage de haut niveau est converti en langage de bas niveau par Compiler - un programme écrit dans un langage de bas niveau. L'un des langages de haut niveau les plus couramment utilisés est le C. Mais parfois, le code n'est pas précompilé en code machine, mais directement exécuté (ou compilé en cours d'exécution) par Interpreter . Java est l'un de ces "écrire une fois, courir partout" (WORA) qui est compilé en byte-code et ensuite interprété par Virtual Machine - à nouveau un programme compilé.

INTERFACE BINAIRE D'APPLICATION (ABI) :

Étant donné qu'un programme (code) indépendant de l'architecture peut être converti en code dépendant de l'architecture pour n'importe quel processeur, il est du devoir du compilateur de prendre en charge toutes les exigences d'une architecture spécifique. C'est ce que définit l'interface binaire d'application (ABI). En termes simples, une ABI représente une ou plusieurs architectures spécifiques. Pour en savoir plus sur les ABI embarquées, il faut connaître les étapes de l'assemblage et de la compilation, le code objet, le format exécutable et lisible (ELF), la liaison statique (archivage) et dynamique des bibliothèques, etc.

Venons-en maintenant à votre question :

QUELS SONT x86 ET ARM ?

x86 est une famille de jeux d'instructions, principalement développée et fabriquée par Intel et AMD. ARM est une autre famille, conçue par une seule entité ARM Holdings et dont la licence a été accordée à de nombreux fabricants de solutions embarquées, dont Qualcomm, Mediatek, Samsung et Huawei. Snapdragon, Exynos et Kirin sont leurs noms de marque. Ils ne sont pas des fabricants de processeurs mais ils ont des licences pour inclure les processeurs ARM dans leurs propres circuits System on Chip (SoC).

Qu'est-ce que le SoC ?

Un système sur puce (SoC) est un petit circuit qui comprend des processeurs ainsi que d'autres composants tels que le GPU, la RAM, la mémoire Flash/eMMC (équivalent du disque dur ou du disque SSD), les modules WiFi et Bluetooth, la connectivité USB, les ports série UART, JTAG (un protocole de communication série de très bas niveau), le GPS, les modems (pour la connectivité cellulaire) et éventuellement d'autres.

ARM ABIs :

Bien que la majeure partie des applications Android soient écrites en Java, il est possible de programmer dans des langages natifs comme le C et le C++, qui doivent être compilés. Android fournit son propre kit de développement natif ( NDK ) comprenant (des bibliothèques, des fichiers d'en-tête et) un compilateur pouvant compiler du code pour plusieurs ABI, notamment armeabi-v7a ( armhf dans la communauté Linux) et x86 .

L'application Android (Java) elle-même n'est pas spécifique à une architecture. Au cours du processus de création de l'application, le SDK Android convertit la source Java en bytecode ( .class ) et le compile ensuite en D alvik EX écutable ( .dex ) qui est emballé avec .apk fichiers. Ce bytecode Dalvik est interprété et exécuté dans une instance séparée de Dalvik Virtual Machine / ART pour chaque application par un processus nommé Zygote . Ou bien il peut être compilé de façon permanente en code machine natif ( .odex o .oat ) en fonction de l'architecture de l'appareil lors de l'installation de l'application (ou de l'abonnement à l'application). plus tard ). Mais si le fichier apk (zip) contient en plus des binaires/bibliothèques ELF, ceux-ci sont spécifiques à l'architecture. Les développeurs incluent généralement des bibliothèques natives pour plusieurs architectures dans leurs applications.

Applications/programmes/binaires/exécutables/bibliothèques natifs construits avec des suites de compilateurs ciblant ARM Embedded ABI v7a ( armeabi-v7a ) peut être exécuté sur Application profile of 7th version of ARM processors ( Armv7-A ).
Code compilé avec chaînes d'outils fournis par d'autres fournisseurs, ciblant la même architecture (bien qu'avec des noms ABI différents) devraient également fonctionner sur les appareils Android.

32 BITS CONTRE 64 BITS :

Le processeur ARM peut être de 32 ou 64 bits. Cela dépend des fabricants de SoC et de ce qu'ils veulent construire avec leur système embarqué, par exemple le Snapdragon peut être 32 ou 64 bits. Les processeurs ARM 32 bits ont été améliorés en termes de performances et de nouvelles capacités ont été ajoutées de la version 2 à la version 7. Le support 64 bits a été introduit dans la version ARMv8.

Pour savoir si un appareil est 32 ou 64 bits, vous devez vérifier les spécifications de son SoC, puis de son processeur. Par exemple, le SoC de Redmi Note 4 es Qualcomm Snapdragon 625 (MSM 8953) qui contient un processeur Cortex-A53 . Il est évident que Spécifications techniques du Cortex-53 que c'est basé sur ARMv8 qui peut traiter 2 types de jeux d'instructions : aarch64 (que le système Android arm64-v8a ABI utilise) et aarch32 (que le système Android armeabi-v7a ABI utilise, c'est-à-dire qu'il est rétrocompatible avec ARMv7 ).

Ainsi, il peut exécuter des binaires/bibliothèques compilés pour ces deux ABI, mais pas pour x86 o armeabi (appelé armel dans la communauté Linux ; qui a ciblé l'architecture ARMv5/v6 et a été supprimé en NDK r17 ).


RELATION : Un appareil matériel 64 bits peut-il faire fonctionner une version 32 bits d'Android ?

3voto

pr0nin Points 353

Le nombre de périphériques matériels qui utilisent x86 n'a jamais été très élevé. Il y a quelques années, Intel avait quelques processeurs x86 (Intel Atom) qui étaient utilisés dans certaines tablettes Android (par exemple Samsung Galaxy Tab 10.3).

Cependant, ces tablettes n'ont jamais atteint un volume élevé sur le marché. Et je ne suis pas sûr qu'il existe un Smartphone ou une tablette sur le marché qui utilise encore un CPU x86.

Cependant, il existe un cas d'utilisation très courant où vous rencontrez un "appareil Android x86" : L'émulateur Android.

Comme le PC qui exécute l'émulateur utilise généralement un CPU x86, les émulateurs qui exécutent une image x86 (au lieu d'une image basée sur ARMv7 ou ARMv8/ARM64) peuvent utiliser les techniques de virtualisation intégrées au CPU, ce qui se traduit par une vitesse beaucoup plus élevée.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X