A implementação de sobreposições da árvore de dispositivos (DTOs) envolve dividir a árvore de dispositivos (DT), criar, particionar e executar. Depois de ter uma implementação funcional, você também precisa manter a compatibilidade entre os dois DTs e determinar uma estratégia para garantir a segurança de cada partição de DT.
Dividir o DT
Comece dividindo o DT em duas partes:
- DT principal. A parte somente do SoC e as configurações padrão, fornecidas pelo fornecedor do SoC.
- DT de sobreposição. As configurações específicas do dispositivo, fornecidas pelo ODM/OEM.
Depois de dividir os DTs, é preciso garantir a compatibilidade entre o DT principal e o DT de sobreposição para que a fusão dos dois resulte em um DT completo para o dispositivo. Para detalhes sobre o formato e as regras de DTO, consulte Sintaxe de DTO. Para detalhes sobre vários DTs, consulte Usar vários DTs.
Criar DTs principais e de sobreposição
Para criar o DT principal:
- Compile a DT principal
.dts
em um arquivo.dtb
. - Faça o flash do arquivo
.dtb
em uma partição acessível ao tempo de execução do carregador de inicialização (detalhado em [Partition DTs](#partition)).
Para criar a DT de sobreposição:
- Compile a DT de sobreposição
.dts
em um arquivo.dtbo
. Embora esse formato de arquivo seja o mesmo que o arquivo.dtb
formatado como uma DT simplificada, a extensão de arquivo diferente o distingue da DT principal. - Faça o flash do arquivo
.dtbo
em uma partição acessível ao tempo de execução do carregador de inicialização (detalhado em [Partition DTs](#partition)).
Para detalhes sobre como compilar com DTC e verificar os resultados do DTO no host, consulte Compilar e verificar.
DTs de partição
Determine um local confiável e acessível ao tempo de execução do carregador de inicialização na memória flash para colocar .dtb
e .dtbo
.
Exemplos de locais para a DT principal:
- Parte da partição de inicialização, anexada ao kernel (
image.gz
) - Separar blobs de DT (
.dtb
) em uma partição dedicada (dtb
)
Exemplos de locais para a DT de sobreposição:
Figura 1. Coloque .dtbo em uma partição odm. Faça isso apenas se o carregador de inicialização puder carregar dados do sistema de arquivos de uma partição odm.
Figura 2. Coloque .dtbo em uma partição exclusiva, como uma partição dtbo.
Observação:o tamanho da partição DT de sobreposição depende do dispositivo e da quantidade de mudanças necessárias no blob DT principal. Normalmente, 8 MB é mais do que suficiente e permite espaço para crescer no futuro, se necessário.
Para dispositivos compatíveis com atualizações integradas (A/B), faça o teste A/B das partições principais de DT e DT de sobreposição:
Figura 3. A/B da partição DTBO, exemplo 1.
Figura 4. A/B na partição DTBO, exemplo 2.
Executar no carregador de inicialização
Para executar:
Figura 5. Implementação típica de tempo de execução para DTO no carregador de inicialização.
- Carregue
.dtb
do armazenamento para a memória. - Carregue
.dtbo
do armazenamento para a memória. - Sobreponha
.dtb
com.dtbo
para ser um DT mesclado. - Inicie o kernel com o endereço de memória da DT mesclada.
Manter a compatibilidade
A principal DTB (do fornecedor de SoC) é tratada como uma plataforma de API para DTBOs. Depois de separar o DT em uma parte comum ao SoC e outra específica do dispositivo, mantenha as duas partes mutuamente compatíveis no futuro, incluindo:
- Definição de DT na principal DT. Por exemplo, nós, propriedades e rótulos. Qualquer mudança na definição da DT principal pode acionar mudanças na DT de sobreposição. Por exemplo, para corrigir um nome de nó na DT principal, defina um rótulo "alias" que mapeie para o nome do nó original (para evitar a mudança da DT de sobreposição).
- Sobrepor o local da loja DT. Por exemplo, nome da partição, formato de armazenamento.
Garantir a segurança
O carregador de inicialização precisa garantir que o DTB ou DTBO esteja seguro, sem modificações e sem corrupção. Você pode usar qualquer solução para proteger DTB ou DTBO, por exemplo, assinatura da imagem de inicialização no VBoot 1.0 ou rodapé HASH do AVB (VBoot 2.0).
- Se DTB ou DTBO estiver em uma partição exclusiva, adicione essa partição à cadeia de confiança do AVB. A cadeia de confiança começa em uma raiz de confiança protegida por hardware e vai até o carregador de inicialização, que verifica a integridade e a autenticidade da partição DTB ou DTBO.
- Se DTB ou DTBO estiver em uma partição atual (como a partição
odm
), ela precisará estar na cadeia de confiança do AVB. (A partição DTBO pode compartilhar uma chave pública com a partiçãoodm
).
Para mais detalhes, consulte Inicialização verificada.