A implementação do DTO envolve dividir a árvore de dispositivos, construir, particionar e executar. Depois de ter uma implementação em funcionamento, você também deve manter a compatibilidade entre os dois DTs e determinar uma estratégia para garantir a segurança de cada partição DT.
Dividindo o TD
Comece dividindo a árvore de dispositivos em duas (2) partes:
- DT principal . A parte somente SoC e as configurações padrão, fornecidas pelo fornecedor do SoC.
- Sobreposição DT . As configurações específicas do dispositivo, fornecidas pelo ODM/OEM.
Depois de dividir as árvores de dispositivos, você deve garantir a compatibilidade entre o DT principal e o DT de sobreposição para que a fusão do DT principal e do DT de sobreposição resulte em um DT completo para o dispositivo. Para obter detalhes sobre o formato e as regras do DTO, consulte Sintaxe do DTO . Para obter detalhes sobre várias árvores de dispositivos, consulte Vários DTs .
Construindo DTs principais e de sobreposição
Para construir o DT principal:
- Compile o DT principal
.dts
no arquivo.dtb
. - Flash arquivo
.dtb
em uma partição acessível ao tempo de execução do gerenciador de inicialização (detalhado abaixo).
Para construir o DT de sobreposição:
- Compile DT
.dts
de sobreposição no arquivo.dtbo
. Embora esse formato de arquivo seja o mesmo que o arquivo.dtb
formatado como uma árvore de dispositivos achatada, a extensão de arquivo diferente o distingue do DT principal. - Flash arquivo
.dtbo
em uma partição acessível em tempo de execução do bootloader (conforme detalhado abaixo).
Para obter detalhes sobre como compilar com o DTC e verificar os resultados do DTO no host, consulte Compilando e verificando .
Particionando DTs
Determine um local confiável e acessível em tempo de execução do gerenciador de inicialização na memória flash para colocar .dtb
e .dtbo
.
Localizações de exemplo para o DT principal:
- Parte da partição de inicialização, anexada ao kernel (
image.gz
). - Blobs DT separados (
.dtb
) em partição dedicada (dtb
).
Localizações de exemplo para o DT de sobreposição:
Partição única |
---|
Partição ODM |
---|
.dtbo
na partição odm
(faça isso somente se seu bootloader tiver capacidade para carregar dados do sistema de arquivos da partição odm
).Nota: O tamanho da partição de DT de sobreposição depende do dispositivo e da quantidade de alterações necessárias na parte superior do blob de DT principal. Normalmente, 8 MB é mais do que suficiente e permite espaço para crescer no futuro, se necessário.
Para dispositivos que suportam atualizações contínuas (A/B) , A/B o DT principal e as partições de DT de sobreposição:
Exemplo 1 |
---|
Exemplo 2 |
---|
Executando no bootloader
Para correr:
- Carregue
.dtb
do armazenamento na memória. - Carregue
.dtbo
do armazenamento na memória. -
.dtb
com.dtbo
para ser um DT mesclado. - Inicie o kernel dado o endereço de memória do DT mesclado.
Mantendo a compatibilidade
O DTB principal (do fornecedor de SoC) é tratado como uma superfície de API para DTBOs. Depois de separar a árvore de dispositivos em uma parte comum do SoC e uma parte específica do dispositivo, você deve manter as duas partes mutuamente compatíveis no futuro, incluindo:
- Definição de DT no DT principal (por exemplo, nós, propriedades, rótulos) . Qualquer alteração de definição no DT principal pode desencadear alterações no DT de sobreposição. Por exemplo, para corrigir um nome de nó no DT principal, defina um rótulo "alias" que mapeie para o nome do nó original (para evitar a alteração do DT de sobreposição).
- Sobreposição de localização de armazenamento DT (por exemplo, nome da partição, formato de armazenamento) .
Garantindo a segurança
O carregador de inicialização deve garantir que o DTB/DTBO seja seguro, não modificado e não corrompido. Você pode usar qualquer solução para proteger DTB/DTBO, por exemplo, assinatura de imagem de inicialização no VBoot 1.0 ou rodapé AVB HASH (VBoot 2.0).
- Se o DTB/DTBO estiver em uma partição exclusiva, você poderá adicionar essa partição à cadeia de confiança do AVB. A cadeia de confiança começa a partir de uma raiz de confiança protegida por hardware e vai para o carregador de inicialização, que verifica a integridade e autenticidade da partição DTB/DTBO.
- Se o DTB/DTBO estiver em uma partição existente (como a partição
odm
), essa partição deverá estar na cadeia de confiança do AVB. (A partição DTBO pode compartilhar uma chave pública com a partiçãoodm
).
Para obter detalhes, consulte Inicialização verificada .