Proceso de inicio en Android

La gran mayoría que trastea profesionalmente con un ordenador conoce como un PC se inicia internamente: inicio de dispositivos, carga de sector de arranque, kernel del SSOO, etcetc. Recuerdo que eso se estudiaba en primero de carrera, tiempo atrás….

Pero, y Android? Es un sistema operativo como cualquier otro y tiene igualmente su proceso, pero es algo que no está tan extendido, por su poco tiempo en este mundo. Voy a describir brevemente los pasos que todo cacharrito Android comparte cuando éste se inicia.

1. Boot ROM

Cuando se enciende el dispositivo, lo primero que se pone en marcha es la CPU. Ésta tiene hardcoreada la dirección de memoria donde se encuentra el código de inicio, o boot ROM. Lo que hace este código es inicializar el resto de hardware del dispositivo. Hecho esto, busca la partición de arranque, que suele estar en la memoria NAND, y copia el boot loader en la RAM.rom

2. Boot Loader

La CPU empieza a ejecutar entonces el Boot Loader, o SPL. Este código se asemeja en funcionalidad al GRUB de Linux, ya que su función es la de lanzar el sistema operativo Android o dar la opción de elegir una alternativa, como el fastboot, recovery, o una imagen custom creada por la comunidad.boot

3. Kernel

La carga del kernel de Android es igual que cualquier sistema Linux. Inicializa memoria, dispositivos, schedulers, y acceso a la partición raiz para lanzar el proceso init.kernel

4. Init

Al igual que en un sistema Linux, el proceso init se encarga de lanzar los scripts de inicio contenidos en /etc/rcX.d. En este caso el script que se ejecuta es init.rc que se encuentra en raiz, aunque el fichero o la ubicación puede variar dependiendo del dispositivo. Contiene toda la configuración inicial del sistema. Desde el punto de vista del analista forense, es la parte de inicio más suculenta, por lo que si os pica la curiosidad, os recomiendo que busqueis este archivo y le echeis un ojo. Necesitareis eso si un dispositivo rooteado y un explorador de ficheros que permita navegar por directorios con permisos de root.init

5. Zygote

Este servicio lanzado por Init es el encargado de inicializar las máquinas virtuales Dalvik. Básicamente su función es crear máquinas virtuales por cada proceso nuevo que se inicia.zygote

6. System Server

Iniciado el servicio Zygote, el sistema ya puede empezar a lanzar servicios básicos, como la telefonía, teclado, y otros agentes y servicios de Google. Finalizado el inicio de estos servicios, el sistema está listo para interactuar con el usuario.systemserver

Fuentes:

social