Pourquoi y a-t-il tant de noyaux Android différents (réponse technique s'il vous plaît)


17

Android n'est-il pas un noyau commun utilisé sur tous les appareils? Par exemple, CentOS sera installé sur Dell, HP et une variété d'autres matériels. Bien sûr, il existe différents modules, mais c'est quand même CentOS.

Quelle est la raison pour laquelle CyanogenMod est toujours "cassé"? J'entends toujours dans les forums qu'ils travaillent sur le portage de ce pilote ou de ce pilote. S'ils utilisaient le même noyau, les pilotes ne fonctionneraient-ils pas simplement avec lui? Je vois également un million de types de noyaux différents pour différents appareils.

Réponses:


24

Les grains varient d'un fabricant à l'autre. Beaucoup de ces noyaux proviennent de la gamme de sources de noyau de stock pur trouvée sur CAF, ce que ces fabricants font est de prendre ces sources de stock, de les modifier en fonction de la carte / du chipset utilisé, également, d'implémenter leurs propres pilotes.

Regardez bien autour de vous, il y a des variations d'écrans tactiles, des variations de chipsets wifi, sans parler de l'accéléromètre, des capteurs, des batteries, de la boussole, du son, des graphismes.

Prendre une source de noyau par exemple HTC ne fonctionnera pas sur un Samsung, et vice versa.

Les fabricants sont libres de choisir parmi différents bits ou d'extraire des bits qui sont incorporés dans la carte de circuit imprimé. Il n'y a pas de règles strictes ou rapides impliquées. D'où beaucoup de piratages / modifications pour faire fonctionner correctement le noyau.

Vous ne devez jamais comparer avec les noyaux de distribution Linux de bureau dans lesquels il a PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet car ils sont un jeu de balle complètement différent. Les principales différences avec CentOS et avec le noyau Linux d'Android sont les suivantes: TOUS les pilotes sont compilés sous forme de modules ou intégrés, par conséquent, toute distribution Linux "fonctionnera tout simplement". Encore une fois, avec les distributions Linux de bureau - vous avez une architecture - x86, donc un noyau Linux provenant, par exemple, d'un PC Dell, peut fonctionner immédiatement sur un Lenovo à condition que les pilotes standard soient compilés.

N'oubliez pas que dans le monde Android, il existe des variantes du noyau conçu pour des chipsets ARM spécifiques, tels que ARMv6, ARMv7, il y a TEGRA, il y a EXYNOS et ils sont binaires incompatibles entre eux. Par conséquent, si un noyau est compilé pour TEGRA, oubliez-le, il ne fonctionnera pas sur ARMv7!

La raison pour laquelle certains noyaux sur Android semblent être "cassés" est due au fabricant. Certains (Zte est un très bon exemple) publient une source bouchée qui peut se compiler à partir de la source mais ne démarre pas en raison d'un pilote manquant qui n'est pas couvert par la licence GPLv2 ou GPLv3. C'est le problème, donc certains hackers doivent parcourir le github à la recherche d'indices; certains fabricants, sinon tous, s'y conforment. L'incarnation actuelle de la source de Zte est censée être 2.6.35.7, mais en réalité sa base de source 2.6.22.9 avec beaucoup de modifications ne représente donc pas la véritable source du noyau pour 2.6.35.7!

C'est là que les fabricants doivent publier leurs sources respectives, non seulement pour être conformes à la GPLv2 ou ultérieure, mais plutôt pour que la communauté puisse le modifier, comme l'ajout de capacités d'overclocking.

Par conséquent, il y a du piratage impliqué dans les coulisses et beaucoup de problèmes avec les pilotes qui essaient de le faire fonctionner, et ce n'est pas facile à déboguer non plus. Certains pilotes peuvent avoir des licences croisées, MAIS ne peuvent pas être distribués selon la clause et les conditions comme négocié.

Heureusement, tout a changé avec la ligne de sources du noyau 3.xx, car les pilotes Android sont désormais intégrés aux sources traditionnelles. Mais il y a un piège!

Essayez de porter un noyau 3.xx sur un combiné existant âgé d'environ 12 à 18 mois; Pas une chance de boule de neige en enfer cela fonctionnerait, c'est à cause des facteurs différents, les sources 3.xx sont très différentes de la source 2.6.x et prendraient beaucoup de piratage pour le faire fonctionner - je devrais savoir, j'ai essayé portage de la source 2.6.38.6 pour la lame Zte et échoué.

De même, la dernière version du noyau 3.0.1 - lorsque vous travaillez sur le projet ics4blade sur Modaco, a fait de nombreuses tentatives pour le porter, mais cela tient au simple fait que Zte a fait un très mauvais gâchis de la source, ce qui a rendu le portage presque impossible. .


Upvotes tout autour !!! Merci pour la réponse détaillée.
user974896

Vous êtes les bienvenus! Tout ce que vous devez savoir! : D
t0mm13b

D'après ce que vous dites, les pilotes ne sont pas tous compilés en modules mais intégrés au noyau lui-même, donc même si CM obtient un noyau fonctionnel sur un périphérique, il ne peut pas simplement "déplacer les modules XXX" vers la nouvelle version et le faire fonctionner car il peut ne pas y avoir XXX moduels. Les pilotes doivent être traqués, piratés (éventuellement) et recompilés.
user974896

2
Les pilotes sont également corrects et différents, donc un pilote pour l'écran tactile d'un combiné ne fonctionnera pas sur un autre combiné utilisant un écran tactile différent. En outre, un autre point clé à noter - certains pilotes dépendent de la version du noyau - Zte a sorti une version du pilote Atheros Wifi pour la lame, et le pilote ne fonctionnera que si le noyau est de la version 2.6.35.7, toute autre version, les pauses wifi - c'est pour démontrer la dépendance d'une manière plutôt hackish et cassée de faire des choses comme ça.
t0mm13b

12

L'architecture PC est construite autour de pièces de base car elle a commencé comme des clones d'un produit spécifique, le PC IBM, qui ont été spécifiquement conçus pour être compatibles avec lui, et donc les uns avec les autres. D'une manière générale, vous pouvez prendre un programme ou un périphérique d'un PC compatible et le mettre dans un autre, et vous attendre à ce qu'il fonctionne. Cette capacité est suffisamment utile pour que les gens continuent de l'exiger alors que la technologie évolue. Vous pouvez mettre une carte PCI Express dans n'importe quel PC moderne, tout comme vous pouviez alors mettre une carte ISA dans n'importe quel clone de PC.

Les smartphones n'ont pas un tel historique. Ils sont conçus comme des produits monolithiques, un système complet composé de matériel et de logiciels qui "fonctionnent" tels quels. On ne s'attend pas à ce que les gens retirent des pièces d'un téléphone et les mettent dans un autre, de sorte que les ingénieurs n'ont pas à prendre en compte l'interopérabilité lorsqu'ils conçoivent leurs produits.

Même dans l'arborescence des sources du noyau Linux, il y a beaucoup de fragmentation dans les pilotes pour les plates-formes ARM . Étant donné que les téléphones sont généralement conçus à huis clos, les équipes d'ingénierie de différentes entreprises finissent souvent par faire des travaux en double, concevant essentiellement le même matériel que leurs concurrents, puis écrivant leurs propres pilotes pour leur propre conception. Une fois qu'ils ont terminé et que le produit est sorti, ils passent directement au suivant; cela ne vaut pas la peine de revenir en arrière et de refaçonner les pilotes pour les produits passés ou de les fusionner avec les pilotes des concurrents. Le résultat est une pléthore de pilotes uniques pour des périphériques similaires mais pas tout à fait les mêmes.

De plus, les smartphones sont généralement basés sur des SOC dotés d'un matériel spécialisé intégré avec le processeur. Pour certains de ces éléments, il peut s’agir de plus que de charger ou non un certain pilote; le noyau dans son ensemble peut avoir besoin d'être construit avec des options de configuration spéciales pour s'exécuter sur un SOC, qui sont incompatibles avec les options spéciales nécessaires pour s'exécuter sur un autre SOC.


5

La raison en est que le noyau Linux d'Android n'est généralement pas compilé sur Android lui-même, mais qu'il a dû être compilé de manière croisée à partir d'un autre ordinateur. Cela provoque divers problèmes, car la configuration du périphérique n'est pas disponible au moment de la compilation et il n'est pas possible de compiler un noyau générique avec tous les pilotes en raison de la limitation de l'espace (alors que la plupart des distributions de bureau avaient simplement tous les pilotes compilés en modules chargés à partir d'un initramfs) . Les développeurs ont donc dû déterminer les pilotes à emballer pour chaque périphérique particulier. Non seulement cela, chaque pilote dispose généralement d'une douzaine d'options de temps de compilation pour basculer entre les différentes fonctionnalités du pilote, et les fabricants ne publient généralement pas leur configuration officielle (les pires contrevenants n'ouvrent même pas leurs pilotes en open source, ou ne les conservent pas en amont). copie des pilotes à jour).

La programmation des pilotes est beaucoup plus difficile que la programmation des applications, car il n'y a pas de noyau qui vous protège contre le matériel volage qui a des exigences de synchronisation en temps réel spécifiques et ainsi de suite, et cela signifie même que le fait d'avoir une caractéristique de performance différente peut faire manquer le pilote certains événements durs en temps réel du matériel; ces échecs peuvent apparaître sous forme de bogues ou de problèmes de performances.

Un autre problème est l'incompatibilité binaire. Il y a deux causes d'incompatibilité binaire, le premier est le type de CPU, qui a été bien couvert par t0mm13b, mais l'autre problème qui est plus pertinent pour le portage est l'incompatibilité ABI (interface binaire d'application). Si les fabricants n'ouvrent pas leurs pilotes, les développeurs ont dû utiliser le module compilé à partir d'une ROM stock. Cela soulève divers problèmes d'incompatibilité ABI, car les modules du pilote eux-mêmes ont des attentes spécifiques concernant, par exemple, la disposition des structures et les paramètres d'appel de fonction, et lorsque le noyau est compilé, il n'a pas le fichier d'en-tête pour décrire l'ABI au moment où le pilote est compilé, les développeurs ont donc dû procéder à une rétro-ingénierie du pilote pour créer un fichier d'en-tête ou les fichiers d'en-tête dans l'arborescence source pourraient avoir été fortement modifiés depuis la compilation du pilote et les développeurs ont dû annuler ces modifications pour rendre le noyau à nouveau compatible avec l'ABI du pilote. Contrairement à la compilation à partir de la source, la compilation pour le pilote binaire ne déclenchera pas d'erreur de compilation en raison d'une incompatibilité des paramètres de fonction ou d'une incompatibilité de structure, elle plantera simplement votre appareil pendant son fonctionnement, et le débogage de ces problèmes est très difficile. Dans le monde du PC, nous connaissons le désordre que nVidia et ATi nous ont laissé, en raison de leur insistance à libérer des pilotes uniquement binaires, imaginez avoir ce désordre pour tous les pilotes, imaginez le "plaisir" qu'il crée.

Le matériel PC est également généralement mieux standardisé que le matériel mobile, la plupart des PC n'ont pas besoin de pilotes pour vibrateurs, accéléromètre, gyroscope, radio 3G, capteur de proximité, NFC, etc. des connexions comme PCMCIA ou PCI-E.


4

Eh bien .... les pilotes et le noyau ne sont pas exactement les mêmes.

Les pilotes contrôlent l'antenne cellulaire, le wifi, le bluetooth, etc. Ce sont des pilotes propriétaires car le fabricant doit créer un moyen (les pilotes) de parler à leur matériel.

Le noyau est un niveau intermédiaire entre le système d'exploitation / l'application et les pilotes réels (ou CPU ou mémoire ou tout autre matériel). C'est ce qui permet à votre OS / applications de s'interfacer avec ces composants matériels.

Tous les millions de noyaux que vous voyez ne sont vraiment pas très différents les uns des autres. En règle générale, un programmeur / moddeur prendra le noyau existant et le "modifiera" pour essayer d'en tirer des performances différentes. Vous pouvez essentiellement dire qu'ils ajustent uniquement (pour la plupart) la "configuration" du noyau. Dans le monde Android, ces moddeurs cherchent principalement à: surcadencer ou sous-cadencer l'horloge du processeur (important pour économiser la batterie ou essayer d'exécuter la plupart des applications gourmandes en processus telles que les émulateurs de jeux vidéo ou la lecture vidéo), ou volts (pour économiser la batterie en exécutant votre CPU en dehors de ses paramètres d'origine ... ce qui varie en effet d'une personne à l'autre car il n'y a pas deux processeurs identiques à 100%).


Ce que je veux dire, par exemple, avec CyanogenMod, il y a toujours des plaintes concernant le wifi, le bluetooth, etc. qui ne fonctionnent pas. Pourquoi ces pilotes doivent-ils être "portés" sur CyanogenMod. Pourquoi ne peuvent-ils pas simplement prendre les pilotes d'origine, les copier sur l'appareil et les exécuter avec CyanogenMod
user974896

il n'existe pas de pilote "stock" pour les périphériques. Chaque appareil a des pilotes différents pour le matériel comme la caméra, la puce wifi, etc.
Ryan Conrad

1
Oui mais pourquoi la nécessité de pirater. S'ils fonctionnent avec le noyau OEM, pourquoi ne pouvez-vous pas simplement déplacer les fichiers du pilote et les bibliothèques associées vers l'installation du mod Cyanogen puisque le noyau est fondamentalement le même.
user974896

1

Les téléphones et autres systèmes intégrés n'ont pas de BIOS pour fournir une abstraction entre le matériel et le système d'exploitation.En conséquence, le système d'exploitation est compilé pour le matériel sur lequel il est déployé. Même les périphériques utilisant le même jeu de puces peuvent être configurés de différentes manières (en utilisant des bus de communication alternatifs, etc.) \ le résultat est que le noyau doit être compilé en conséquence. Comme il n'y a aucune attente de changements dans le matériel, aucune détection de matériel n'est effectuée. Le noyau démarre plus rapidement et est plus petit en conséquence - il s'agit d'un principe standard d'un système d'exploitation intégré


0

CentOS s'installe sur un matériel différent, mais,

  1. Ce sont tous des PC qui varient moins que les téléphones,
  2. Un noyau Ubuntu, un noyau Debian et un noyau élémentaire sont tous des sources de noyau différentes.

Quant à votre deuxième point, voir la ou les réponses publiées plus tôt.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.