web-dev-qa-db-fra.com

Comment modifier le fichier DTB du noyau

Résumé

Je compile actuellement le noyau Linux (noyau, modules et DTB) avec des pilotes personnalisés pour une carte personnalisée. Parfois, je compile le noyau et je me rends compte que la chaîne de compatibilité dans le fichier DTB n'est pas ce que le pilote personnalisé recherche. Pour le moment, la seule façon d'y remédier est de modifier le DTS ou pilote du noyau pour que les chaînes correspondent, puis recompiler à nouveau le noyau. Existe-t-il un moyen de modifier le fichier DTB pour mettre à jour le chaîne de compatibilité?

tentatives infructueuses

J'ai pu décompiler le fichier DTB vers un fichier DTS en utilisant la commande:

dtc -I dtb -o <filename>.dts -<filename>.dtb

Cependant, si je modifie le fichier DTS et que je recompile en utilisant la commande:

dtc -I dts -o <filename>.dtb -<filename>.dts

Le noyau ne chargera pas le fichier DTB recompilé

7
Liam Kelly

Pourquoi ne générez-vous pas de nouveaux dtb?

DTB (Device tree blob/binary), est une base de données matérielle qui représente les composants matériels de la carte.

U-boot transmet la structure des informations de la carte au noyau, qui est dérivée du fichier d'en-tête dans U-Boot.

DTB est compilé par le compilateur spécial qui produit le binaire sous la forme appropriée à comprendre pour U-Boot et Linux.


DTC (Device Tree Compiler), il traduit le fichier d'arborescence des périphériques en binaire lisible par machine que U-Boot et le noyau Linux peuvent comprendre.

La manière simple d'utiliser DTC.

$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts

pour obtenir l'arborescence des périphériques dans le texte de la dtb.

dtc -I dtb -O dts arm_board.dtb

board.dts est un binaire créé par la commande ci-dessus. -O spécifie le format de sortie. -o L'indicateur est le fichier de sortie. -b 0 spécifie le CPU de démarrage physique.

Alors fais

$ make Arch=arm arm_board.dtb

Une autre approche pourrait être d'utiliser simplement make dtbs cela appellera dtc. Arch/arm/boot/dts/Makefile liste les DTB qui doivent être générés au moment de la construction. C'est une autre façon de le compiler. make mettra cela dans cet emplacement de l'arbre du noyau /Arch/arm/boot/dts

Jetez un oeil à cela arborescence des périphériques pour les nuls

5
danglingpointer

Je veux juste mettre à jour cela avec 2 ans d'expérience supplémentaire sur le sujet.

Les fichiers DTS dans le référentiel Linux sont un mélange de directives de préprocesseur DTS et C (#include, #define, etc.). Ainsi, lorsque le DTB d'origine est compilé, le préprocesseur établit un lien vers les fichiers référencés pour créer un fichier DTS pur. dtc convertit le fichier unique DTS en un fichier DTB.

Donc, si vous souhaitez modifier un fichier du noyau DTS et le compiler, vous avez deux options:

  1. Exécutez simplement make dtbs Qui gère automatiquement tout cela
  2. Exécutez manuellement le préprocesseur (cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...), Puis compilez la sortie avec dtc.
0
Liam Kelly