mDNS实现之Bonjour与Avahi(二)——win/linux/arm交叉编译

13 篇文章 1 订阅
7 篇文章 1 订阅

0.Part1:

mDNS实现之Bonjour与Avahi(一)——win/linux/arm交叉编译_平凡之路-CSDN博客官网:Bonjour - Apple Developerhttps://developer.apple.com/bonjour/1.WindowsBonjour SDK for Windowshttps://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20Windows下载上面官网sdk,安装(Bonjour服务启动,依赖于mDNSResponder.exe进程),C#在工程中添加COM组件即可使用。 ...https://blog.csdn.net/qq_23958061/article/details/122040336?spm=1001.2014.3001.5501

1.Bonjour

Bonjour - Apple Developer

● 源码(mDNSResponder-878.70.2):https://opensource.apple.com/tarballs/mDNSResponder/

● Bin&SDK:https://developer.apple.com/download/all/?q=Bonjour%20SDK%20for%20Windows

Bonjour

-win

Bonjour

-x86

Bonjour

-arm

1.安装sdk,bonjour(mDNS_responder进程)服务启动

1.编译源码/mDNSPosix文件夹

1.使用交叉编译工具链,编译源码/mDNSPosix文件夹

2.C#调用COM组件-bonjour,或编译源码工程获得可执行文件

2.在mDNSPosix/build/prod/下获得x86下的可执行文件(file查看),启动mdnsd用于服务发现(daemon进程)

libdns_sd.so

 libnss_mdns-0.2.so 

mDNSClientPosix 

mdnsd 

mDNSIdentify 

mDNSNetMonitor

 mDNSProxyResponderPosix 

mDNSResponderPosix

2.同左,生成arm下的可执行文件(file查看)

3.一般情况下client端仅需要browse(仅浏览已被sd发现的服务)而不需要去注册服务,代码参考源码中的DNSServiceBrowser.NET工程(browse验证:

.net工程界面浏览或dns-sd -B浏览

client验证:dns-sd.exe -R my_pc _my_type_upper._udp local 8889 "i am pc"

3.编译源码/Clients文件夹,在/Clients/build下获得x86可执行文件dns-sd

(browse验证:./dns-sd -B _my_type._udp local

client验证:./dns-sd -R my_pc _my_type._udp local 8889 "i am x86 board"

3.同左,生成arm下的dns-sd

*4.是否需要上位机创建client并注册服务,取决于业务逻辑,即目标服务端是否同样通过browse获取上位机要传递的信息(嵌入式设备通过串口、以太网等)

4.client端实现browse代码参考mDNSPosix下的Client.c、ExampleClientApp.c、ExampleClientApp.h;而注册服务,可以在进程中调用dns-sd输入参数控制修改(可以减少代码以及熟悉接口成本),以接收上位机注册信息,并在处理后重新注册变更后的服务

4.同左

2.Avahi

● 作为了解的源码(nss-mdns):https://github.com/lathiat/nss-mdns

● 源码(avahi):https://github.com/lathiat/avahi

Avahi

-x86

Avahi

-arm

1.安装sdk(apt install avahi-加两次tab,如下——但不包含client实现:

hxx@ubuntu:~$ apt install avahi-

avahi-autoipd   avahi-daemon    avahi-discover  avahi-dnsconfd  avahi-ui-utils  avahi-utils),或对源码进行编译获得

1.——

2.avahi-0.7源码工程中没有直接提供Makefile文件

●首先需要参考:

Makefile.am和makefile.in生成Makefile_Bendawang's Blog-CSDN博客_makefile.am文件生成makefile

生成Makefile

●示例(disable掉不用的或者当前环境缺少的,如qt3等):

./configure --disable-qt3 --disable-qt4 --disable-gtk3 --disable-gdbm --disable-python --disable-pygobject --disable-mono

2.生成arm版Makefile(生成在build-arm下):

./configure --disable-qt3 --disable-qt4 --disable-gtk3 --disable-gdbm --disable-python --disable-pygobject --disable-mono --prefix=$(pwd)/bulid-am --host=arm --with-distro=none

3.make install,头文件被安装到/usr/local/include/,

库被默认安装到/usr/local/lib/下(编译client需要用到):

libavahi-client.a

libavahi-client.la

libavahi-client.so -> libavahi-client.so.3.2.9

libavahi-client.so.3 -> libavahi-client.so.3.2.9

libavahi-client.so.3.2.9

libavahi-common.a

libavahi-common.la

libavahi-common.so -> libavahi-common.so.3.5.3

libavahi-common.so.3 -> libavahi-common.so.3.5.3

libavahi-common.so.3.5.3

libavahi-core.a

libavahi-core.la

libavahi-core.so -> libavahi-core.so.7.0.2

libavahi-core.so.7 -> libavahi-core.so.7.0.2

libavahi-core.so.7.0.2

libavahi-glib.a

libavahi-glib.la

libavahi-glib.so -> libavahi-glib.so.1.0.2

libavahi-glib.so.1 -> libavahi-glib.so.1.0.2

libavahi-glib.so.1.0.2

libavahi-gobject.a

libavahi-gobject.la

libavahi-gobject.so -> libavahi-gobject.so.0.0.5

libavahi-gobject.so.0 -> libavahi-gobject.so.0.0.5

libavahi-gobject.so.0.0.5

libavahi-ui.a

libavahi-ui.la

libavahi-ui.so -> libavahi-ui.so.0.1.4

libavahi-ui.so.0 -> libavahi-ui.so.0.1.4

libavahi-ui.so.0.1.4

3.实际的交叉编译过程中可能存在交叉编译工具链sdk中缺少.so缺少的情况,可能需要提供工具链的同事协助进行更新

4.client验证:

●将client-browse-services.c中需要browse的协议类型进行修改,如:_my_type._udp

●编译client:

gcc -o main_x86 client-browse-services.c /usr/local/include/avahi-client/*.h /usr/local/lib/*.so

●运行./main_x86,示例:

hxx@ubuntu:~/0_git_dev/common/avahi-client-hxx/x86_build$ ./main_86

(Browser) NEW: service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local'

(Browser) CACHE_EXHAUSTED

(Browser) ALL_FOR_NOW

Service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local':

        HXX-PC.local:8889 (192.168.109.1)

        TXT="i am pc"

        cookie is 0

        is_local: 0

        our_own: 0

        wide_area: 0

        multicast: 1

        cached: 1

4.client的demo尝试:
●将内核工程师提供的libavahi-client.so、libavahi-common.so、libavahi-core.so、libavahi-glib.so、libavahi-gobject.so拷贝到工具链的lib目录下

●source到交叉编译工具链环境变量文件

●使用环境变量中$CC对应编译器对demo进行编译:

$CC -o mdns_browser_arm client-browse-services.c  -lavahi-client -lavahi-common -lavahi-core -lavahi-glib -lavahi-gobject

●拷贝到arm板卡中运行(前提是avahi-daemon进程运行中,同时也代表运行环境ok)

root@eh9301_7ev1156:~# ./mdns_browser_arm

(Browser) NEW: service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local'

(Browser) CACHE_EXHAUSTED

(Browser) ALL_FOR_NOW

Service 'hxx_pc' of type '_EH2302_UPPER._udp' in domain 'local':

        HXX-PC.local:8889 (172.100.19.134)

        TXT="i am pc222"

        cookie is 0

        is_local: 0

        our_own: 0

        wide_area: 0

        multicast: 1

        cached: 1

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值