2016-09-05 1 views
0

Je travaille sur un Beaglebone Black en utilisant le Yocto.Superposition d'arborescence de périphérique Yocto

En utilisant this implémentation d'un pilote PWM comme un guide, je suis incapable d'ajouter mes PWM à l'arborescence des périphériques.

La meilleure solution serait de créer une superposition d'arborescence de périphériques comme le fait M. Saad Ahmad, mais je ne comprends pas comment faire cela en utilisant Yocto. Je n'utilise pas capemgr, mais j'utilise meta-bbb. J'ai également la couche personnalisée meta-tfe qui contient actuellement le pilote pwm et quelques exemples. Cette couche définit également une nouvelle recette d'image bitbake:

include recipes-core/images/core-image-base.bb 

IMAGE_INSTALL += "\ 
     helloworld \ 
     hellokernel \ 
     bbb-pwm \ 
" 

KERNEL_MODULE_AUTOLOAD += "\ 
     hellokernel \ 
     bbb-pwm \ 
" 

export IMAGE_BASENAME = "tfe-image-base" 

suivant est le fichier .bb du MLI-conducteur:

DESCRIPTION = "PWM kernel module" 
LICENSE = "GPLv2" 
LIC_FILES_CHKSUM = "file://COPYING;md5=d41d8cd98f00b204e9800998ecf8427e" 

PR = "r0" 

inherit module 

SRC_URI = "file://bbb-pwm.c \ 
    file://Makefile \ 
    file://COPYING \ 
" 

S = "${WORKDIR}" 

Est-ce que quelqu'un sait comment faire cela?

Modifier: Un collègue a laissé entendre que je pourrais utiliser un fichier .bbappend, ajoutant à l'accumulation des règles du noyau dans les méta-bbb. Par conséquent ce que je l'ai fait, et maintenant mon répertoire des recettes noyau ressemble maintenant à ceci:.

. 
├── bbb-pwm 
│   ├── bbb-pwm.bb 
│   └── files 
│    ├── bbb-pwm.c 
│    ├── COPYING 
│    └── Makefile 
├── hellokernel 
│   └── {...} 
└── linux 
   ├── linux-stable_4.1 
    │ └── {...} 
   ├── linux-stable_4.1.bbappend 
   ├── linux-stable_4.4 
    │ └── {...} 
   ├── linux-stable_4.4.bbappend 
   ├── linux-stable_4.5 
   │   └── dts 
   │    ├── bbb-pwm.dts 
   │    └── sc_pwm_P8_13-00A0.dtsi 
   └── linux-stable_4.5.bbappend 

linux-stable_4 Annuaires */ont tous la même structure, afin de refléter la structure en miroir dans la méta-bbb.

Mes fichiers .bbappend ressembler à ceci:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/dts:" 

KERNEL_DEVICETREE_beaglebone += " \ 
    bbb-pwm.dtb \ 
" 

Toutefois, lorsque bitbaking, une erreur qui vous dira qu'il n'y a pas de règles de construction pour bbb-pwm.dtb:

| make[3]: *** No rule to make target 'arch/arm/boot/dts/bbb-pwm.dtb'. Stop. 
| arch/arm/Makefile:333: recipe for target 'bbb-pwm.dtb' failed 

Modifier : Voici sc_pwm_P8_13-00A0.dtsi

Répondre

2

Lorsque vous souhaitez utiliser une arborescence de périphérique personnalisée et modifier la variable KERNEL_DEVICETREE, le Les sources de l'arborescence vice (fichiers * .dts et fichiers * .dtsi) sont recherchées dans arch/arm/boot/dts (en fonction de votre architecture).

Dans votre exemple, vos fichiers sont placés dans un dossier distinct et ne sont pas récupérés par le fichier bbappend. La structure de la couche correcte serait suit:

└── linux 
    ├── linux-stable_4.5 
    │ └── git 
    │  └── arch 
    │   └── arm 
    │    └── boot 
    │     └── dts 
    │      ├── bbb-pwm.dts 
    │      └── sc_pwm_P8_13-00A0.dtsi 
    └── linux-stable_4.5.bbappend 

Pour faire bitbake raisonnable pour ces nouveaux fichiers, ils doivent être ajoutés via la variable SRC_URI dans le fichier bbappend:

SRC_URI += "file://git/arch/arm/boot/dts/bbb-pwm.dts" 
SRC_URI += "file://git/arch/arm/boot/dts/sc_pwm_P8_13-00A0.dtsi" 
+0

Merci. Ce genre de travail (a dû changer le chemin de git/arch/arm/boot/dts, va corriger votre réponse pour refléter cela). Ce n'est cependant pas très portable. La variable Yocto/OE contient-elle ce chemin? – Tom

+1

Il s'agit du dossier par défaut pour les sources d'arborescence de périphériques dans le noyau Linux. Je doute qu'il y ait une autre solution puisque c'est un endroit fixe. Device-Tree peut être utilisé pendant l'exécution et donc je suppose qu'il doit être là. – h0ch5tr4355

+0

En quoi consiste le fichier existe-t-il déjà? Y at-il un moyen de forcer la copie ou dois-je faire un patch? –