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?

20

Généralement pour les systèmes d'armement, les arborescences de périphériques fournissent 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 dtsfichier, pas même à un dtbfichier.

J'ai accès à /syset /procsur 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'une a dtbété créée et fournie au noyau) au lieu d'un piratage supplémentaire "nous détournons simplement de la vanille et patcher le noyau afin de résoudre le problème d'informations sur le périphérique pour notre noyau uniquement "-solution?

humanANDpeace
la source
Avez-vous accès à l'image de démarrage? Vous pouvez extraire l'arborescence des périphériques à partir de là. Je peux aider.
phk

Réponses:

27

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

Je pense que les deux sont des alias, /sys/firmware/devicetree/baseprobablement le meilleur choix après l'apprivoisement /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, il hexdumpest donc 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 | Échange de pile Unix et Linux

dtc à Buildroot

Buildroot a une BR2_PACKAGE_DTC=yconfiguration à mettre dtcà l'intérieur du 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 est donc également capable de 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.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
la source
4

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, puis travailler votre système système par système.

FRob
la source
Merci de clarifier. Il y a une chance que le dtbsoit accessible via les debugfs mais qui dépendra CONFIG_DEBUG_FSde .configet même s'il est toujours basé sur le simple caprice qu'ils ont réellement utilisé dtbpour commencer, est-ce que je lis bien? Donc, avec un peu de «malchance», ils n'ont fait ni l'un ni l'autre et ont utilisé une sorte de correction directe du noyau à partir de l'interface de l'arborescence des périphériques, non? Donc, cela signifierait que le dernier recours ne serait pas le code machine, étant donné qu'ils violent la GPLv2 et ferment le noyau, non?
humanityANDpeace
Oui et oui pour les deux premiers. Enfin, IANAL, mais la machine arch / ??? / mach - ??? / board - ???. C contiendrait les dispositifs spéciaux présents pour une machine dans les noyaux plus anciens. Cela devrait être couvert par la GPL et doit être disponible moyennant des frais. Les pilotes de périphériques individuels peuvent être des sources fermées, il n'y a aucune violation.
FRob