问题描述
有人可以帮助我设置在 Yocto 中构建 mDNS 和/或
纠正我可能犯的任何其他错误?
我之前成功构建了 mDNS 并在嵌入式 Linaro 中运行
Linux。
这是一篇非常详细的帖子,试图在提供足够的方面犯错
信息。正如一位响应者在我最近看到的论坛消息中写道:
“欢迎来到 Yocto。这是你的一瓶威士忌和 Advil……”
在 Linaro Linux 中构建:我从 Apple 获得了 mDNS 的这个 .tar:
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"
我在 /mDNS/mDNSR-878.200.35/mDNSPosix/build/prod/ 中有 8 个文件:
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 多播 DNS/DNS 服务发现守护进程:mdnsd.
/usr/sbin/mdnsd 已安装
-------------------------------------------------- ------------**
对于 Yocto,我想我会将 libdns_sd.so 的副本添加到 /lib/ 文件夹中
我的食谱的目的地,所以我可以在运行之前将另一个模块链接到它
make install,必须在目标上运行。但如果我建
Yocto 中的其他模块,我想我应该将它复制到 /lib/ 下
tmp/work/ dir,而不是 D,目的地。我的 do_install 行:
安装 -m 0755 ${S}/mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so ${D}${base_libdir}
用于将其复制到 D 中的 /lib/。我将如何正确编写该行进行复制
它到 /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) 更新
适用于 Linux BSP 文档的 i.MX L5.4.47_2.2.0。包括发行说明、用户指南。
ZIP 11.6 MB 2020 年 11 月 3 日 L5.4.47_2.2.0_LINUX_DOCS [英文]
我正在为 i.MX 8M nano 评估板做这件事。
我上面路径中的 build-wayland 文件夹是我的 build 文件夹。
我做了以下几行来得到它。
~/Yocto/imx-yocto-bsp$ disTRO=fsl-imx-wayland MACHINE=imx8mnddr4evk 源 imx-setup-release.sh -b build-wayland
其结果之一是目录更改为 build-wayland
文件夹。事实证明,留在该文件夹中是正确的做法
i.MX_Yocto_Project_User's_Guide.pdf 中的后续步骤,例如我的
我做的“bitbake imx-image-multimedia”命令;我不相信 .pdf 制作的
很清楚。
所以我之前在运行 Ubuntu 18.04.4 的 Linux 主机 PC 上进行了这项工作
“仿生海狸”并将生成的图像闪烁到我的 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 步在他的第 7 步中切换到 helloworld.c。你必须抓住
当您注意到切换时,请修复您工作中的拼写。
我使用他 George Calin 展示的结构来制作我的 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 中创建了以下树(每级缩进一个破折号):
确认
-layer.conf
copYING.MIT
自述文件
食谱示例
-mdns
--文件
---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 = "协议"
许可证 = "麻省理工学院"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://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}
}
-------------------------------------------------- ---------------------**
我在 ~/Yocto/imx-yocto-bsp/build-wayland$ 中做了 bitbake mdns。
在新的终端窗口中返回这项工作时,我总是这样做
~/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: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 板上,它
- /lib/ 文件夹中没有 libdns_sd.so
- 根目录中没有 /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 2 月 11 日 16:07 libdns_sd.so
-rwxr-xr-x 1 239856 2 月 11 日 16:07 libnss_mdns-0.2.so
-rwxr-xr-x 1 1504904 2 月 11 日 16:07 mDNSClientPosix
-rwxr-xr-x 1 1750944 2 月 11 日 16:07 mdnsd
-rwxr-xr-x 1 1481136 2 月 11 日 16:07 mDNSIdentify
-rwxr-xr-x 1 1525392 2 月 11 日 16:07 mDNSNetMonitor
-rwxr-xr-x 1 1493112 2 月 11 日 16:07 mDnsproxyResponderPosix
-rwxr-xr-x 1 1511048 Feb 11 16:07 mDNSResponderPosix
我的结论是编译部分没问题,但我的 do_install 命令是错误的。
有人可以帮我改正我的食谱吗?
第二次尝试时,我只将配方中的 do_install() 更改为:
-------------------------------------------------- ------------------------------
do_install() {
安装 -t ${S} ${D}
install -d ${D}${base_libdir}
安装 -m 0755 ${S}/mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so ${D}${base_libdir}
}
-------------------------------------------------- ------------------------------
这是两个更改,首先从 S 复制到 D 以尝试获取
mDNSResponder-878.200.35/dir 复制到目的地,然后尝试
来自 S 而不是 workdir 的“install -m”命令。
重试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/
~/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 个不需要重新运行
一切都成功了。
这次看到了mdns和878.200.25等的do_compile
再次有 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/
自 2 月 11 日星期四以来仍然没有更新的图像
~/Yocto/imx-yocto-bsp/build-wayland/tmp/deploy/images/imx8mnddr4evk/ .
有人可以纠正我的食谱和我可能犯的任何其他错误吗?是我的吗 do_install()?
在我的 do_install() 中,我有:
安装 -m 0755 ${S}/mDNSResponder-878.200.35/mDNSPosix/build/prod/libdns_sd.so ${D}${base_libdir}
这是为了将它复制到 D 中的 /lib/。我如何正确地将该行写入
复制到/lib/下
~/Yocto/imx-yocto-bsp/build-wayland/tmp/work/aarch64-poky-linux/ 用于链接
到我必须在主机上构建的下一个模块?
同时,我会尝试删除我的
imx-image-multimedia-imx8mnddr4evk-20210211215119.rootfs.wic.bz2 并重做
位烘焙。
...删除
imx-image-multimedia-imx8mnddr4evk-20210211215119.rootfs .tar.bz2 和 .wic.bz2
没有帮助;即使在我重新进行了上述清理和 bitbake 之后,它们也没有被重新创建。
最好的问候,
稍后:后续问题:Where can I obtain the mdns.service file needed for building mDNS in Yocto?