Я создал собственный рецепт, который включает в себя некоторые служебные файлы, которые должны быть частью sysfs, и хотя я могу собрать весь образ и прошить его, я просто не вижу никаких изменений в rootfs.
bitbake-layers show-recipes | grep <recipe-name>
// i see the newly added recipe here
Ниже приведен do_install_append()
в файле рецепта bb:
do_install_append() {
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}/etc/initscripts
install -d ${D}${systemd_unitdir}/system
mv ${D}/etc/init.d/<daemon_file> ${D}/etc/initscripts/<daemon_file>
install -m 0644 ${WORKDIR}/<recipe>/<service_file> ${D}${systemd_unitdir}/system/<service_file>
install -d ${D}${systemd_unitdir}/system/multi-user.target.wants/
ln -sf ${systemd_unitdir}/system/<service_file> ${D}${systemd_unitdir}/system/multi-user.target.wants/<service_file>
fi
}
Я захожу в /etc/initscripts/
и не вижу <daemon_file>
например.
Есть ли что-то еще, что я должен изучить, чтобы отладить проблему, потому что сама сборка работает нормально?
Ничего страшного в вашем рецепте нет.
Вот несколько моментов, которые следует учитывать:
do_install_append
копирует файл, только если systemd
находится в DISTRO_FEATURES
.Чтобы убедиться в этом, проверьте:
bitbake -e | grep ^DISTRO_FEATURES=
или добавьте bbwarn "Message"
в свой рецепт, чтобы убедиться, что блок выполняется.
FILES_${PN}
:FILES_${PN} += "/etc/initscripts/<daemon_file> \
${systemd_unitdir}/system/<service_file> \
${systemd_unitdir}/system/multi-user.target.wants/<service_file>"
${D}
рецепта, прежде чем создавать полное изображение.$ bitbake -e <recipe> | grep ^D=
D = ".../tmp/work/.../<recipe>/<version>/image"
$ cd <path>
$ tree .
Для активации systemd
используйте:
INIT_MANAGER = "systemd"
Спасибо. Я не вижу systemd
в DISTRO_FEATURES
. Это, вероятно, приводит к тому, что блок не выполняется, следовательно, нет установки?
однако я вижу, что вижу Message
в одном из журналов...
Итак, активируйте systemd
, как указано в моем редактировании.
но блок выполняется нет?
Блок выполняется, только если systemd
находится в DISTRO_FEATURES
, я попробовал ваш код с systemd
.
Вы действительно установили пакет, созданный этим рецептом, в образ? Тот факт, что вы выпекаете рецепт, не означает, что содержимое входит в каждое изображение, вам также нужно добавить имя пакета в IMAGE_INSTALL
.
Да, я добавил `IMAGE_INSTALL += "<имя-рецепта>" в соответствующий файл .inc
Может флешка не работает?