Post on 11-Jun-2015
description
Boot ROMA. 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.
BootloaderO 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, console)
BootloaderA. 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.
BootloaderC. 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
opções de segurança.
BootloaderD. 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.
KernelA. 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.
InitMecanismo 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”.
Tratamento do arquivo de configuração init.rc
InitNo 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
umes de mídia no sistema de arquivos.
Initadbd: 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 (*.apk).
InitO 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>
InitService: 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> <option>
InitOptions e Commands: Os options e commands são usados na declaração de Services e Actions, respectivamente.
InitA. 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
inicialização e iniciar os processos de serviço do sistema.
ZygoteO 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 frameworks/base/cmds/app_process/app_main.cpp.
ZygoteO Zygote é responsável basicamente por duas operações:
1) Prover uma infraestrutura para a execução de aplicações Java.
2) Iniciar o System Server, que gerencia a base dos serviços do sistema operacional Android.
System ServerO 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 ServerServiç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 ServerAo final da execução do system server, o Activity Manager 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
ACTION_BOOT_COMPLETED é lançado.