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é
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
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:
make dtbs
Qui gère automatiquement tout celacpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...
), Puis compilez la sortie avec dtc
.