Как перезаписать системные файлы 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, и система должна заполнить ваш новый файл.