Как перезаписать системные файлы linux в файловую систему yocto? - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок, yocto build на imx6q встроенной системе.

Я хочу перезаписать системные файлы linux после do_rootfs.Например, целевые системные файлы приведены ниже.

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

Итак, я сделал специальный слой и специальный рецепт.бинарный файл helloworld нормально скопирован.
но функция do_mytask не вызывается.

что не так с моим кодом?или любой другой метод для моих целей.

#
# 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 ]

0 голосов
/ 11 февраля 2019

Ваш рецепт не является "рецептом изображения" (и не должен быть для hello world), поэтому вы не можете использовать задачи do_rootfs и do_image в этом случае.Небольшое уточнение: рецепт изображения - это файл .bb, который вы используете для создания изображения с помощью bitbake или devtool (в вашем случае некоторые из них содержат imx6q, вы можете найти их с помощью bitbake-layers show-recipes "*-image-*").

Похоже, что выНа самом деле поиск - это способ переопределить do_install некоторого рецепта, который устанавливает упомянутые файлы.Затем найдите, какой рецепт устанавливает эти файлы, и создайте файл bbappend в верхнем слое.Этот файл bbappend может содержать задачу do_install_append , в которую можно поместить строки install <file> <dir> (обратите внимание, что при использовании cp не рекомендуется, все должно выполняться с помощью инструмента установки).

0 голосов
/ 11 февраля 2019

Вам нужно будет расширить рецепты, содержащие файлы, которые вы хотите заменить.

Используя в качестве примера /etc/network/interfaces, первый шаг - выяснить, какой рецепт устанавливает этот файл.

Из приглашения bitbake:

$ oe-pkgdata-util find-path /etc/network/interfaces
init-ifupdown: /etc/network/interfaces

Таким образом, это говорит нам о том, что /etc/network/interfaces установлен рецептом init-ifupdown.

Поиск файла показывает, что init-ifupdown является частьюof poky:

$ find . -name init-ifupdown*.bb
./poky/meta/recipes-core/init-ifupdown/init-ifupdown_1.0.bb

Теперь, так как вам нужно изменить вывод init-ifupdown, вам нужно расширить init-ifupdown, создав с таким же именем .bbappend всвой собственный слой.

Вы можете создать новый .bbappend в

my-layer/receipes-core/init-ifupdown/init-ifupdown_%.bbappend

. % - это шаблон, который гарантирует, что .bbappend будет применяться ко всем будущим версиям init-ifupdown рецепт, что, вероятно, то, что вам нужно.

Поместите свой пользовательский файл interfaces в папку под .bbappend:

my-layer/receipes-core/init-ifupdown/files/interfaces

Тогда .bbappend нужно толькосодержать одну строку, чтобы битбэйк мог забрать новый interfaces файл:

FILESEXTRAPATHS_prepend := "${THISDIR}/files:"

Наконец, повторите то же самое с каждой системной файловой системой.но вы хотите заменить.

0 голосов
/ 10 февраля 2019

Это зависит от файла, который нужно изменить.Например, если вы будете искать «интерфейсы» в директориях poky, вы найдете его в «meta / recipes-core / init-ifupdown / init-ifupdown - $ {PV} /».Вам просто нужно создать рецепт с именем init-ifupdown - $ {PV} .bbappend в вашей мета-версии, воссоздающий путь, видимый в poky (recipes-core / init-ifupdown /).Этот рецепт может содержать одну строку:

FILESEXTRAPATHS_prepend: = "${THISDIR}/files:"

Затем вы создаете папку «files» с файлом «interfaces», который вы хотите иметь.

Для «проблемы», как и другие найденныев каталоге / etc (profile, fstab, ...) это та же самая процедура, с источниками в poky / meta / recipes-core / base-files /.

Для сценариев init.d используйтекласс 'update-rc'.

...