Registro de aprendizado de inicialização do sistema Android

1. Processo de inicialização do sistema Android

O processo de inicialização do sistema Android envolve vários estágios e componentes. A seguir está uma breve descrição do processo geral de inicialização do sistema Android:

  1. Bootloader (bootloader): Ao ligar o sistema, o sistema primeiro carrega o bootloader (bootloader), que é um pequeno programa cuja principal função é inicializar o hardware e carregar a imagem de boot do sistema operacional. Um bootloader geralmente está localizado no meio de armazenamento de um dispositivo, como uma memória flash, e é fixado em um local específico por hardware.

  2. Inicialização do kernel: O bootloader carrega o kernel do sistema operacional (kernel). O kernel é o núcleo do sistema operacional e é responsável por gerenciar hardware, memória, processos e drivers de dispositivos. Dispositivos Android normalmente usam o kernel Linux.

  3. início do processo init:init Depois que o kernel é iniciado, um processo de espaço do usuário chamado é iniciado . A principal tarefa deste processo é inicializar o espaço do usuário e init.rciniciar os serviços e aplicativos do sistema de acordo com as regras definidas no arquivo de configuração.

  4. análise de configuração init.rc: init O processo analisa init.rco arquivo de configuração, que define uma série de etapas de inicialização, serviços do sistema e configurações de propriedades a serem executadas quando o sistema é iniciado.

  5. Inicialização do Zygote:init.rc Entre os serviços definidos em , haverá um serviço zygotechamado . zygoteUm processo é uma incubadora para aplicativos Android, um modelo para novos processos de aplicativos.

  6. Inicialização do servidor do sistema:init.rc Outro serviço importante definido é o system_server. system_serverÉ o serviço central do sistema Android, responsável por iniciar e gerenciar diversos componentes do sistema, como Activity Manager, Package Manager, Notification Manager, etc.

  7. Inicialização do aplicativo: Depois system_serverde iniciado, o sistema Android está pronto para executar aplicativos normalmente. A interface do usuário é carregada e o usuário pode interagir com o dispositivo. Os aplicativos podem ser acionados por ações do usuário ou eventos em segundo plano.

2. Sobre o arquivo init.rc

O objetivo do arquivo init.rc é iniciar serviços principais, definir propriedades e executar alguns scripts de inicialização quando o sistema for inicializado. Esses serviços e atributos desempenham um papel importante na operação de todo o sistema.

  1. Definição de Serviço: A parte mais importante do arquivo init.rc é a definição do serviço (Serviço). Um serviço representa um componente do sistema, que pode ser um processo em segundo plano, um processo daemon ou outras tarefas no nível do sistema. Cada serviço é definido por um nome e um conjunto de atributos, incluindo comando de inicialização, nível de inicialização, dependências, etc. Aqui está um exemplo de definição de serviço:

    service servicename /system/bin/executable arg1 arg2 {
        class classname
        user username
        seclabel u:r:servicename:s0
        oneshot
    }
    

    Aqui servicenameestá o nome do serviço, /system/bin/executableo executável binário a ser executado e arg1 arg2o parâmetro passado para o executável. classDefine o tipo de serviço, como main, , zygote, mediaetc. userO usuário em execução do serviço é especificado seclabele o rótulo de segurança é definido, oneshotindicando que o serviço será executado apenas uma vez no momento da inicialização.

  2. Configuração de propriedade: O arquivo init.rc também é usado para definir propriedades do sistema. Propriedades são pares chave-valor usados ​​para controlar o comportamento e a configuração do sistema. Os atributos podem ser compartilhados entre diferentes componentes do sistema, afetando a execução de processos, controle de permissões, etc. Por exemplo:

setprop ro.build.type user
setprop persist.sys.language en
  1. Essas propriedades podem ser acessadas por meio do serviço de propriedade do sistema (property_service) no sistema Android.

  2. Níveis de inicialização e dependências: os serviços no arquivo init.rc podem ser garantidos para serem iniciados na hora e na ordem corretas, especificando níveis de inicialização e dependências. O nível de inicialização (nas fases de inicialização) define quando iniciar o serviço, como early-init, init, , system-serveretc. As dependências podem garantir que alguns serviços sejam iniciados antes de outros. Por exemplo:

    on early-init
        start servicename
    

    Este código indica que o serviço early-inité iniciado durante o estágio servicename.

3. Sobre o Zigoto

Zygote é um processo especial no sistema Android que atua como uma incubadora de aplicativos para a criação de novos processos de aplicativos.

  1. Criação do processo Zygote: Durante o processo de inicialização do sistema Android, o processo Zygote é iniciado pelo processo init (o primeiro processo de espaço do usuário). O processo Zygote pré-carrega e inicializa classes, recursos e estados comumente usados ​​na inicialização do sistema para reduzir o tempo de inicialização de processos de aplicativos subsequentes.

  2. Estado e recursos compartilhados: o processo Zygote carrega muitas classes e recursos comumente usados ​​durante a inicialização, que podem ser compartilhados entre processos de aplicação, acelerando assim a inicialização de novos processos de aplicação. Esse compartilhamento inclui classes pré-carregadas, recursos do sistema, partes do estado da máquina virtual e muito mais.

  3. Incubação de aplicativos: quando um usuário inicia um novo aplicativo, o sistema Android não cria um novo processo para o aplicativo, mas cria um novo processo de aplicativo copiando o processo Zygote. Isso reduz o uso de memória e o tempo de inicialização. O novo processo de aplicação é chamado de “processo de aplicação” e herda o estado e os recursos do processo Zygote.

  4. Inicialização da aplicação: No processo de aplicação, as classes e recursos do processo Zygote já estão pré-carregados, o que permite que a aplicação seja iniciada mais rapidamente. O processo do aplicativo executa seus próprios main()métodos para inicializar os componentes, recursos e lógica de negócios do aplicativo.

  5. Isolamento de aplicativos: embora os processos de aplicativos herdem algum estado do processo Zygote, eles ainda estão isolados uns dos outros. Cada aplicativo é executado em seu próprio processo e não pode acessar diretamente a memória ou os recursos um do outro. Isso ajuda a melhorar a segurança e a estabilidade do aplicativo.

Acho que você gosta

Origin blog.csdn.net/weixin_53324308/article/details/132451373
Recomendado
Clasificación