Android Core
Felipe Silveira
Inicialização
Boot ROM Boot Loader Kernel Init Zygote System ServerBoot ROM
A. O código de ROM de inicialização irá detectar a partição de inicialização que contém o bootloader.
B. Uma vez que a partição de inicialização (que contém o boot) é identificada, o boot ROM irá carregar na memória RAM o código do bootloader (inteiro ou suas primeiras
instruções, dependendo da arquitetura) e é feito um "salto de execução" (jump) para a posição de memória onde se encontra o bootloader.
Bootloader
O bootloader é um programa especial, separado do kernel do Linux, que é usado para inicializar a memória e carregar o kernel para a RAM. É análogo a softwares como o GRUB.
init.s - Inicializa pilhas, coloca zero nos segmentos BSS
e invoca o método _main() em main.c
main.c - Inicializa hardware (relógios, placa, teclado,
Bootloader
A. O primeiro estágio do carregador de inicialização irá detectar e configurar a memória RAM externa.
B. Uma vez que a RAM externa esteja disponível e o sistema pronto a executar algo mais complexo o
bootloader irá carregar o "main bootloader" e colocá-lo na memória RAM externa.
Bootloader
C. O segundo estágio do carregador de inicialização é o primeiro grande programa que será executado. Este estágio do bootloader pode conter código para criar
sistemas de arquivos, memória adicional, suporte de rede e outras coisas. Em um telefone celular, também pode ser responsável por carregar o código para o "CPU modem" e pela criação de proteções de memória de baixo nível e
Bootloader
D. O próximo passo é encontrar a localização do kernel na mídia de inicialização (Boot media) e colocá-lo na
memória RAM. Ele também irá colocar alguns parâmetros de inicialização na memória para serem lidos pelo kernel.
E. Por fim, o bootloader irá executar um salto para o
kernel do Linux e o kernel assume a responsabilidade do sistema.
Kernel
A. Uma vez que as unidades de memory management e caches foram inicializados, o sistema será capaz de usar memória virtual e lançar processos no user space.
B. O kernel irá procurar no sistema de arquivos raiz pelo código do processo init (que se encontra em em
system/core/init) e lançá-lo como um processo no user space.
Init
Mecanismo de inicialização dos processos básicos do sistema.
A implementação do init encontra-se nos fontes do Android em “system/core/init/init.c”.
Init
No init.rc está configurada grande parte do restante da inicialização do sistema, incluindo a execução dos
serviços básicos do Android, dentre eles:
console: inicia o shell ash.
servicemanager: inicia o binder (responsável pela
comunicação entre os processos).
vold: volume daemon — controla a montagem de vol
Init
adbd: android debugger bridge daemon — servidor
para comunicação com o cliente adb.
media: inicia os servidores multimedia (áudio, vídeo,
etc).
bootsound: toca um som no boot, lendo um arquivo em
/system/media/audio/ui/boot.mp3.
installd: servidor de instalação de pacotes/aplicações (*.
Init
O init.rc é escrito na linguagem "Android Init Language", que é formada pelas estruturas:
Action: Actions representam sequências de comandos,
que são iniciados com a ocorrência de um trigger. A sintaxe é:
on <trigger>
<command> <command> <command>
Init
Service: Services são programas inicializados pelo init e
que podem ou não ser reiniciados quando , por algum motivo, são finalizados. Sintaxe:
service <name> <pathname> [ <argument> ]* <option>
Init
Options e Commands: Os options e commands são
usados na declaração de Services e Actions, respectivamente.
Init
A. O processo init no Android irá procurar um arquivo chamado init.rc. Ele é um script que descreve os serviços do sistema, o sistema de arquivos e outros parâmetros que precisam ser configurados.
B. O processo init irá então analisar o script de
Zygote
O zygote é o pai de todos os processos Java. Tudo que roda em Java é criado por este processo, que instancia uma máquina virtual Dalvik para executar um processo ou serviço Java.
Ele esta implementado em C++, e seu código-fonte encontra-se em
Zygote
O Zygote é responsável basicamente por duas operações:
1) Prover uma infraestrutura para a execução de apli cações Java.
2) Iniciar o System Server, que gerencia a base dos serviços do sistema operacional Android.
System Server
O system server é o primeiro componente Java a rodar no sistema. Ele vai iniciar todos os serviços Android, como o Telephony Manager e o bluetooth.
Localizado em
frameworks/base/services/java/com/android/server/Syste mServer.java.
System Server
Serviços inicializados pelo system server:
●Power Manager ●Activity Manager ●Telephony Registry ●Package Manager ●Context Manager
●System Context Providers ●Battery Service ●Alarm Manager ●Sensor Service ●Window Manager ●Bluetooth Service ●Mount Service ●...
System Server
Ao final da execução do system server, o Activity Man
ager inicia alguns processos básicos, dentre eles o com. android.launcher, que é a aplicação responsável pela
interface gráfica padrão do Android.
Após a execução do System Service, a inicialização é considerada finalizada e e broadcast