Usando vários DTs

Muitos fornecedores de SoC e ODMs suportam o uso de vários DTs em um dispositivo, permitindo que uma imagem alimente vários SKUs/configurações. Nesses casos, o bootloader identifica o hardware e carrega o DT correspondente em tempo de execução:

Figura 1. Várias árvores de dispositivos sobrepostas no bootloader.

Nota: O uso de vários DTs não é obrigatório.

Configurando

Para adicionar suporte para múltiplos DTs ao modelo DTO, configure uma lista de DTs principais e outra lista de DTs de sobreposição.

Figura 2. Implementação de DTO em tempo de execução para múltiplos DTs.

O bootloader deve ser capaz de:

  • Leia o SoC ID e selecione a árvore de dispositivos principal correspondente e
  • Leia o ID da placa e selecione o conjunto de árvores de dispositivos de sobreposição de acordo.

Apenas um DT principal deve ser selecionado para uso em tempo de execução. Podem ser selecionados vários DTs de sobreposição, mas devem ser compatíveis com o DT principal escolhido. O uso de múltiplas sobreposições pode ajudar a evitar o armazenamento de uma sobreposição por placa na partição DTBO e permitir que o bootloader determine o subconjunto de sobreposições necessárias com base no ID da placa (ou possivelmente testando os periféricos). Por exemplo, a Placa A pode precisar dos dispositivos adicionados pelas sobreposições 1, 3 e 5, enquanto a Placa B pode precisar dos dispositivos adicionados pelas sobreposições 1, 4 e 5.

Particionamento

Para particionar, determine um local confiável e acessível em tempo de execução do bootloader na memória flash para armazenar os DTBs e DTBOs (o bootloader deve ser capaz de localizar esses arquivos no processo correspondente). Tenha em mente que DTBs e DTBOs não podem existir na mesma partição. Se seus DTBs/DTBOs estiverem na partição dtb / dtbo , use a estrutura da tabela e o formato do cabeçalho detalhados em Formato de partição DTB/DTBO .

Executando no bootloader

Para correr:

  1. Identifique o SoC e carregue o .dtb correspondente do armazenamento na memória.
  2. Identifique a placa e carregue o .dtbo correspondente do armazenamento na memória.
  3. Sobreponha o .dtb ao .dtbo para formar um DT mesclado.
  4. Inicie o kernel dado o endereço de memória do DT mesclado.