Je suis nouveau, yocto construit sur le système embarqué imx6q
.
Je veux écraser les fichiers système Linux après do_rootfs. Par exemple, les fichiers système cible sont ci-dessous.
donc, j'ai créé une couche personnalisée et une recette personnalisée.
Le binaire helloworld est copié.
mais, la fonction do_mytask n'est pas appelée.
quel est le problème avec mon code? ou toute autre méthode adaptée à mes besoins.
# # This file was derived from the 'Hello World!' example recipe in the # Yocto Project Development Manual. # SUMMARY = "Simple helloworld application" SECTION = "examples" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" SRC_URI = "file://helloworld.c" S = "${WORKDIR}" do_compile() { ${CC} helloworld.c -o helloworld } do_install() { install -d ${D}${bindir} install -m 0755 helloworld ${D}${bindir} } FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI += " \ file://interfaces \ file://issue \ file://mytest.sh \ " addtask mytask after do_rootfs before do_image do_mytask() { install -d ${D}/etc/network cp -af ${WORKDIR}/interfaces ${D}/etc/network/interfaces cp -af ${WORKDIR}/issue ${D}/etc/issue }
3 Réponses :
Cela dépend du fichier à modifier. Par exemple, si vous recherchez 'interfaces' dans des répertoires poky, vous les trouverez dans 'meta / recettes-core / init-ifupdown / init-ifupdown - $ {PV} /'. Il vous suffit de créer une recette nommée init-ifupdown - $ {PV} .bbappend dans votre méta, en recréant le chemin vu dans poky (recettes-core / init-ifupdown /). Cette recette peut contenir une seule ligne:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
Ensuite, vous créez un dossier 'files' avec le fichier 'interfaces' que vous voulez avoir.
Pour 'issue', comme d'autres trouvés dans le répertoire / etc (profile, fstab, ...), c'est la même procédure, avec les sources dans poky / meta / recettes-core / base-files /.
Pour init. d scripts, utilisez la classe 'update-rc'.
Je comprends parfaitement. Mais je voulais en faire ma propre recette de couches. juste un.
Ce n'est pas la voie à suivre. Lorsqu'un fichier est fourni par une recette existante, il est recommandé d'étendre cette recette (créer un bbappend) afin de la personnaliser. Toutes ces recettes personnalisées (et celles que vous avez créées à partir de zéro) doivent être dans votre propre méta.
Votre solution a fonctionné, mais elle contient une faute de frappe: les deux points doivent être placés à côté de son égal pour que cela fonctionne: : =
.
Votre recette n'est pas une "recette d'image" (et elle ne devrait pas être pour hello world), vous ne pouvez donc pas utiliser les tâches do_rootfs et do_image dans ce cas. Un peu de clarification: la recette d'image est un fichier .bb que vous utilisez pour construire une image avec bitbake ou devtool (dans votre cas, certains contenant imx6q, vous pouvez les trouver avec bitbake-layer show-recettes "* -image- *"
).
Il semble que vous cherchez vraiment un moyen de remplacer do_install d'une recette qui installe les fichiers mentionnés. Recherchez ensuite la recette qui installe ces fichiers et créez fichier bbappend dans votre couche supérieure. Ce fichier bbappend peut contenir do_install_append dans laquelle vous pouvez placer vos lignes install
(notez que l'utilisation de cp
n'est pas recommandée, tout devrait être fait avec l'outil d'installation).
Merci pour votre réponse, je suis débutant et je l'ai bien compris. En fin de compte, voulez-vous dire faire une recette d'image? Quoi qu'il en soit, je le ferai à votre façon.
@devj Non, "remplacer do_install d'une recette qui installe les fichiers mentionnés" signifie créer bbappend pour init-ifupdown dans votre cas. le même que dans le lien que j'ai partagé.
@devj Je ne vois pas où vous devez copier le répertoire. installez "correctement" les copies de fichiers (cp + chown + chgrp) - simples ou multiples (avec *), vérifiez la recette originale pour obtenir un exemple cgit.openembedded.org/openembedded-core/tree/meta/recipes-co re /… < / a>
Vous devrez étendre les recettes qui fournissent les fichiers que vous souhaitez remplacer.
En utilisant / etc / network / interfaces
comme exemple, la première étape consiste à déterminer quelle recette installe ce fichier.
À partir de l'invite bitbake:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
Cela nous indique donc que / etc / network / interfaces
est installé par le reçu init-ifupdown
.
Une recherche de fichier montre que init-ifupdown
fait partie de poky:
my-layer/receipes-core/init-ifupdown/files/interfaces
Maintenant, puisque vous devez modifier la sortie de init-ifupdown
, vous devrez étendre init-ifupdown code > en créant un
.bbappend
portant le même nom dans votre propre calque.
Vous pouvez créer le nouveau .bbappend
à
my-layer/receipes-core/init-ifupdown/init-ifupdown_%.bbappend
Le %
est un caractère générique qui garantit que le .bbappend
s'appliquera à toutes les futures versions de la recette init-ifupdown
, ce qui est probablement ce que vous voulez.
Placez votre fichier interfaces
personnalisé dans un dossier sous t il .bbappend
:
$ find . -name init-ifupdown*.bb ./poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb
Le .bbappend
ne doit alors contenir qu'une seule ligne pour permettre à bitbake de récupérer le nouveau fichier interfaces
:
$ oe-pkgdata-util find-path /etc/network/interfaces init-ifupdown: /etc/network/interfaces
Enfin, répétez ce qui précède avec chaque fichier système que vous souhaitez remplacer.
p >
Dois-je ajouter init-ifupdown
dans l'image? Ou init-ifupdown
sera toujours dans l'image?
Si vous souhaitez utiliser le .bbappend
suggéré pour installer un fichier interfaces
personnalisé, alors oui init-ifupdown
doit être ajouté à l'image