Construire linux pour une carte de développement iMX6 à l’aide du projet Yocto, et je souhaite modifier le fichier .config utilisé pour construire u-boot-imx (u-boot pour la carte de développement iMX) - par exemple. changer le délai de démarrage automatique à 1 seconde à titre d'exemple.
Je peux modifier la configuration (par exemple, rechercher le répertoire de construction et exécuter make menuconfig), mais lorsque je lance bitbake pour reconstruire l'image, le fichier .config est écrasé par défaut. Il existe de nombreux fichiers xxx_defconfig et je ne sais pas lequel il utilise.
J'ai suivi ce guide pour la configuration du noyau avec le projet Yocto. J'ai apporté une modification au fichier .config, je l'ai copiée sur ma couche et renommée "defconfig". J'ai créé une nouvelle couche avec un u-boot-imx_2017.03.bbappend pour étendre u-boot-imx_2017.03.bb (la recette de u-boot-imx).
Voici mon u-boot-imx_2017.03.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += "file://defconfig"
Je l'ai aussi ajouté aux "BBFILES" dans mon layer.conf
Je reconstruis u-boot comme suit:
bitbake -f -D u-boot-imx -c compile
Lorsque je fais cela, le fichier .config dans le répertoire de construction revient à la configuration par défaut (pas ma version modifiée) et le binaire u-boot résultant n'a pas la modification (délai de démarrage toujours 3 secondes).
Je pense que ma couche est en cours de traitement car je le vois dans la sortie:
DEBUG: Appending .bbappend file /home/bob/yocto/morty/sources/meta-mylayer/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bbappend to /home/bob/yocto/morty/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bb
Je ne vois aucune sortie de débogage indiquant une erreur (par exemple, impossible de trouver mon fichier defconfig).
Comment puis-je apporter ce genre de changement à la configuration u-boot avec Yocto?
===== EDIT =====
J'ai suivi les instructions de la réponse de LetoThe2nd ci-dessous. Voici ce que j'ai trouvé:
bitbake-layers show-appends
Utile! Parmi les couches que je vois:
u-boot-imx_2017.03.bb:
/home/bob/yocto/morty/sources/meta-mylayer/imx/meta-bsp/recipes-bsp/u-boot/u-boot-imx_2017.03.bbappend
Donc, on dirait qu'il a trouvé la couche.
bitbake -e -c clean u-boot-imx | tee build.log
Grepping dans build.log pour "SRC_URI", j'ai trouvé ceci:
# $SRC_URI [6 operations]
...
# pre-expansion value:
# "${UBOOT_SRC};branch=${SRCBRANCH} file://defconfig"
SRC_URI="git://git.freescale.com/imx/uboot-imx.git;protocol=git;branch=imx_v2017.03_4.9.11_1.0.0_ga file://defconfig"
Le file: // defconfig vient de mon bbappend.
Grepping pour UBOOT_MACHINE, j'ai trouvé:
# $UBOOT_MACHINE [2 operations]
...
UBOOT_MACHINE=" mx6ull_14x14_evk_config"
Cela semble correct!
J'ai vérifié le fichier .config dans le répertoire de construction de u-boot-imx; c'est toujours incorrect.
(J'ai comparé la valeur de CONFIG_BOOTDELAY dans defconfig de ma couche avec la valeur de .config dans le répertoire de construction de u-boot-imx).
===== EDIT 2 =====
J'ai suivi la suggestion 1 dans l'addenda à la réponse de LetoThe2nd ci-dessous. C'est à dire.:
Créez un correctif pour le fichier xxx_defconfig utilisé lors de la construction de u-boot-imx pour ma carte evk (dans ce cas, [SOURCE DIR]/configs/mx6ull_14x14_evk_defconfig)
Placez le patch dans mon répertoire de couche avec le .bbappend
Changé .bbappend pour regarder la ligne ceci:
_
FILESEXTRAPATHS_prepend := "${THISDIR}:"
SRC_URI += " file://mx6ull_14x14_evk_defconfig.patch;patchdir=${S}/configs "
Cela a fonctionné! (c’est-à-dire que le délai d’initialisation automatique ajusté que j’ai mis dans le patch a été utilisé dans u-boot-imx).
Je n'ai pas essayé la suggestion 2 car la première méthode sonnait mieux.
Techniquement, le processus que vous avez décrit me semble correct. Mais il y a quelques obstacles à surveiller et à vérifier:
Bien que cela semble être le cas pour vous (vous l'avez découvert grâce à la sortie de débogage), ceci est généralement plus facile à vérifier avec:
bitbake-layers show-appends
Cela vous donnera une liste complète et détaillée de toutes les annexes en vigueur dans votre situation actuelle.
Si plusieurs recettes sont impliquées, les choses peuvent être compliquées et se remplacer mutuellement. Vérifier avec
bitbake -e u-boot-imx
pour voir ce qui se passe réellement. Il est préférable de combiner cette opération avec une diffusion dans less (ou le pageur de votre choix), puis la recherche des valeurs modifiées, comme SRC_URI.
Compte tenu des informations de 2., ceci est plutôt trivial: recherchez la variable appelée
UBOOT_MACHINE
car c’est ce que u-boot devrait vraiment voir.
La combinaison des commutateurs -f et -c peut avoir des résultats inattendus, car vous bricolez les dépendances des tâches. D'après mon expérience, quelque chose de long
bitbake -c clean u-boot-imx && bitbake u-boot-imx
devrait mieux fonctionner, car il traverse toute la dépendance de la construction, y compris la configuration, les correctifs, etc.
EDIT/ADDENDUM
J'ai vérifié avec les développeurs OE, et le problème principal est que le mécanisme de defconfig est spécifique au noyau (linux), ce qui explique également pourquoi cela est expliqué dans le manuel du noyau.
Donc, pour obtenir votre configuration dans la construction réelle, il existe une solution et demie.
Préparez un correctif pour les sources u-boot. Dans votre cas, il s’agit probablement d’une modification mineure du fichier defconfig déjà utilisé. Avoir le patch dans le format canonique et l'ajouter à SRC_URI, alors il devrait automatiquement être ramassé et faire l'affaire.
Préparez votre configuration en format complet (pas la version simplifiée de defconfig). Ajoutez-le ensuite à SRC_URI et utilisez-le pour une tâche supplémentaire dans votre .bbappend:
do_compile_prepend() {
cp YOURFILENAME ${S}/.config
}
Cela devrait injecter la nouvelle configuration directement avant le début de la compilation. Il faudra peut-être un peu de bricolage, mais vous avez certainement l’idée. Une autre approche serait d’injecter votre defconfig sur le fichier d’origine.
Cela dit, je recommande fortement la première façon.
il n'est pas nécessaire de copier l'intégralité du fichier .config
privé dans le dossier de compilation u-boot. S'il est nécessaire de modifier certains paramètres dans defconfig, sed
fonctionne parfaitement dans la méthode do_compile_prepend
. Exemple:
`
do_configure_prepend() {
sed -i -e 's,CONFIG_DEFAULT_DEVICE_TREE=,CONFIG_DEFAULT_DEVICE_TREE= ${BOARD_DEVICE_TREE},g' ${S}configs/mx7ulp_evk_defconfig
}
`
les espaces sont parfaitement acceptables dans les motifs de recherche et de remplacement. ${BOARD_DEVICE_TREE}
pourrait être défini dans l’un des fichiers de configuration du Yocto. cette méthode fonctionne également bien pour les fichiers source/en-tête déjà corrigés avec une liste de correctifs basée sur une recette.