A implementação de sobreposições da árvore de dispositivos (DTOs, na sigla em inglês) envolve dividir a árvore de dispositivos (DT), criar particionamento e execução. Depois de ter uma implementação funcional, você também deve manter a compatibilidade entre as duas DTs e determinar uma estratégia para garantir e a segurança de cada partição da DT.
Dividir a TD
Comece dividindo a TD em duas partes:
- DT principal. A parte somente SoC e as configurações padrão, do fornecedor de SoC.
- DT de sobreposição. As configurações específicas do dispositivo, fornecidas pelos ODM/OEM
Depois de dividir as DTs, é preciso garantir a compatibilidade entre as principais A TD e a DT sobreposta para que a mesclagem da TD principal com a da DT sobreposta resulte em uma DT do dispositivo. Para detalhes sobre o formato e as regras de DTO, consulte Sintaxe de DTO (em inglês). Para detalhes sobre várias DTs, consulte Várias DTs.
Criar DTs principais e de sobreposição
Para criar a DT principal:
- Compile o
.dts
da DT principal em um arquivo.dtb
. - Atualize o arquivo
.dtb
em uma partição do carregador de inicialização acessível pelo ambiente de execução (detalhada em [DTs de partição](#partition)).
Para criar a transferência de dados de sobreposição:
- Compile a DT de sobreposição
.dts
em um arquivo.dtbo
. o formato do arquivo é igual ao do arquivo.dtb
, formatado como DT simplificada, a extensão de arquivo diferente a distingue do Transferência de dados principal. - Atualize o arquivo
.dtbo
em uma partição do carregador de inicialização acessível pelo ambiente de execução (detalhada em [DTs de partição](#partition)).
Para mais detalhes sobre como compilar com o DTC e verificar os resultados da DTO no host, consulte Compilar e verificar.
DTs de partição
Determine um local confiável e acessível pelo tempo de execução do carregador de inicialização no flash
memória para colocar .dtb
e .dtbo
.
Locais de exemplo da DT principal:
- Parte da partição de inicialização, anexada ao kernel (
image.gz
) - Separar blobs de DT (
.dtb
) na partição dedicada (dtb
)
Exemplos de locais para a transferência de dados de sobreposição:
Figura 1. Coloque .dtbo em uma partição exclusiva, como uma partição dtbo.
Figura 2. Coloque o arquivo .dtbo em uma partição odm (faça isso somente se o carregador a capacidade de carregar dados do sistema de arquivos de uma partição odm).
Observação: o tamanho do sobrepor a partição da TD depende do dispositivo e da quantidade de alterações necessárias no topo do blob principal da DT. Normalmente, 8 MB é mais do que o suficiente e permite espaço para crescer no futuro, se necessário.
Para dispositivos com suporte atualizações contínuas (A/B), A/B, principais partições da DT e da DT de sobreposição:
Figura 3. Partição de DTBO A/B, exemplo 1.
Figura 4. Partição de DTBO A/B, exemplo 2.
Executar no carregador de inicialização
Para executar:
Figura 5. Implementação típica de ambiente 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 uma DT mesclada. - Iniciar kernel de acordo com o endereço de memória da DT mesclada.
Manter compatibilidade
O DTB principal (do fornecedor de SoC) é tratado como uma superfície de API para DTBOs. Depois separar a TD em uma parte comum SoC e uma parte específica do dispositivo, será necessário manter as duas partes mutuamente compatíveis no futuro, incluindo:
- Definição da TD na DT principal. Por exemplo, nós, propriedades rótulos. Qualquer mudança de definição na DT principal pode acionar alterações na sobreposição TD. Por exemplo, para corrigir o nome de um nó na DT principal, defina um "alias" marcar que mapeia para o nome do nó original (para evitar a alteração da DT da sobreposição).
- Sobreponha o local da loja de DT. Por exemplo, nome da partição, armazenar .
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. É possível usar qualquer solução para proteger DTB ou DTBO, por exemplo, Imagem de inicialização assinatura no VBoot 1.0 ou AVB Rodapé HASH (VBoot 2.0).
- Se DTB ou DTBO estiver em uma partição exclusiva, você poderá adicioná-la à cadeia de confiança do AVB. A cadeia de confiança começa em uma raiz protegida por hardware e vai para o carregador de inicialização, que verifica a integridade e a autenticidade de DTB ou DTBO.
- Se o DTB ou DTBO estiver em uma partição atual (como a
odm
ela deve estar na cadeia de confiança do AVB. (partição de DTBO pode compartilhar uma chave pública com a partiçãoodm
).
Para mais detalhes, consulte a página Verificados Inicialização.