19 votes

Pourquoi y a-t-il autant de noyaux Android différents ?

Android n'est-il pas un noyau commun utilisé sur tous les appareils ? Par exemple, CentOS s'installera sur Dell, HP, et une variété d'autres matériels. Bien sûr, il y a des modules différents, 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 tel ou tel pilote. S'ils utilisaient le même noyau, les pilotes ne fonctionneraient-ils pas avec lui ? Je vois aussi un million de types de noyaux différents pour différents appareils.

26voto

Nick Pierpoint Points 7976

Les noyaux varient d'un fabricant à l'autre. Un grand nombre de ces noyaux proviennent de la ligne de sources de noyaux de base que l'on trouve sur la CAF, ce que ces fabricants font, c'est prendre ces sources de base, les modifier pour les adapter à la carte/au chipset utilisé, et implémenter leurs propres pilotes.

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

La source d'un noyau provenant par exemple de HTC ne fonctionnera pas sur un Samsung, et vice versa.

Les fabricants sont libres de sélectionner ou de sous-traiter les différents éléments qui sont incorporés dans le circuit imprimé. Il n'y a pas de règles strictes ou rapides. D'où le grand nombre de piratages/modifications pour que le noyau fonctionne correctement.

Il ne faut jamais comparer les noyaux des distributions Linux de bureau avec les noyaux PCI, PCI-Express, SATA, VGA, SVGA, USB, Ethernet, car ils sont totalement différents. Les principales différences avec CentOS et avec le noyau Linux d'Android sont les suivantes TOUTES Les pilotes sont compilés sous forme de modules ou intégrés, ce qui fait que n'importe quelle distribution Linux fonctionnera tout simplement "en l'état". Encore une fois, avec les distributions Linux de bureau, vous avez une architecture - x86 - et donc un noyau Linux provenant d'un PC Dell, par exemple, peut fonctionner sur un Lenovo. fourni par que les pilotes standard sont compilés.

N'oubliez pas, dans le monde Android, il y a des variations du noyau construit pour des chipsets ARM spécifiques, comme ARMv6, ARMv7, il y a TEGRA, il y a EXYNOS, et ils sont binairement incompatibles entre eux. Donc 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 d'entre eux (Zte en est un très bon exemple) publient des sources massacrées qui peuvent être compilées à partir des sources, mais ne parviennent pas à démarrer en raison de l'absence d'un pilote qui n'est pas couvert par la licence GPLv2 ou GPLv3. C'est le problème, c'est pourquoi certains hackers doivent parcourir github à la recherche d'indices ; certains fabricants, si ce n'est tous, s'y conforment. L'incarnation actuelle de la source de Zte est censée être 2.6.35.7, mais en réalité, il s'agit de la base source 2.6.32.9 avec beaucoup de modifications, ce qui ne représente pas la véritable source du noyau pour 2.6.35.7 !

C'est à ce moment-là que les fabricants doivent publier leurs sources respectives, non pas simplement pour être en conformité avec la GPLv2 ou plus tard, mais plutôt pour que la communauté puisse les modifier, par exemple en ajoutant des capacités d'overclocking.

Il y a donc du piratage en coulisses et beaucoup de manipulations avec les pilotes pour essayer de les faire fonctionner, et ce n'est pas facile à déboguer non plus Certains pilotes peuvent faire l'objet de licences croisées, MAIS ne peut être distribué en fonction de la clause et des conditions telles que négociées.

Heureusement, tout cela a changé avec la ligne de sources du noyau 3.x.x., car les pilotes Android sont maintenant intégrés dans les sources principales. Mais il y a un hic !

Essayez de porter un noyau 3.x.x. sur un combiné existant qui a environ 12-18 mois ; il n'y a aucune chance que cela fonctionne, c'est parce que, parmi les différents facteurs, les sources 3.x.x sont très différentes des sources 2.6.x et il faudrait beaucoup de piratage pour les faire fonctionner - je devrais le savoir, j'ai essayé de porter les sources 2.6.38.6 pour le Zte Blade et j'ai échoué.

De même, la dernière version du noyau 3.0.1 - en travaillant sur le projet ics4blade sur Modaco, j'ai fait de nombreuses tentatives de portage, mais c'est dû au simple fait que Zte a fait un très mauvais usage de la source, ce qui a rendu le portage presque impossible.

0 votes

D'après ce que vous dites, les pilotes ne sont pas tous compilés comme des modules mais intégrés dans le 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 la faire fonctionner parce qu'il n'y a peut-être pas de modules XXX. Les pilotes doivent être traqués, piratés (éventuellement), et recompilés.

2 votes

Correct, et aussi, les pilotes sont différents, donc un pilote pour l'écran tactile d'un combiné ne fonctionnera pas sur un autre combiné qui utilise un écran tactile différent. Zte a sorti une version du pilote Wifi Atheros pour le Blade, et le pilote ne fonctionnera pas à moins que le noyau soit de la version 2.6.35.7, toute autre version, le wifi s'arrête - c'est pour démontrer la dépendance d'une manière plutôt pirate et cassée de faire des choses comme ça.

13voto

sarego Points 1150

L'architecture du PC est construite autour de pièces de base parce qu'il s'agissait à l'origine de clones d'un produit spécifique, le PC IBM, qui ont été spécifiquement conçus pour être compatibles avec lui, et donc entre eux. 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 à l'exiger, même si la technologie a évolué. Vous pouvez mettre une carte PCI Express dans n'importe quel PC moderne tout comme vous pouviez mettre une carte ISA dans n'importe quel clone de PC à l'époque.

Les smartphones n'ont pas cette histoire. 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 prennent des pièces d'un téléphone pour les mettre dans un autre, et les ingénieurs n'ont donc pas à tenir compte de l'interopérabilité lorsqu'ils conçoivent leurs produits.

Même dans l'arbre des sources du noyau Linux, il y a beaucoup de fragmentation dans les pilotes pour les plateformes ARM . Comme les téléphones sont généralement conçus à huis clos, les équipes d'ingénieurs des différentes entreprises finissent souvent par faire un travail en double, en concevant essentiellement le même matériel que leurs concurrents, puis en écrivant leurs propres pilotes pour leur propre conception. Une fois qu'elles ont terminé et que le produit est commercialisé, elles passent directement au suivant ; cela ne vaut pas la peine de revenir en arrière et de remanier les pilotes des produits précédents ou de les fusionner avec ceux des concurrents. Le résultat est une pléthore de pilotes uniques pour des appareils qui sont similaires mais pas tout à fait identiques.

En outre, les smartphones sont généralement basés sur SOC qui ont un matériel spécialisé intégré au processeur. Pour certains d'entre eux, il ne s'agit pas seulement de savoir s'il faut charger ou non un certain pilote ; le noyau dans son ensemble peut devoir être construit avec des options de configuration spéciales pour fonctionner sur un SOC, qui sont incompatibles avec les options spéciales nécessaires pour fonctionner sur un autre SOC.

5voto

Thej Points 655

La raison en est que le noyau Linux d'Android n'est généralement pas compilé sur Android lui-même, mais doit être compilé à partir d'un autre ordinateur. Cela pose plusieurs 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 l'espace limité (alors que la plupart des distros de bureau ont simplement tous les pilotes compilés dans des modules chargés à partir d'un initramfs). Par conséquent, les développeurs ont dû déterminer les pilotes à empaqueter pour chaque périphérique particulier. De plus, chaque pilote possède généralement une douzaine d'options de compilation permettant d'activer diverses 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, ou ne maintiennent pas à jour la copie amont des pilotes). Comme les fabricants ne publient pas leurs configurations, il arrive souvent que la configuration légèrement différente utilisée par le développeur expose des bogues subtils qui n'existent pas avec la configuration du fabricant.

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

Un autre problème est l'incompatibilité binaire. Il y a deux causes d'incompatibilité binaire, la première 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 (application binary interface). Si les fabricants n'ouvrent pas leurs pilotes, les développeurs doivent utiliser le module compilé à partir d'une ROM de base. Cela soulève divers problèmes d'incompatibilité ABI, puisque les modules du pilote ont eux-mêmes des attentes spécifiques concernant, par exemple, la disposition des structures et les paramètres d'appel des fonctions, 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û faire de l'ingénierie inverse du pilote pour créer un fichier d'en-tête ou les fichiers d'en-tête dans l'arbre des sources peuvent avoir été fortement modifiés depuis la compilation du pilote et les développeurs ont dû revenir sur ces modifications pour rendre le noyau compatible à nouveau avec l'ABI du pilote. Contrairement à la compilation à partir des sources, la compilation d'un pilote binaire ne déclenchera pas d'erreur de compilation en raison d'une incompatibilité de paramètres de fonction ou de structures, mais fera tout simplement planter votre appareil pendant son fonctionnement, et le débogage de ces problèmes est très difficile. Dans le monde du PC, nous sommes familiers avec le désordre que nVidia et ATi nous ont laissé, en raison de leur insistance à publier des pilotes uniquement binaires, imaginez avoir ce désordre pour tous les pilotes, imaginez le "fun" que cela crée.

Le matériel PC est aussi généralement mieux standardisé que le matériel mobile, la plupart des PC n'ont pas besoin de pilotes pour les vibrateurs, l'accéléromètre, le gyroscope, la radio 3G, le capteur de proximité, le NFC, etc. Même sur les appareils qui disposent de la 3G, celle-ci se connecte généralement au matériel à l'aide de connexions standardisées telles que PCMCIA ou PCI-E.

4voto

Bryan Denny Points 21817

Les pilotes Well.... et le noyau ne sont pas exactement les mêmes.

Les pilotes sont ceux qui contrôlent l'antenne cellulaire, le wifi, le bluetooth, etc. Il s'agit de pilotes propriétaires car le fabricant doit créer un moyen (les pilotes) de communiquer avec son matériel.

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

Tous les millions de noyaux que vous voyez ne sont pas vraiment très différents les uns des autres. En général, un programmeur ou un modificateur prend le noyau existant et le "modifie" pour essayer d'en tirer des performances différentes. On peut dire qu'il ne fait qu'ajuster (pour la plupart) la "configuration" du noyau. Dans le monde Android, ces moddeurs cherchent principalement à : surclocker ou underclocker l'horloge du CPU (important pour économiser l'autonomie de la batterie ou pour essayer d'exécuter les applications les plus intensives en processus comme les émulateurs de jeux vidéo ou la lecture vidéo), ou ils cherchent à sous-volter (pour économiser l'autonomie de la batterie en faisant fonctionner votre CPU en dehors de ses paramètres d'origine... ce qui varie en effet d'une personne à l'autre parce qu'il n'y a pas deux CPU qui sont fabriqués à 100% exactement de la même manière).

0 votes

Ce que je veux dire, c'est que, 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 ?

0 votes

Il n'existe pas de pilote "standard" pour les périphériques. Chaque appareil a des pilotes différents pour le matériel comme la caméra, la puce wifi, etc. Et ils sont généralement fermés, ce qui oblige les utilisateurs à "pirater" les pilotes pour les faire fonctionner.

1 votes

Oui mais pourquoi le besoin de pirater. S'ils fonctionnent avec le noyau OEM, pourquoi ne pas simplement déplacer les fichiers pilotes et les bibliothèques associées vers l'installation du mod Cyanogen puisque le noyau est fondamentalement le même.

2voto

R C E Mortimer Points 31

Les téléphones et autres appareils embarqués ne disposent pas d'un BIOS pour fournir une abstraction entre le matériel et le système d'exploitation, de sorte que le système d'exploitation est compilé pour le matériel sur lequel il est déployé. Même les appareils utilisant le même jeu de puces peuvent être configurés de différentes manières (en utilisant des bus de communication alternatifs, etc.). \the Le résultat est que le noyau doit être compilé en conséquence. Comme on ne s'attend pas à des changements dans le matériel, aucune détection du matériel n'est effectuée. Le noyau démarre plus rapidement et est donc plus petit - c'est un principe standard d'un système d'exploitation embarqué.

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