Как перезаписать системные файлы linux в файловую систему yocto?

Я новичок imx6q Встроенная система.

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

  • / И т.д. / сеть / интерфейс
  • / И т.д. / вопрос
  • /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
}

4 ответа

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

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

Из подсказки bitbake:

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

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

Поиск файла показывает, что init-ifupdown является частью 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:"

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

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

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

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

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

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

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

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

Добавление дополнительного комментария на основе оригинального ответа Карстена Хансена для людей, работающих с Xilinx / Petalinux.

В среде Petalinux у нас действительно нет команды: oe-pkgdata-util, поэтому стратегия состоит в том, чтобы выполнить поиск в папке Xilinx SDK. В соответствии с документацией он может быть установлен в Linux в каталоге / opt . Если вы выполните:

      grep -r syslog-startup.conf .

вы увидите рецепт busybox , который выполняет установку syslog-startup.conf.

Вы можете создать рецепт переопределения под названием busybox_%. Bbappend в разделе:

      ../project-spec/meta-user/recipes-core/busybox/

Поместите измененный файл syslog-startup.conf в:

      ../project-spec/meta-user/recipes-core/busybox/files/syslog-startup.conf

Восстановите через petalinux-build. Вы также можете принудительно создать rootfs с помощью petalinux-build -c rootfs, и система должна заполнить ваш новый файл.

Другие вопросы по тегам