27
Android Core Felipe Silveira felipesilveira.com.br Aula 2

Android Core Aula 2: Inicialização de um sistema Android

Embed Size (px)

DESCRIPTION

Segunda aula do curso "Android Core" ministrada no INATEL em 2013. Aprenda mais sobre cada fase de inicialização de um sistema android: Boot ROM, Bootloader, Kernel, Init.rc, Zygote, System Server e o fluxo de chamadas de cada um destes componentes.

Citation preview

Android Core

Felipe Silveirafelipesilveira.com.br Aula 2

Inicialização

Inicialização

Boot ROM

Boot Loader

Kernel

Init

Zygote

System Server

Boot ROM

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)

Bootloader

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.

Kernel

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.

InitMecan­ismo de ini­cial­iza­ção dos proces­sos bási­cos do

sistema.

A imple­men­tação do init encontra-se nos fontes do Android em “system/core/init/init.c”.

Tratamento do arquivo de con­fig­u­ração init.rc

InitNo init.rc está con­fig­u­rada grande parte do restante da

ini­cial­iza­ção do sis­tema, incluindo a exe­cução dos

serviços bási­cos do Android, den­tre eles:

con­sole: ini­cia o shell ash.

ser­vice­m­an­ager: ini­cia o binder (respon­sável pela

comu­ni­cação entre os processos).

vold: vol­ume dae­mon — con­trola a mon­tagem de vol­

umes de mídia no sis­tema de arquivos.

Initadbd: android debug­ger bridge dae­mon — servi­dor para comu­ni­cação com o cliente adb.media: ini­cia os servi­dores mul­ti­me­dia (áudio, vídeo, etc).boot­sound: toca um som no boot, lendo um arquivo em /system/media/audio/ui/boot.mp3.installd: servi­dor de insta­laçã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.

Init

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 proces­sos Java. Tudo que

roda em Java é cri­ado por este processo, que instan­cia

uma máquina vir­tual Dalvik para exe­cu­tar um processo

ou serviço Java.

Ele esta imple­men­tado 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 infraestru­tura para a exe­cução de apli­cações Java.

2) Ini­ciar o Sys­tem Server, que geren­cia a base dos serviços do sis­tema opera­cional Android.

Zygote

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 Server

System ServerServiços inicializados pelo system server:

●Power Man­ager

●Activ­ity Manager

●Tele­phony Registry

●Pack­age Manager

●Con­text Manager

●Sys­tem Con­text Providers

●Bat­tery Service

●Alarm Man­ager

●Sen­sor Service

●Win­dow Manager

●Blue­tooth Service

●Mount Ser­vice

●...

System ServerAo final da execução do system server, o Activ­ity Man­ager ini­cia alguns proces­sos bási­cos, den­tre eles o com.

android.launcher, que é a apli­cação respon­sável pela

inter­face 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.