web-dev-qa-db-fra.com

Est-il possible d'obtenir les informations d'une arborescence de périphériques en utilisant / sys d'un noyau en cours d'exécution?

Généralement pour les systèmes d'armement, arborescences de périphériques fournit des informations sur le matériel au noyau (Linux). Ces arborescences de périphériques existent en tant que fichiers dts (source de l'arborescence des périphériques) qui sont compilés et chargés dans le noyau. Le problème est que je n'ai pas accès à un tel fichier dts, pas même à un fichier dtb.

J'ai accès à /sys et /proc sur la machine et je voulais demander si cela me permettrait de "deviner les bonnes valeurs" à utiliser dans un dts?

Une réponse potentielle pourrait également mettre en évidence l'aspect si la réponse à cette question dépend également de si l'interface de l'arborescence des périphériques a été utilisée en premier lieu (c'est-à-dire qu'un dtb a été créé et fourni au noyau) au lieu d'un piratage supplémentaire "nous détournons simplement de Vanilla et corrigeons le noyau afin de résoudre le problème d'informations sur le périphérique pour notre noyau uniquement" -solution?

23
humanityANDpeace

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

Je pense que les deux sont des alias, /sys/firmware/devicetree/base étant probablement le meilleur choix après avoir apprivoisé /proc.

Vous pouvez ensuite accéder aux propriétés dts à partir de fichiers:

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

Le format de sortie des entiers est binaire, donc hexdump est nécessaire.

dtc -I fs

Obtenez une arborescence complète des périphériques à partir du système de fichiers:

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

renvoie le dts sur stdout.

Voir aussi: Comment lister l'arborescence des périphériques du noyau | Unix & Linux Stack Exchange

dtc dans Buildroot

Buildroot a un BR2_PACKAGE_DTC=y config pour mettre dtc dans le système de fichiers racine.

QEMU -machine dumpdtb

Si vous exécutez Linux dans QEMU, QEMU génère automatiquement les DTB si vous ne le donnez pas explicitement avec -dtb, et il peut donc également le vider directement avec:

qemu-system-aarch64 -machine virt -cpu cortex-a57 -machine dumpdtb=dtb.dtb

comme mentionné sur: https://lists.gnu.org/archive/html/qemu-discuss/2017-02/msg00051.html

Testé avec cette configuration QEMU + Buildroot sur le noyau Linux v4.19 arm64.

Je ne sais pas si je vous comprends bien.

Si vous êtes sur un système qui a démarré à l'aide d'une dtb, votre arborescence de périphériques doit être accessible dans debugfs.

Vous pouvez également essayer les outils dtc de Pantelis Antoniou, ils incluent fdtdump et fdtget qui impriment des dts à partir d'un blob.

Si vous n'avez pas du tout d'arborescence de périphériques et que vous n'avez pas démarré à partir d'une base de données, vous devrez parcourir le code machine vous-même et ajouter tous les attributs et nœuds spécifiques aux périphériques à vos dts. Il n'y a pas d'arborescence de périphériques "synthétique" générée pour un tel démarrage. Un point de départ serait une machine ou un parent similaire et ensuite travailler votre système système par système.

4
FRob