O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Compilando e verificando

Você pode usar o Device Tree Compiler (DTC) para compilar os arquivos de origem da árvore de dispositivos. No entanto, antes de aplicar a TD de sobreposição na TD principal de destino, você também deve verificar o resultado simulando o comportamento do DTO.

Compilando com DTC

Ao usar dtc para compilar .dts , você deve adicionar a opção -@ para adicionar uma __symbols__ nó na resultando .dtbo . O __symbols__ nó contém uma lista de todos os nós que estão marcados com um rótulo, que a biblioteca DTO pode usar para referências.

Comando de exemplo para construir principais DT .dts :

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

Comando de exemplo para construir a sobreposição DT .dts :

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

Verifique os resultados do DTO no host

A verificação pode ajudá-lo a identificar erros que podem ocorrer ao colocar a TD de sobreposição na TD principal. Antes de atualizar o alvo, você pode verificar o resultado da sobreposição DT no host, simulando o comportamento de DTO usando /include/ na .dts .

Figura 1. Uso sintaxe /include/ para simular DTO no hospedeiro
  1. Criar uma cópia da sobreposição .dts . Na cópia, remova o cabeçalho da primeira linha. Exemplo:
    /dts-v1/;
    /plugin/;
    
    Salve o arquivo como my_overlay_dt_wo_header.dts (ou qualquer nome que você quiser).
  2. Criar uma cópia das principais .dts . Na cópia, após a última linha, anexar a incluir sintaxe para o arquivo que você criou na etapa 1. Por exemplo:
    /include/ "my_overlay_dt_wo_header.dts"
    
    Salve o arquivo como my_main_dt_with_include.dts (ou qualquer nome que você quiser).
  3. Use dtc para compilar my_main_dt_with_include.dts para obter o fundiu DT, que deve ser o mesmo resultado que DTO. Por exemplo:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. Use dtc para despejar my_merged_dt.dto .
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Verificando DTO no Android 9

O Android 9 requer uma partição Device Tree Blob Overlay (DTBO). Para adicionar nós ou fazer alterações nas propriedades no SoC DT, o bootloader deve sobrepor dinamicamente um DT específico do dispositivo sobre o SoC DT.

Indicando sobreposições aplicadas

Para permitir que o Vendor Test Suite (VTS) para avaliar a justeza da aplicação de sobreposição, os fornecedores devem adicionar uma nova linha de comando do kernel parâmetro androidboot.dtbo_idx que indica as sobreposições selecionados a partir da partição DTBO. No Android 12 usando kernel versão 5.10 ou superior, este parâmetro passa pelo bootconfig. Por exemplo, o parâmetro androidboot. dtbo_idx=x,y,z relatórios x , y e z como os índices de base zero do dispositivo de sobreposições de árvore (DTO) a partir da partição DTBO aplicado (por esta ordem) pelo gestor de arranque para o dispositivo de base de árvore (DT).

Sobreposições podem aplicar-se a nós na árvore de dispositivos principal ou adicionar novos nós, mas não pode se referir a um nó adicionado em uma sobreposição anterior. Essa restrição é necessária porque o aplicativo de sobreposição não mescla a tabela de símbolos de sobreposição com a tabela de símbolos principal do DT (a não mesclagem evita conflitos nos nomes dos símbolos e complicação das dependências entre as sobreposições).

Exemplo: sobreposições inválidas

Neste exemplo, overlay_2.dts refere-se ao nó e , que foi adicionado por overlay_1.dts . Depois overlay_1 é aplicado ao principal DT, se for feita uma tentativa para aplicar overlay_2 ao DT resultante, a aplicação sobreposição irá falhar com um erro que o símbolo e não está presente na tabela de símbolos para a base DT.

main.dts overlay_1.dts overlay_2.dts
[main.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;

&b { ref1 =  <&a>;
    e: e {
        prop = <0x0a>;
        phandle = <0x04>;
    };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* invalid! */
&e {
    prop = <0x0b>;
};

Exemplo: sobreposições válidas

Neste exemplo, overlay_2.dts refere-se apenas ao nó b dos principais DTS. Quando overlay_1 é aplicada à base de DT, em seguida, seguido pela aplicação de overlay_2 , o valor da propriedade prop em nó e (conjunto por overlay_1.dts ) é substituído pelo valor ajustado por overlay_2.dts .

main.dts overlay_1.dts overlay_2.dts
[final.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;


&b { ref1 =  <&a>;
     e {
          prop = <0x0c>;
      };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* valid */
&b { ref1 =  <&c>;
     e {
          prop = <0x0d>;
      };
};

Implementando a partição DTBO

Para implementar a partição DTBO necessária, certifique-se de que o bootloader pode fazer o seguinte:

  1. Identifique a placa em que ela está sendo executada e selecione a (s) sobreposição (ões) correspondente (s) a ser aplicada.
  2. Acrescente o androidboot.dtbo_idx parâmetro para a linha de comando do kernel.
    • O parâmetro deve indicar os índices baseados em zero dos DTOs da imagem da partição do DTBO aplicada ao DT base (na mesma ordem).
    • Os índices devem se referir à posição da sobreposição na partição DTBO.

Para mais detalhes sobre a estrutura da partição DTBO, consulte o dispositivo sobreposições árvore em source.android.com.

Validando a partição DTBO

Você pode usar o VTS para verificar o seguinte:

  • Existência do parâmetro de linha de comando do kernel androidboot.dtbo_idx (verificando que Init tem configurar automaticamente o correspondente ro.boot.dtbo_idx propriedade do sistema).
  • Validade do ro.boot.dtbo_idx propriedade do sistema (através da verificação que especifica propriedade pelo menos um índice de imagem DTBO válido).
  • Validade da partição DTBO (também verifica as sobreposições na partição DTBO que são aplicadas ao DT de base).
  • Nós adicionais ou alterações de propriedade no DT resultante são apresentados ao kernel do Linux.

Por exemplo, nos seguintes sobreposições e DT final, adicionando androidboot.dtbo_idx=5,3 para a linha de comando do kernel passa validação mas adicionando androidboot.dtbo_idx=3,5 para a linha de comando do kernel não passa validação.

Sobrepor DT no índice 3 Sobrepor DT no índice 5
[overlay_1.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xfe>; };
[overlay_2.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
DT final
/dts-v1/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

	c {
		phandle = <0x3>;
		prop = <0xfe>;
	};

	__symbols__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};