O que é uma árvore de dispositivos e um blob da árvore de dispositivos?

5

O que exatamente é uma árvore de dispositivos e um blob da árvore de dispositivos? Onde posso obter seu código-fonte para uma versão específica do Linux? Eu encontrei esse nome ao executar o linux em chips xilinx (tendo o ARM 9), por exemplo: aqui

    
por gpuguy 08.03.2014 / 07:19

3 respostas

4

Já tentou consultar o wiki Xilinx?

Este howto parece ter tudo o que você precisa para conseguir o que deseja. Há links para um repositório git com código, bem como instruções sobre como criá-lo. Aqui está o comando para baixar as fontes da árvore de dispositivos.

$ git clone git://github.com/Xilinx/device-tree.git

O site da Xilinx também oferece um excelente recurso Primeiros passos se você for novo no fluxo de trabalho de sua caixa de ferramentas. Aqui está um diagrama que mostra onde as árvores de dispositivos se encaixam:

Tendo em conta estes detalhes muito específicos de uma variância do Linux para a plataforma Xilinx, não vou incluir nenhum dos detalhes além do acima, aqui no U & L, já que esse wiki é mantido por um fornecedor de hardware, Xilinx, está suportando essa versão do kernel para os produtos de hardware deles usarem.

    
por 08.03.2014 / 07:54
2

Google refere-se a Wikipedia , que se refere a www.devicetree.org que descreve a sua "árvore de dispositivos" "como:

The Device Tree is a data structure for describing hardware. Rather than hard coding every detail of a device into an operating system, many aspect of the hardware can be described in a data structure that is passed to the operating system at boot time. The device tree is used both by Open Firmware, and in the standalone Flattened Device Tree (FDT) form.

Parece que esta é uma "árvore de dispositivos" completamente diferente da "árvore de dispositivos" em /dev/ .

    
por 08.03.2014 / 07:39
0

Mínimo reg + interrupt exemplo com dispositivo virtual QEMU

Como outros disseram, a árvore de dispositivos é fornecida por fornecedores de hardware e informa ao kernel do Linux como falar com dispositivos.

Talvez as duas informações mais notáveis que o kernel do Linux precisa são:

  • registrar endereços. No ARM-land, você fala com dispositivos escrevendo para locais de memória física mágica que vão para o dispositivo em vez de memória. É assim que você diz ao dispositivo para começar a trabalhar.
  • interromper números de linha. É assim que o dispositivo diz ao kernel que ele terminou de fazer alguma coisa.

Nosso exemplo adicionará o seguinte nó da árvore de dispositivos à árvore de dispositivos versatilepb , que o QEMU usará em função de -M versatilepb :

lkmc_platform_device@101e9000 {
    compatible = "lkmc_platform_device";
    reg = <0x101e9000 0x1000>;
    interrupts = <18>;
    interrupt-controller;
    #interrupt-cells = <2>;
    clocks = <&pclk>;
    clock-names = "apb_pclk";
    lkmc-asdf = <0x12345678>;
};

Em seguida, usando um módulo do kernel do Linux para interagir com o dispositivo, testaremos os seguintes recursos do DTS:

  • registra endereços
  • IRQs
  • leia as propriedades personalizadas do driver

Estes são os principais componentes do exemplo:

  • Linux versátil .dts patch no fork do Linux
    • reg e interrupt correspondem a números codificados na máquina versátil QEMU (que representa o SoC)
    • compatible corresponde ao platform_driver.name no módulo do kernel e informa ao kernel qual módulo manipulará este dispositivo
    • também passamos uma propriedade personalizada para o driver: lkmc-asdf = <0x12345678>; , que é lido com of_property_read_u32
    • a árvore de dispositivos é passada para o firmware do QEMU com o argumento -dtb
  • garfo
  • QEMU:
  • módulo do kernel Grava na memória no probe para testar as coisas, que também gera um IRQ.

As árvores de dispositivos têm muito mais recursos que não foram abordados, mas este exemplo deve ajudá-lo a começar a usar facilmente todos os novos recursos que surgirem.

Mais recursos:

  • tutorial indispensável de elinux: link
  • brinca com dtc para perguntas puramente sintáticas. Por exemplo, mostra como os nós são simplesmente mesclados por caminho: link
  • link
por 22.07.2017 / 07:46