É possível obter as informações para uma árvore de dispositivos usando / sys de um kernel em execução?

15

Comumente para sistemas de braço, árvores de dispositivos fornecem informações de hardware para o kernel (Linux). Essas árvores de dispositivos existem como arquivos dts (origem da árvore de dispositivos) que são compilados e carregados no kernel. O problema é que eu não tenho acesso a esse arquivo dts , nem mesmo a um arquivo dtb .

Eu tenho acesso a /sys e /proc na máquina e queria perguntar se isso me permitiria "adivinhar os valores corretos" para serem usados em um dts?

A resposta potencial também poderia destacar o aspecto se a resposta a essa pergunta também depender de se a interface da árvore de dispositivos foi usada (ou seja, um dtb foi criado e fornecido ao kernel) em vez de mais alguns hackers "nós simplesmente desviaremos da baunilha e corrigiremos o kernel de modo a resolver o problema de informação do dispositivo apenas para nossa solução" kernel?

    
por humanityANDpeace 26.02.2016 / 01:28

2 respostas

21

/proc/device-tree ou /sys/firmware/devicetree/base

Acho que ambos são aliases, /sys/firmware/devicetree/base provavelmente é a melhor escolha após a doação de /proc .

Você pode acessar as propriedades dts dos arquivos:

 hexdump /sys/firmware/devicetree/base/apb-pclk/clock-frequency

O formato de saída para inteiros é binário, então hexdump é necessário.

dtc -I fs

Obtenha uma árvore de dispositivos completa no sistema de arquivos:

sudo apt-get install device-tree-compiler
dtc -I fs -O dts /sys/firmware/devicetree/base

envia os dts para stdout.

Aprenda com: Como listar o kernel Device Tree | Unix & Troca de pilha do Linux

Testado com este QEMU + Configuração do buildroot no kernel Linux v4.19 arm64.

    
por 16.12.2016 / 19:44
3

Não tenho certeza se entendi corretamente.

Se você estiver em um sistema que inicializou usando um dtb, a árvore de dispositivos deve estar acessível dentro do debugfs.

Você também pode experimentar as ferramentas dtc de Pantelis Antoniou, elas incluem fdtdump e fdtget que imprimem dts a partir de um blob.

Se você não tem uma árvore de dispositivos e não inicializou a partir de um dtb, então você terá que passar pelo código da máquina e adicionar todos os atributos e nós específicos do dispositivo aos seus dts. Não existe uma árvore de dispositivos "sintéticos" gerada para essa inicialização. Um ponto de partida seria uma máquina ou pai semelhante e, em seguida, trabalhar o seu sistema de maneira pelo sistema.

    
por 27.02.2016 / 01:20