KIRGO Posté(e) 30 mars 2013 Share Posté(e) 30 mars 2013 (modifié) Le processus de démarrage d’Android depuis la mise sous tension Ceci est la traduction sans prétention d’un article de l’excellent site www.xdinandroid.com, le blog android repris par certaines personnes de xdin, qui s’appelait auparavant www.androidenea.com Cet article date du 11 Juin 2009, mais garde une certaine actualité, même si certaines mises à jour sont certainement à faire, ce que j’espère pouvoir réaliser grâce à vos réactions ;-) Source : http://www.androiden...m-power-on.html Ou : http://xdinandroid.c...m-power-on.html Je vous conseille également la lecture de cet article qui apporte quelques informations complémentaires: http://www.kpbird.co...ce-process.html Ces informations sont à prendre avec précaution, pour deux raisons: 1. il est difficile de recouper les informations sur ce sujet car peu d'articles existent sur le Web et 2. la source date un peu, même si je la complète avec les informations que je glane par-ci par-là. Bonne lecture! Voici en résumé les étapes de boot d'android: 1. Mise sous tension et code d’exécution « boot ROM » Au démarrage, le CPU sera dans un état particulier où aucune initialisation n’aura été réalisée. Les horloges internes ne seront pas initialisées, et la seule mémoire disponible sera la RAM interne (internal RAM). Une fois l'alimentation stabilisée, le processus d’exécution va démarrer le « Boot Rom code ». C’est ce petit morceau de code qui est écrit en dur dans le CPU ASIC (Application-specific integrated circuit ndt). Pour plus d’informations sur le Boot ROM et ses configurations, se référer au manuel du constructeur du CPU. A. Le boot ROM code va détecter le NAND (la mémoire interne du téléphone) en utilisant un registre système qui est lié à des spécificités physiques de l’ASIC. Cela permet de déterminer où trouver le "first stage" du bootloader. B. Une fois que la séquence du boot media est établie, le boot ROM va essayer de charger le first stage du boot loader dans la RAM interne. Une fois que le boot loader est en place, le boot ROM code va passer la main et son exécution continue dans le bootloader. :excl: ndt: Le Boot ROM code peut être comparé avec beaucoup de prudence au BIOS sur un ordinateur (BIOS: situé dans la ROM de la carte mère de l'ordinateur ; Boot ROM code: situé dans une mémoire ROM intégrée au CPU). On lit également souvent que le bootloader sous android est équivalent au "BIOS setup" des ordinateurs, ce n'est pas tout à fait exact, car le BIOS n'a jamais eu pour fonction de monter un système d'exploitation et de le lancer, c'est toujours un "loader" qui effectue cette tâche. Je retiendrais personnellement qu'il n'y a pas d'équivalent au "BIOS setup" d'un ordinateur pour un téléphone android. 2. Le bootloader Le bootloader est un programme spécial séparé du kernel Linux, et qui est utilisé pour démarrer la mémoire RAM externe (initial memories) et charger le kernel dans la RAM. Sur des systèmes comme les ordinateurs, les boot loaders sont des programmes comme GRUB pour Linux, ou Windows loader pour Windows, mais pour les système Linux embarqués, uBoot est souvent le bootloader de prédilection. Pour android, les fabricants utilisent souvent leurs propres bootloaders propriétaires. La liste des choses requises par le bootloader pour un linux tournant sur un système ARM peut être trouvé dans le document Booting sous /Documentation/arm dans l’arborescence du code source du kernel. A. Le first stage du boot loader va détecter et mettre en place la mémoire vive (RAM) externe B. Une fois que la RAM externe est disponible et que le système est prêt à lancer quelque chose de plus important, le first stage va charger le « main boot loader » et le placer dans la RAM externe. C. Le second stage du boot loader est le premier « gros » programme qui va être lancé. Il peut contenir du code pour initialiser des fichiers systèmes, de la mémoire additionnel, des pilotes réseaux et d’autres choses. Sur un mobile, il peut également être chargé de lancer le code pour le modem CPU et initialiser des protections bas-niveau de la mémoire (low level memory protections) et des options de sécurité. D. Une fois que le boot loader en a fini avec ces tâches spécifiques, il va chercher un kernel Linux à lancer. Il va le lancer depuis le boot media (ou depuis d’autres sources dépendant de la configuration du système) et le placer dans la RAM. Il va également placer d’autres paramètres de démarrage dans la mémoire, pour que le kernel puisse les lire quand il démarre. E. Une fois que le bootloader a terminé, il va passer la main au noyau Linux, habituellement en effectuant quelques opérations de décompression. Le kernel assure alors la responsabilité du système. :excl: ndt: Le bootloader ne faisant pas parti du système android, chaque constructeur peut utiliser le bootloader qu'il souhaite: soit un bootloader open source comme Uboot, redboot, qi bootloader ; soit un bootloader de leur cru. Ainsi, chez HTC, le bootloader utilisé sur le Legend, Desire, One... est HBoot. Voici des photos de différents "fastboot mode", une interface à laquelle vous amène le bootloader (suite à un démarrage avec une combinaison de touches spéciale, comme par exemple POWER + VOL_DOWN), et qui permet notamment de flasher un nouveau recovery. On peut y lire la version du bootloader utilisé: celui du nexus S, du nexus 4, et le Hboot du HTC wildfire , On peut ainsi dire que le fastboot mode est le "boot manager", tandis que le boot loader est comme son nom l'indique un boot loader. Il ne possède donc pas forcément d'interface utilisateur. 3. Le noyau Linux Le noyau Linux démarre sous Android de façon similaire aux autres systèmes. Il va initialiser tout ce dont il a besoin pour que le système fonctionne : les controlleurs d’interruptions, les protections de mémoire, le cache et le scheduling. A. Une fois que les unités de gestion de la mémoire et le cache ont été initialisés, le système va être capable d’utiliser la mémoire virtuelle et de lancer des processus utilisateur. B. Le noyau va chercher dans la racine du file system le « init process » (/system/core/init dans le code source d'android, une fois compilé il se trouve par exemple à la racine du NAND pour le nexus 4) et le lancer comme étant le tout premier processus utilisateur. 4. Le processus « init » (init process) Le init process est le père de tous les processus systèmes. Tous les autres processus dans le système vont être lancés par ce processus ou l’un de ses descendants. A. L’init process dans Android va chercher un fichier appelé init.rc. Il s’agit d’un script qui décrit les services du système, le fil system et les autres paramètres qui ont besoin d’être lancés. Le script init.rc est placé à la racine (màj du traducteur). B. Le processus init va analyser le script d’initialisation et lancer les processus de service système. 5. Zygote et Dalvik Le Zygote est lancé par le processus init et va juste basiquement démarrer l’exécution et initialiser la machine virtuelle de Dalvik. 6. Le serveur système (system server) Le system server est le premier composant java qui va tourner sur le système. Il va démarrer tous les services Android comme le telephony manager et le bluetooth. Le démarrage de chaque service est actuellement inscrit directement dans le run method du system server. Le code source du système server peut être trouvé dans le fichier frameworks/base/services/java/com/android/server/SystemServer.java du code source d'android (aosp) 7. Boot completed Une fois que le system server est lancé et fonctionnel, et que le démarrage du système est terminé, un signal (une action) standard est broadcasté, appelé ACTION_BOOT_COMPLETED. Modifié 1 avril 2013 par KIRGO Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
rubixcube Posté(e) 30 mars 2013 Share Posté(e) 30 mars 2013 je ne crois pas que ce soit la bonne place pour ce genre de posts... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
indian65 Posté(e) 30 mars 2013 Share Posté(e) 30 mars 2013 Un peu de pédagogie ne fait pas de mal Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
KIRGO Posté(e) 30 mars 2013 Auteur Share Posté(e) 30 mars 2013 Bonjour, Peut-être que la section développement est effectivement un peu plus adaptée, mais sinon ça reste de l'information générale sur le fonctionnement d'android =) @micalement, KIRGO Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CocoNat's Posté(e) 30 mars 2013 Share Posté(e) 30 mars 2013 Qu'importe la bonne place je viens d'en prendre connaissance et c'est extrêmement intéressant ! Merci beaucoup ! :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Lannig Posté(e) 31 mars 2013 Share Posté(e) 31 mars 2013 (modifié) Je ne vois pas en quoi ce genre d'information pourrait n'être utile qu'aux développeurs. Elle est au contraire utile à connaître pour tous les esprits curieux de savoir ce qui se passe sous le capot. Et ça peut servir le jour où le téléphone ou la tablette ne démarre plus normalement. Merci de l'avoir traduit, quoique personnellement je préfère lire en V.O. Dommage en revanche qu'il fasse l'impasse totale sur l'initrd (le ramdisk qui est chargé depuis une image et monté comme filesystem root = / au démarrage du kernel). Je ne pense pas que ce soit une question de mise à jour car cela devait déjà fonctionner comme cela en 2009. C'est ce ramdisk qui contient init et les scripts de démarrage qu'init exécute. Le rôle de ces scripts est de : - vérifier et monter les filesystems (/system, /data, /cache...) - charger les modules kernel (= les pilotes, en gros) - configurer le hardware (écran, USB...) - lancer quelques process fondamentaux Suivant les variantes d'Android le ramdisk peut être concaténé au kernel (noyau) ou dans une partition séparée. Modifié 31 mars 2013 par Lannig 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
KIRGO Posté(e) 31 mars 2013 Auteur Share Posté(e) 31 mars 2013 Bonjour, Merci de ces précisions! Je rajouterai quelque chose sur initrd (je connais le principe sous linux, faisant un peu de linux embarqué) J'espère que cet article va devenir petit à petit plus personnel, plus "frandroid" ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.