O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Movendo Fastboot para o espaço do usuário

O Android 10 e superior oferecem suporte a partições redimensionáveis, realocando a implementação fastboot do carregador de inicialização para o espaço do usuário. Essa realocação permite mover o código de flash para um local comum que pode ser mantido e testado com apenas as partes específicas do fornecedor do fastboot implementadas por uma camada de abstração de hardware (HAL).

Unificando inicialização rápida e recuperação

Como o boot rápido e a recuperação do espaço de usuário são semelhantes, você pode mesclá-los em uma partição / binário. As vantagens incluem menos uso de espaço e menos partições em geral, bem como a capacidade de fastboot e recuperação para compartilhar seu kernel e bibliotecas.

Para suportar o fastbootd , o bootloader deve implementar um novo comando boot control block (BCB) de boot-fastboot . Para entrar fastbootd modo fastbootd , o bootloader deve escrever boot-fastboot no campo de comando da mensagem do BCB e deixar o campo de recovery do BCB inalterado (para permitir o reinício das tarefas de recuperação interrompidas). Os campos de status , stage e reserved permanecem inalterados. Espera-se que o bootloader carregue e inicialize na imagem de recuperação ao ver boot-fastboot no comando BCB. A recuperação analisa a mensagem BCB e alterna para fastbootd modo fastbootd .

Comandos ADB

Esta seção descreve o comando adb para integrar o fastbootd . O comando tem comportamento diferente dependendo se o sistema ou a recuperação executa o comando.

Comando Descrição
reboot fastboot
  • Reinicia em fastbootd (sistema).
  • Entra no fastbootd diretamente, sem reinicialização (recuperação).

Comandos Fastboot

Esta seção descreve os comandos fastboot para integrar fastbootd , incluindo novos comandos para atualizar e gerenciar partições lógicas. Alguns comandos têm comportamentos diferentes dependendo se o bootloader ou o fastbootd executa o comando.

Comando Descrição
reboot recovery
  • Reinicia em recuperação (bootloader).
  • Entra na recuperação diretamente sem reinicializar ( fastbootd ).
reboot fastboot Reinicia em fastbootd .
getvar is-userspace
  • Retorna yes ( fastbootd ).
  • Retorna no (bootloader).
getvar is-logical:<partition> Retorna yes se a partição fornecida for uma partição lógica, no caso contrário. As partições lógicas suportam todos os comandos listados abaixo.
getvar super-partition-name Retorna o nome da superpartição. O nome inclui o sufixo do slot atual se a superpartição for uma partição A / B (geralmente não é).
create-logical-partition <partition> <size> Cria uma partição lógica com o nome e tamanho fornecidos. O nome ainda não deve existir como partição lógica.
delete-logical-partition <partition> Exclui a partição lógica fornecida (limpando efetivamente a partição).
resize-logical-partition <partition> <size> Redimensiona a partição lógica para o novo tamanho sem alterar seu conteúdo. Falha se não houver espaço suficiente disponível para realizar o redimensionamento.
update-super <partition> Mescla as alterações nos metadados da superpartição. Se uma mesclagem não for possível (por exemplo, o formato no dispositivo é uma versão não suportada), este comando falhará. Um parâmetro de wipe opcional substitui os metadados do dispositivo em vez de realizar uma mesclagem.
flash <partition> [ <filename> ] Grava um arquivo em uma partição flash. O dispositivo deve estar desbloqueado.
erase <partition> Apaga uma partição (não é necessário para apagar com segurança). O dispositivo deve estar desbloqueado.
getvar <variable> | all Exibe uma variável do carregador de inicialização ou todas as variáveis. Se a variável não existir, retorna um erro.
set_active <slot>

Define o slot de inicialização A / B fornecido como active . Na próxima tentativa de inicialização, o sistema inicializa a partir do slot especificado.

Para suporte A / B, os slots são conjuntos duplicados de partições que podem ser inicializados independentemente. Slots são nomeados a , b , etc. e diferenciados, adicionando a sufixos _a , _b , etc, para o nome da partição.

reboot Reinicia o dispositivo normalmente.
reboot-bootloader (ou reboot bootloader ) Reinicializa o dispositivo no bootloader.

Fastboot e bootloader

O bootloader atualiza o bootloader , o radio e as partições de boot/recovery , após o que o dispositivo inicializa em fastboot (espaço do usuário) e atualiza todas as outras partições. O bootloader deve suportar os seguintes comandos.

Comando Descrição
download Baixa a imagem para o flash.
flash recovery <image>/ flash boot <image>/ flash bootloader <image>/ recovery/boot flashes recovery/boot partição de recovery/boot e carregador de inicialização.
reboot Reinicializa o dispositivo.
reboot fastboot Reinicia para fastboot.
reboot recovery Reinicia para recuperação.
getvar Obtém uma variável do carregador de inicialização que é necessária para a current-slot imagem de recuperação / inicialização (por exemplo, current-slot e max-download-size ).
oem <command> Comando definido pelo OEM.

Partições dinâmicas

O carregador de inicialização não deve permitir o flash ou apagamento de partições dinâmicas e deve retornar um erro se essas operações forem tentadas. Para dispositivos de partição dinâmica adaptados, a ferramenta fastboot (e bootloader) oferece suporte a um modo de força para atualizar diretamente uma partição dinâmica durante o modo bootloader. Por exemplo, se o system for uma partição dinâmica no dispositivo adaptado, usar fastboot --force flash system permite que o bootloader atualize a partição em vez de fastbootd .

Carregamento em modo desligado

Se um dispositivo suportar carregamento no modo desligado ou de outra forma autoboots em um modo especial quando a energia é aplicada, o comando fastboot oem off-mode-charge 0 deve ignorar esses modos especiais e o dispositivo deve inicializar como se o usuário tivesse pressionado o botão fastboot oem off-mode-charge 0 .

Fastboot OEM HAL

Para substituir completamente o bootloader fastboot, fastboot deve lidar com todos os comandos fastboot existentes. Muitos desses comandos são de OEMs e estão documentados, mas exigem uma implementação personalizada (muitos comandos também são específicos do OEM e não estão documentados). Para lidar com esses comandos, o fastboot HAL especifica os comandos OEM necessários e permite que os OEMs implementem seus próprios comandos.

A definição de fastboot HAL é a seguinte:

import IFastbootLogger;

/**
 * IFastboot interface implements vendor specific fastboot commands.
 */
interface IFastboot {
    /**
     * Returns a bool indicating whether the bootloader is enforcing verified
     * boot.
     *
     * @return verifiedBootState True if the bootloader is enforcing verified
     * boot and False otherwise.
     */
    isVerifiedBootEnabled() generates (bool verifiedBootState);

    /**
     * Returns a bool indicating the off-mode-charge setting. If off-mode
     * charging is enabled, the device autoboots into a special mode when
     * power is applied.
     *
     * @return offModeChargeState True if the setting is enabled and False if
     * not.
     */
    isOffModeChargeEnabled() generates (bool offModeChargeState);

    /**
     * Returns the minimum battery voltage required for flashing in mV.
     *
     * @return batteryVoltage Minimum battery voltage (in mV) required for
     * flashing to be successful.
     */
    getBatteryVoltageFlashingThreshold() generates (int32_t batteryVoltage);

    /**
     * Returns the file system type of the partition. This is only required for
     * physical partitions that need to be wiped and reformatted.
     *
     * @return type Can be ext4, f2fs or raw.
     * @return result SUCCESS if the operation is successful,
     * FAILURE_UNKNOWN if the partition is invalid or does not require
     * reformatting.
     */
    getPartitionType(string partitionName) generates (FileSystemType type, Result result);

    /**
     * Executes a fastboot OEM command.
     *
     * @param oemCmdArgs The oem command that is passed to the fastboot HAL.
     * @response result Returns the status SUCCESS if the operation is
     * successful,
     * INVALID_ARGUMENT for bad arguments,
     * FAILURE_UNKNOWN for an invalid/unsupported command.
     */
    doOemCommand(string oemCmd) generates (Result result);

};

Habilitando o fastbootd

Para habilitar o fastbootd em um dispositivo:

  1. Adicione fastbootd a PRODUCT_PACKAGES em device.mk : PRODUCT_PACKAGES += fastbootd .

  2. Certifique-se de que o HAL fastboot, o HAL de controle de inicialização e o HAL de integridade estejam empacotados como parte da imagem de recuperação.

  3. Adicione quaisquer permissões SEPolicy específicas do dispositivo exigidas pelo fastbootd . Por exemplo, fastbootd requer acesso de gravação a uma partição específica do dispositivo para atualizar essa partição. Além disso, a implementação de fastboot HAL também pode exigir permissões específicas do dispositivo.

Para validar o fastboot do espaço de usuário, execute o Vendor Test Suite (VTS) .