1
votes

Comment écraser les fichiers système Linux dans le système de fichiers yocto?

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.

  • / etc / network / interface
  • / etc / issue
  • /etc/init.d/rcS
  • /home/root/mytest.sh

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
}


0 commentaires

3 Réponses :


2
votes

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'.


3 commentaires

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: : = .



1
votes

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).


3 commentaires

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>



3
votes

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 >


2 commentaires

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