Как правильно построить mDNS в Yocto?

Может ли кто-нибудь помочь мне настроить рецепт для создания mDNS в Yocto и / или исправить любые другие ошибки, которые я мог допустить?
Ранее я успешно создавал mDNS и запускал его во встроенном Linux Linaro.
Это довольно подробный пост, чтобы попытаться ошибиться в предоставлении достаточно информации. Как написал один респондент в сообщении на форуме, которое я недавно видел: Добро пожаловать в Yocto. Вот тебе бутылка виски и адвил ...

Сборка в Linaro Linux: я получил этот .tar mDNS от Apple: https://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-878.200.35.tar.gz
После этого все заработало: https://github.com/balaji-reddy/mDNSResponder.
Я создал базовую папку / mDNS / для моих материалов mDNS и извлек там .tar, создав папку mDNSResponder-878.200.35 /. Я сделал это с помощью cd.
Он легко собирался для меня в Linaro с помощью команды: make os = linux -C mDNSPosix

У меня 8 файлов в /mDNS/mDNSR-878.200.35/mDNSPosix/build/prod/:
40 592 libdns_sd.so
55 960 libnss_mdns-0.2.so
370 288 mDNSClientPosix
448 608 mdnsd
374 616 mDNSIdentify
387 904 mDNSNetMonitor
373 960 mDNSProxyResponderPosix
379 768 mDNSResponderPosix
Затем, все еще в mDNSResponder-878.200.35 /, я сделал:
make install os = linux -C mDNSPosix

Помимо прочего, эта установка запускает демон. Он также копирует libdns_sd.so и libnss_mdns-0.2.so в / lib /, который должен быть в пути.
Эти строки включены в вывод установки:
-------- -------------------------------------------------- ---- **
Запуск демона Apple Darwin Multicast DNS / DNS Service Discovery: mdnsd.
/ usr / sbin / mdnsd установлен
------------ -------------------------------------------------- **

Что касается Yocto, я решил, что добавлю копию libdns_sd.so в папку / lib / в пункте назначения к моему рецепту, чтобы я мог связать с ним другой модуль, прежде чем я запустил make install, который должен быть выполнен на целевом объекте. . Но если я создам этот другой модуль в Yocto, я думаю, мне следует добавить его копирование в / lib / в моем tmp / work / dir, а не в D, место назначения. Моя строка do_install:
install -m 0755 $ {S} /mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so $ {D} $ {base_libdir}
предназначена для копирования в / lib / in D. Как мне правильно написать эту строку, чтобы скопировать ее в / lib / под ~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64-poky-linux /?

Папка нижнего уровня Yocto не очень важна; Я просто почувствовал, что мне нужна папка
Yocto в моем домашнем каталоге, чтобы хранить мои вещи Yocto. Я создал imx-yocto-bsp
после i.MX_Yocto_Project_User's_Guide.pdf.

Сначала я следил за i.MX_Yocto_Project_User's_Guide.pdf, IMXLXYOCTOUG из загружаемого imx-yocto-L5.4.47_2.2.0, чтобы получить свою базовую систему, которая работала. Я получил это от: www.nxp.com/imx8mnanoevk - ›https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-8m-nano-applications-processor:8MNANOD4-EVK
И скачал и распаковал этот .zip, описанный в следующих трех строках:
L5.4.47_2.2.0_LINUX_DOCS (REV L5.4.47_2.2.0) ОБНОВЛЕНО
Документация по i.MX L5.4.47_2.2.0 для Linux BSP. Включает примечания к выпуску и руководство пользователя.
ZIP 11,6 МБ 3 ноября 2020 г. L5.4.47_2.2.0_LINUX_DOCS [английский]
Я делаю это для платы i.MX 8M nano eval.
Папка build-wayland на моем пути выше - это моя папка сборки.
Для этого я выполнил следующую строку:
~ / Yocto / imx-yocto-bsp $ DISTRO = fsl-imx-wayland MACHINE = imx8mnddr4evk source imx-setup-release.sh -b build-wayland
Одним из результатов этого было изменение каталога на папку build-wayland. Оказалось, что было правильным остаться в этой папке для последующих шагов в i.MX_Yocto_Project_User's_Guide.pdf, таких как моя команда bitbake imx-image-multimedia, которую я сделал; Я не верю, что .pdf проясняет это.

Итак, я ранее работал на хост-компьютере Linux с Ubuntu 18.04.4 Bionic Beaver и записывал полученные изображения на мою нано-плату i.MX 8M.
Одна из многих строк, которые я вижу в своем выводе UART:
Добро пожаловать в NXP i.MX Release Distro 5.4-zeus (zeus)!
Я последовал следующему очень хорошему руководству, а также добавил слой helloworld, как он показывает, и заставил helloworld работать на моей целевой плате после прошивки сборки. изображение wic с хоста:
https://medium.com/the-innovation/how-to-prepare-a-helloworld-c-recipe-with-yocto-project-1f74c296a777
Это хороший учебник, с одной стороны, потому что он четко описывает структуру каталогов и может быть соблюден. Однако будьте осторожны с опечаткой, которую допустил автор. Он начинает писать helloworld.c как hello-world.c в Шагах 5 и 6, а затем переключается на helloworld.c на Шаге 7. Вы должны уловить это и исправить написание в своей работе, когда вы заметите переключатель.

Я использовал структуру, которую он, Джордж Калин, показал, чтобы сделать мой слой mdns.

В моей папке сборки build-wayland я создал meta-mdns-so вместе с папкой meta-helloworld-app, которую я создал после этого руководства. Я использовал те же шаги, что и в руководстве, включая
bitbake-Layers create-layer meta-mdns-so
bitbake-Layers add-layer meta-mdns-so

Это помогло мне пройти шаг 4 в учебнике аналогичным образом.
Это создало следующее дерево в meta-mdns-so (один штрих для каждого уровня):

conf
-layer.conf
COPYING.MIT
README
recipes-example
-mdns
--files
--- mDNSResponder- 878.200.35.tar.gz
--mDNSResponder_878.200.35.bb

Обратите внимание, что элементы, за которыми следуют элементы с большим отступом, являются каталогами.

Размещение mDNSResponder-878.200.35.tar.gz в файлах, которые я узнал из https://wiki.yoctoproject.org/wiki/Building_your_own_recipes_from_first_principles Однако информации здесь около семи лет, а ссылки на справочную информацию уже испортились.
Более подробная информация содержится в руководстве по Yocto Mega по адресу https://www.yoctoproject.org/docs/3.0/mega-manual/mega-manual.html.
См. 7.3.21.3. Пакет на основе Makefile

Вот рецепт в mDNSResponder_878.200.35.bb, который я придумал для своей первой попытки:
--------------------------- -------------------------------------------
ОПИСАНИЕ = Компонент mDNS
PRIORITY = необязательный
SECTION = протоколы
LICENSE = MIT
LIC_FILES_CHKSUM = file: // $ {COMMON_LICENSE_DIR} / MIT; md5 = 0835ade698e0bcf8506ecda2f7b4f302UR /> SRI / : //mDNSResponder-878.200.35.tar.gz
# S = $ {WORKDIR}
# -Не следует устанавливать S, потому что BitBake ожидает, что источник находится в каталоге с именем
# mDNSResponder-878.200.35 в рабочем каталоге.
# Не нужен шаг do_compile, поскольку по умолчанию BitBake запускает команду make
# для компиляции приложения.
# Но нужны дополнительные параметры make
EXTRA_OEMAKE = 'os = linux' '-C mDNSPosix'
do_install () {
install -d $ {D} $ {base_libdir}
install -m 0755 $ {WORKDIR } /mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so $ {D} $ {base_libdir}
}
---------------- ----------- ------------------------------------------- **
Я сделал bitbake mdns в ~ / Yocto / imx-yocto-bsp / build-wayland $.

Возвращаясь к этой работе в новом окне терминала, я всегда делаю
~ / Yocto / imx-yocto-bsp $ source setup-environment build-wayland
Это помещает меня в папку build-wayland: ~ / Yocto / imx-yocto-bsp / build-wayland $

Bitbake, похоже, отлично справился с компиляцией, и я получил контент в:
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work # find -iname mdns
Нашел лоты, в том числе эту папку:
./aarch64-poky-linux/mdns/878.200.35-r0/

Как в учебнике helloworld:
Шаг 10. Добавьте пакет в conf / local.conf в переменной IMAGE_INSTALL и установите детали для следующего изображения
Я добавил:
IMAGE_INSTALL_append = mdns после строки, ' CONF_VERSION '= 1'.

Я выполнил битбейк из моего каталога сборки: bitbake imx-image-multimedia

В моей папке развертывания в ~ / Yocto / imx-yocto-bsp / build-wayland / tmp / deploy / images / imx8mnddr4evk / я получил imx-image-multimedia-imx8mnddr4evk-20210211215119.rootfs.wic.bz2. текущая временная метка от 2021/02/11 (чт) 21:51:19 (0000 UTC).

Прошив его на мою плату i.MX 8M nano,
-не было libdns_sd.so в папке / lib /
-не было папки /mDNSR-878.200.35 в корне.
-find -iname mdns не находит mDNSR-878.200.35; находит экран с файлами.
- папки /mDNSR-878.200.35/mDNSPosix/build/prod/ с ее 8 артефактами сборки там не было.

Однако на хосте bitbake было обнаружено 8 артефактов сборки:
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64-poky-linux / mdns / 878.200.35-r0 / mDNSResponder-878.200.35 / mDNSPosix / build / prod # ls -l
всего 9452
-rwxr-xr-x 1 159200 11 февраля 16:07 libdns_sd.so
-rwxr-xr- x 1 239856 11 февраля 16:07 libnss_mdns-0.2.so
-rwxr-xr-x 1 1504904 11 февраля 16:07 mDNSClientPosix
-rwxr-xr-x 1 1750944 11 февраля 16:07 mdnsd < br /> -rwxr-xr-x 1 1481136 11 фев 16:07 mDNSIdentify
-rwxr-xr-x 1 1525392 11 фев 16:07 mDNSNetMonitor
-rwxr-xr-x 1 1493112 11 фев 16 : 07 mDNSProxyResponderPosix
-rwxr-xr-x 1 1511048 11 февраля 16:07 mDNSResponderPosix

Я пришел к выводу, что с компиляцией все в порядке, но моя команда do_install была неправильной.
Может ли кто-нибудь исправить мой рецепт?

Для второй попытки я изменил только do_install () в рецепте на это:
----------------------------- -------------------------------------------------- -
do_install () {
install -t $ {S} $ {D}
install -d $ {D} $ {base_libdir}
install -m 0755 $ {S } /mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so $ {D} $ {base_libdir}
}
---------------- -------------------------------------------------- --------------
Это два изменения, сначала копирование с S на D, чтобы попытаться скопировать mDNSResponder-878.200.35 / dir в место назначения, а затем попытка install - m из S, а не из WORKDIR.

При повторной попытке bitbake: bitbake imx-image-multimedia в конце было указано, что все 6968 задач не нуждаются в повторном запуске.

Я попробовал: ~ / Yocto / imx-yocto-bsp / build-wayland $ bitbake -c clean mdns - и получил:
ПРИМЕЧАНИЕ. Сводка задач: предпринята попытка 1 задачи, из которых 0 не нужно повторять и все получилось.

~ / Yocto / imx-yocto-bsp / build-wayland $ bitbake imx-image-multimedia - получил:
ПРИМЕЧАНИЕ: Сводка задач: выполнено 6968 задач, из которых 6967 не нужно было запускать повторно, и все они были выполнены.
Обычно он мигает и стирает множество действий, что и было на этот раз. Было бы неплохо, если бы оставшееся было видно, чтобы можно было его изучить.

Он ничего не обновлял в:
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / deploy / images / imx8mnddr4evk #
Больше не было mDNSResponder-878.200.35 / in ~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64-poky-linux / mdns / 878.200.35-r0 /.

Я пробовал: bitbake -c cleansstate mdns - получил:
ПРИМЕЧАНИЕ: Сводка задач: предпринята попытка 2 задач, из которых 0 не нужно было повторно запускать, и все они были выполнены.

Сделал: ~ / Yocto / imx-yocto-bsp / build-wayland $ bitbake imx-image-multimedia
-Получил типичный вывод bitbake, затем:
Сводка состояния: Требуется 6 Найдено 0 Пропущено 6 Текущее 2580 (Совпадение 0%, выполнено 99%)
ПРИМЕЧАНИЕ. Сводка по задачам: выполнено 6968 задач, из которых 6954 не нужно было запускать повторно, и все они были выполнены успешно.
На этот раз я увидел do_compile из mdns и 878.200.25 и т.п.

Опять был mDNSResponder-878.200.35 в
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64-poky-linux / mdns / 878.200.35-r0 /.
артефакты сборки в mDNSPosix на хосте по адресу:
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64-poky-linux / mdns / 878.200.35-r0 / mDNSResponder-878.200. 35 / mDNSPosix / build / prod /
По-прежнему нет обновленного образа с четверг 11 февраля в ~ / Yocto / imx-yocto-bsp / build-wayland / tmp / deploy / images / imx8mnddr4evk /.

Может ли кто-нибудь исправить мой рецепт и другие ошибки, которые я допустил? Это моя do_install ()?

В моем do_install () у меня есть:
install -m 0755 $ {S} /mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so $ {D} $ {base_libdir}
который предназначен для копирования его в / lib / в D. Как мне правильно написать эту строку, чтобы скопировать ее в / lib / под
~ / Yocto / imx-yocto-bsp / build-wayland / tmp / work / aarch64- poky-linux / для ссылки на следующий модуль, который я должен создать на хосте?

А пока я попробую удалить мой imx-image-multimedia-imx8mnddr4evk-20210211215119.rootfs.wic.bz2 и переделать bitbake.
... Удаление imx-image-multimedia-imx8mnddr4evk-20210211215119.rootfs. tar.bz2 и .wic.bz2 не помогли; они не были воссозданы даже после того, как я переделал вышеуказанные чистки и битбейк.

С наилучшими пожеланиями,

Позже: Дополнительный вопрос: Где я могу получить файл mdns.service, необходимый для создания mDNS в Yocto?


person microajim    schedule 18.02.2021    source источник


Ответы (1)


Уже существует рецепт для mDNS версии 878.200.35: https://git.openembedded.org/meta-openembedded/tree/meta-networking/recipes-protocols/mdns/mdns_878.200.35.bb?h=zeus

person qschulz    schedule 19.02.2021