Geralmente para sistemas arm, as árvores de dispositivos fornecem informações de hardware ao kernel (Linux). Essas árvores de dispositivos existem como arquivos dts (fonte da árvore de dispositivos) que são compilados e carregados no kernel. O problema é que não tenho acesso a esse dts
arquivo, nem mesmo a um dtb
arquivo.
Eu tenho acesso a /sys
e /proc
na máquina e eu queria perguntar se isso me permitiria "adivinhar os valores corretos" para ser usado em uma dts?
Também uma resposta em potencial poderia destacar adicionalmente o aspecto, se a resposta a essa pergunta também depender de se a interface da árvore de dispositivos foi usada em primeiro lugar (ou seja, a dtb
foi criada e fornecida ao kernel) em vez de mais hackers ", simplesmente desviamos da baunilha e corrigir o kernel para solucionar o problema de informações do dispositivo apenas para o nosso kernel "-solution?
fonte
Respostas:
/proc/device-tree
ou/sys/firmware/devicetree/base
Eu acho que ambos são pseudônimos,
/sys/firmware/devicetree/base
provavelmente sendo a melhor escolha depois de domesticar/proc
.Você pode acessar as propriedades dts dos arquivos:
O formato de saída para números inteiros é binário, então
hexdump
é necessário.dtc -I fs
Obtenha uma árvore de dispositivos completa no sistema de arquivos:
envia os dts para stdout.
Veja também: Como listar a árvore de dispositivos do kernel | Troca de pilha Unix e Linux
dtc
no BuildrootO Buildroot tem uma
BR2_PACKAGE_DTC=y
configuração para colocardtc
dentro do sistema de arquivos raiz.QEMU
-machine dumpdtb
Se você estiver executando o Linux dentro do QEMU, o QEMU gerará automaticamente os DTBs se você não fornecer explicitamente
-dtb
, e também poderá despejá-lo diretamente com:conforme mencionado em: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html
Testado com esta configuração QEMU + Buildroot no kernel do Linux v4.19 arm64.
fonte
Não sei se entendi corretamente.
Se você estiver em um sistema inicializado usando um dtb, sua árvore de dispositivos deverá estar acessível dentro de debugfs.
Você também pode experimentar as ferramentas dtc da Pantelis Antoniou, que incluem fdtdump e fdtget que imprimem dts a partir de um blob.
Se você não possui uma árvore de dispositivos e não inicializou a inicialização a partir de um dtb, precisará passar pelo código da máquina e adicionar todos os atributos e nós específicos do dispositivo aos seus dts. Não há uma árvore de dispositivo "sintética" gerada para essa inicialização. Um ponto de partida seria uma máquina ou pai semelhante e, em seguida, trabalhar seu sistema sistema por sistema.
fonte
dtb
pode ser acessível através através dos debugfs ainda que contar comCONFIG_DEBUG_FS
no.config
e até mesmo se estiver definida ainda no mero capricho que eles realmente usou umadtb
para começar, eu leio esse direito? Então, com um pouco de "azar", eles não usaram nenhum tipo de patch direto do kernel instalado na interface da árvore de dispositivos, certo? Então isso significa que o último recurso seria o código da máquina, uma vez que eles violam a GPLv2 e fecham a fonte do kernel, certo?