精华内容
下载资源
问答
  • avahi
    千次阅读
    2021-06-15 22:24:25

    mDNS/DNS-SD教程(avahi使用)

    1、mDNS/DNS-SD简介

    mDNS/DNS-SD是用于本地局域网服务发现的协议,标准文档为RFC6762(mDNS)RFC6763(DNS-SD),在Apple 的设备上(电脑,笔记本,iphone,ipad等设备)都提供了这个服务(Bonjour)。

    mDNS/DNS-SD有以下几种免费实现方式:

    本文在Linux上使用avahi演示mDNS/DNS-SD的服务发现。

    2、avahi安装

    Ubuntu、Debian可使用下述指令安装:

    sudo apt-get install avahi-deamon avahi-utils
    # 无法安装可以试试:sudo apt-get install avahi
    

    Manjaro可以使用:

    sudo pacman -S avahi
    

    avahi安装完成后,可以使用sudo systemctl status avahi-daemon.service查看avahi-daemon服务是否开启,如果开启,Active状态为active (running)

    $: sudo systemctl status avahi-daemon.service                      
    [sudo] sworld 的密码:
    ● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
         Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; disabled; ve>
         Active: active (running) since Mon 2021-06-07 14:49:09 CST; 30min ago
    TriggeredBy: ● avahi-daemon.socket
       Main PID: 118840 (avahi-daemon)
         Status: "avahi-daemon 0.8 starting up."
          Tasks: 2 (limit: 19028)
         Memory: 1.2M
         CGroup: /system.slice/avahi-daemon.service
                 ├─118840 avahi-daemon: running [xiaomi-manjaro.local]
                 └─118841 avahi-daemon: chroot helper
    
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: New relevant interface lo.>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Joining mDNS multicast gro>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: New relevant interface lo.>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Network interface enumerat>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Registering new address re>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Registering new address re>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Registering new address re>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Registering new address re>
    6月 07 14:49:09 xiaomi-manjaro avahi-daemon[118840]: Registering new address re>
    6月 07 14:49:10 xiaomi-manjaro avahi-daemon[118840]: Server startup complete. H>
    lines 1-22/22 (END)
    

    如果没有开启,可以使用下述命令开启服务:

    sudo systemctl start avahi-daemon.service 
    

    3、avahi使用

    上文中介绍了如何开启avahi-daemon服务,avahi-daemon是负责协议正确运行的主要进程,负责接口和网络的任何配置,用户可以通过命令行或者D-bus对其进行操作,接下来主要介绍第一种方法。更多使用方法见http://www.avahi.org/wiki/Bindings

    发布服务

    服务发布命令为avahi-publish-service,语法如下:

    avahi-publish-service SERVICE-NAME _APPLICATIONPROTOCOL._TRANPOSRT-PROTOCOL PORT "DESCRIPTION" --sub SUBPROTOCOL
    
    • SERVICE-NAME:服务名称
    • _APPLICATIONPROTOCOL._TRANPOSRT-PROTOCOL:应用协议+传输协议
    • PORT:使用端口号
    • "DESCRIPTION":服务描述
    • SUBPROTOCOL:订阅协议

    实例:

    avahi-publish-service light _coap._udp 5683 "/mylight" --sub _floor1._sub._coap._udp
    

    该实例发布了一个名为“light”的服务,该服务基于UDP使用CoAP协议,使用端口号为5683,可以通过_coap._udp或者_floor1._sub._coap._udp发现该服务。

    [注意]:发布avahi-publish-service时,如果成功,服务进程将会保持前端运行,如果该进程被杀死(按下 Ctrl+C),服务也会停止,所以在运行服务时,请保持命令终端独立运行,或者后台运行服务(命令末尾添加&)。同时需要关闭无用的服务。

    发现服务

    服务发现命令为avahi-browse,语法如下:

    avahi-browse [options] service-type
    
    • [options]:选项字节
      • -a:发现并列出所有服务类型
      • -r:自动解析服务
      • -p:以可解析形式显式输出
      • -t:完成一轮发现后立即终止。默认情况下,会保留avahi-browse,并不断寻找匹配的服务。
    • service-type:服务类型

    4、示范

    先打开一个终端,开启mDNS/DNS-SD服务:

    $: avahi-publish-service light _coap._udp 5683 "/mylight" --sub _floor1._sub._coap._udp
    Established under name 'light'
    

    再打开另外一个终端用于发现服务,发现所有CoAP服务器并自动解析它们:

    $: avahi-browse -rt _coap._udp                                    + docker0 IPv4 light                                         _coap._udp           local+ enp0s31f6 IPv6 light                                         _coap._udp           local+ enp0s31f6 IPv4 light                                         _coap._udp           local+     lo IPv4 light                                         _coap._udp           local= docker0 IPv4 light                                         _coap._udp           local   hostname = [xiaomi-manjaro.local]   address = [172.17.0.1]   port = [5683]   txt = ["/mylight"]= enp0s31f6 IPv4 light                                         _coap._udp           local   hostname = [xiaomi-manjaro.local]   address = [192.168.31.190]   port = [5683]   txt = ["/mylight"]=     lo IPv4 light                                         _coap._udp           local   hostname = [xiaomi-manjaro.local]   address = [127.0.0.1]   port = [5683]   txt = ["/mylight"]= enp0s31f6 IPv6 light                                         _coap._udp           local   hostname = [xiaomi-manjaro.local]   address = [fe80::96cb:d44b:b1e1:4c71]   port = [5683]   txt = ["/mylight"]
    

    或者在floor1下发现CoAP服务,并以可分析的格式显示:

    $: avahi-browse -rtp _floor1._sub._coap._udp                      +;docker0;IPv4;light;_coap._udp;local+;enp0s31f6;IPv6;light;_coap._udp;local+;enp0s31f6;IPv4;light;_coap._udp;local+;lo;IPv4;light;_coap._udp;local=;enp0s31f6;IPv6;light;_coap._udp;local;xiaomi-manjaro.local;fe80::96cb:d44b:b1e1:4c71;5683;"/mylight"=;enp0s31f6;IPv4;light;_coap._udp;local;xiaomi-manjaro.local;192.168.31.190;5683;"/mylight"=;docker0;IPv4;light;_coap._udp;local;xiaomi-manjaro.local;172.17.0.1;5683;"/mylight"=;lo;IPv4;light;_coap._udp;local;xiaomi-manjaro.local;127.0.0.1;5683;"/mylight"
    

    参考链接

    更多相关内容
  • airprint-generate.py 该脚本将为共享的CUPS打印机生成avahi .service文件。 该脚本将连接到CUPS服务器,并且对于配置并标记为共享的每台打印机,将为avahi生成一个与Apple的AirPrint公告兼容的.service文件。 可以...
  • dns2avahi:DNS到Avahi网关

    2021-03-22 12:13:00
    DNS到Avahi网关该项目提供了通过发布和解析多播DNS中普通DNS区域的工具。 程序从DNS服务器下载整个DNS区域,并通过本地Avahi守护程序实例将其所有资源记录发布到多播DNS。 程序为 DNS解析器实现扩展模块,该模块可...
  • avahi-0.7.tar.gz

    2019-07-18 20:56:52
    avahi-0.7.tar.gz 源代码 avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程。 该服务可以为Zeroconf网络实现DNS服务发现及DNS组播规范。 用户程序通过Linux D-Bus...
  • 离线安装包,测试可用
  • 离线安装包,测试可用
  • docker run -d -v /var/run/dbus:/var/run/dbus ianblenke/avahi 这会将 docker 主机的$(hostname).local广播到本地段,以及在 dbus 上发现的服务的资源记录。 您可能需要添加 dbus 策略以允许 org.freedesktop....
  • 官方离线安装包,亲测可用
  • 官方离线安装包,亲测可用
  • avahi-autoip 嵌入式设备局域网自动配置网络IP地址
  • avahi 测试 在 Raspberry Pi 上测试 Avahi/Bonjour 服务发现 参考文档 在 Raspberry Pi (Debian Wheezy) 上使用 Avahi 让我们看看已有哪些 Debian 软件包可用。 sudo apt-cache search avahi | grep -i ' ^avahi- ...
  • avahi-0.7.zip

    2019-10-24 14:44:52
    avahi-0.7 源代码 avahi-daemon是一种Linux操作系统上运行在客户机上实施查找基于网络的Zeroconf service的服务守护进程。 该服务可以为Zeroconf网络实现DNS服务发现及DNS组播规范。 用户程序通过Linux D-Bus信息...
  • 离线安装包,测试可用
  • QtZeroConf 使用 Avahi 库,该库实现了 Apple Zeroconf 规范,以通过 mDNS/DNS-SD 协议套件促进本地网络上的服务发现。 QtZeroConf 包括: ZConf服务 允许使用 Qt 的事件循环系统构建的服务器应用程序在局域网上...
  • ansible-avahi:Avahi的角色

    2021-05-07 13:49:51
    角色变量下面列出了可用的变量以及默认值(请参见defaults/main.yml ): avahi_hostname: "{{ ansible_hostname }}"avahi_domain: "local"avahi_useipv4: "yes"avahi_useipv6: "no"avahi_install_utils: false依存...
  • 离线安装包,亲测可用
  • 官方离线安装包,亲测可用
  • 用于Erlang的mDNS库 用于Erlang的多播DNS库。 这使您可以通过与DNS用于单播DNS相同的协议来自动配置小型网络。
  • 离线安装包,亲测可用
  • 离线安装包,亲测可用
  • 1.实现macos系统备份;2.实现macos系统批量装机;3.搭建外部TimeMachine。
  • 离线安装包,亲测可用
  • 离线安装包,亲测可用
  • 离线安装包,亲测可用
  • 卓悦反射镜关于这个项目Bonjour反射器使Bonjour设备(例如打印机,Chromecast或Spotify Connect扬声器)可以被位于不同VLAN上的其他设备发现和使用。 与等其他工具相比,Bonjour-reflector可以更精细地控制如何在...
  • 风帆-生成-avahi 用于 Sails 命令行界面的avahi生成器。 它生成一个钩子,在使用系统 DBUS 的提升期间发布 Avahi 服务。 服务的所有方面,如名称、类型和端口都可以在config/avahi.js中config/avahi.js 。 某些...
  • ubuntu avahi用法

    千次阅读 2021-04-23 10:21:47
    ubuntu avahi用法 在 ubuntu 16.04 中已经自带 avahi 服务了 如果没有 请使用 下面命令 安装 sudo apt-get install avahi-daemon sudo apt-get install avahi-utils http://avahi.org/ ...

    ubuntu avahi用法

    在 ubuntu 16.04 中已经自带 avahi 服务了

    如果没有 请使用 下面命令 安装
    sudo apt-get install avahi-daemon
    sudo apt-get install avahi-utils

    http://avahi.org/
    http://en.wikipedia.org/wiki/Avahi_%28software%29

    service avahi-daemon stop

    可以查看局域网内所有的mdns服务,

    avahi-browse -a

    使用 avahi-browse 命令行程序 /usr/bin/avahi-browse
    使用 avahi-browse 命令行程序执行以下操作:
    在网络上浏览以查找所有 mDNS 广播
    对执行广播的设备的主机名和 IP 地址进行解析

    11

    我的机器没有无线设备,只作为文件服务器、下载服务器使用,所以应该关闭avahi-daemon
    停止服务
    systemctl stop avahi-daemon.socket
    systemctl stop avahi-daemon.service
    停止自动启动
    systemctl disable avahi-daemon.socket
    systemctl disable avahi-daemon.service

    将avahi移植到arm-linux

    1.两个tar包

    libdaemon-0.14.tar.gz

    avahi-0.6.31.tar.gz

    2.先编译libdaemon

    tar zxvf libdaemon-0.14.tar.gz
    cd libdaemon-0.14/

    ./configure --host=arm-avl-linux-gnueabi --prefix=/home/xxx/airplay/avahi/daemon_arm_prefix

    make

    make install

    3.编译avahi

    tar zxvf avahi-0.6.31.tar.gz

    cd avahi-0.6.31/

    ./configure --host=arm-avl-linux-gnueabi --prefix=/home/xxx/airplay/avahi/avahi_arm_prefix --with-distro=none --localstatedir=/ var --disable-gdbm LIBDAEMON_CFLAGS="-I/home/xxx/airplay/avahi/daemon_arm_prefix/include" LIBDAEMON_LIBS="-L/home/xxx/airplay/avahi/daemon_arm_prefix/ lib -ldaemon -L/home/project/mpxx/gst/lib" --disable-qt3 --disable-qt4 --disable-gtk --disable-gtk3 --disable-python --disable-mono GOBJECT_LIBS="-L/home/ project/mpxx/gst/gst_1.0.5/lib -lgobject-2.0" GLIB20_CFLAGS="-I/home/project/mpxx/gst/include/glib-2.0" GLIB20_LIBS="-L/home/project/mpxx/gst/lib -lglib-2. 0"

    然后修改avahi-daemon/Makefile

    将sysconfdir = $(prefix)/etc

    改为sysconfdir = /etc

    再执行make命令

    make之后再修改avahi-daemon/Makefile

    将sysconfdir = /etc

    改为sysconfdir = $(prefix)/etc

    然后make install

    (这样做是为了避免编译程序时将编译时的路径带进去,在板子上运行时会出现错误的路径)

    11

    Avahi 是Zeroconf规范的开源实现,常见使用在Linux上。它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。

    它跟 mDNS 一样。包含了一整套多播DNS(multicastDNS)/DNS-SD网络服务的实现。

    它使用的发布授权是LGPL。Zeroconf规范的另一个实现是Apple公司的Bonjour程式。Avahi和Bonjour相互兼容。

    Avahi允许程序在不需要进行手动网络配置的情况下,在一个本地网络中发布和获知各种服务和主机。例如,当某用户把他的计算机接入到某个局域网时,如果他的机器运行有Avahi服务,则Avahi程式自动广播,从而发现网络中可用的打印机、共享文件和可相互聊天的其他用户。这有点象他正在接收局域网中的各种网络广告一样。Linux下系统实际启动的进程名,是avahi-daemon

    11

    ## 发现所有已注册的服务
    avahi-browse -a -r
    
    ## 发现某个类型的服务的返回包
    avahi-browse -r "xxx"
    
    -xxx是指服务类型,如_http._tcp
    
    

    mDNS

    http://www.ietf.org/rfc/rfc6762.txt
    Multicast DNS and DNS Service Discovery are technologies that allow you
    to register IP-based services and browse the network for those services.
    For more information about mDNS, see the mDNS web site.

    http://www.multicastdns.org/

    mDNSPosix

    ReadMe About mDNSPosix

    mDNSPosix is a port of Apple’s Multicast DNS and DNS Service Discovery
    code to Posix platforms.

    Multicast DNS and DNS Service Discovery are technologies that allow you
    to register IP-based services and browse the network for those services.
    For more information about mDNS, see the mDNS web site.

    http://www.multicastdns.org/

    Multicast DNS is part of a family of technologies resulting from the
    efforts of the IETF Zeroconf working group. For information about
    other Zeroconf technologies, see the Zeroconf web site.

    http://www.zeroconf.org/

    Apple uses the trade mark “Bonjour” to describe our implementation of
    Zeroconf technologies. This sample is designed to show how easy it is
    to make a device “Bonjour compatible”.

    The “Bonjour” trade mark can also be licensed at no charge for
    inclusion on your own products, packaging, manuals, promotional
    materials, or web site. For details and licensing terms, see

    http://developer.apple.com/bonjour/

    The code in this sample was compiled and tested on Mac OS X (10.1.x,
    10.2, 10.3), Solaris (SunOS 5.8), Linux (Redhat 2.4.9-21, Fedora Core 1),
    and OpenBSD (2.9). YMMV.

    [从0到1搭嵌入式工程]局域网自动发现功能,苹果Bonjour/mdnsResponder移植

    在局域网内通信,就必须知道对方的IP地址和端口,苹果开源的mdnsResponder,就是利用mdns组播协议,通过服务域名,来获取相应ip地址的一种方式。

    比如我们有一个摄像头,在联网的情况下,同一个局域网下的app想发现这个摄像机,并和摄像机建立联系。

    这样一个需求,需要摄像头调用mDNS_Register,通过传参告知mdns库,在指定的port上注册一个did._ipcxx._tcp.local的服务, 然后自己开一个socket,绑定port口,等待来自APP的数据。

    APP要去找摄像机,所以调用DNSServiceBrowse,传入服务类型_ipcxx._tcp和域local, 在局域网内就能找到一条 did._ipcxx._tcp.local的服务, 再调用DNSServiceResolve,就可以得到ipc的主机名和端口号, 通过主机名,调用gethostbyname,就可以获取到摄像机的ip地址。 服务的名字使用摄像机的did,方便app应对多个摄像机,同时方便验证合法性。

    有了ip和port,就可以创建一个socket,去连接到摄像头,就开始发送数据了。

    至此,一个局域网自动发现功能就完成了,我们不需要了解mdns组播协议,仅仅调用苹果的api,就获取到了想要的摄像机的ip。

    下面介绍苹果开源源码的移植和它的demo代码。

    源码地址在:https://opensource.apple.com/tarballs/mDNSResponder/, 版本为:mDNSResponder-878.30.4.tar.gz

    解压后目录结构:

    在这里插入图片描述
    这里面有针对不同系统的文件夹,我们不需要关心,用得上的是mDNSPosix/mDNSCore/mDNSShared三个目录。

    建议读本目录和mDNSPosix下的README.TXT,里面说的很细致。

    我们是Linux系统,所以进到mDNSPosix目录, 里面的各个文件我们暂时也不需要关心,这是好几个应用程序的源代码。

    执行 make os=linux, 先在我们的x86linux上编译一遍, 如果你想在linux上直接调试,可以执行sudo make install os=linux, 他会安装并执行一个mdnsd的应用程序,是mDNS的常驻进程,常用调试应用dns-sd,就需要依赖这个程序才能实现mdns服务发现,参见readme文件。

    在…/Clients/build目录下,执行./dns-sd就能看到命令选项, 可以注册一个service,可以再开一个shell,同样执行./dns-sd 去发现刚才注册的服务。调试很好用。

    但是最终要把mdns移植到我们的嵌入式linux上,所以我们不能用mdnsd, 也不用dns-sd。

    在/mDNSPosix/Makefile中, 需要我们直接修改工具链和编译参数,在build下编译出可以在嵌入式设备上运行的程序。
    在这里插入图片描述
    图不好修改了,在图中LD后面添加STRIP = arm-linux-strip, 否则编译不过。

    刚才的make中os参数是必须的,我们指定linux,就会到这里来,在这里我们可以定义我们自己的arm gcc,可以加我们自己的编译选项CFLAGS, 同时去掉CFLAGS_OS中的-DHAVE_IPV6 -DTARGET_OS_LINUX。

    rm -rf objects, 删除前一次的编译文件。同样 make os=linux,直到编译成功。在build/prod目录下,就是我们生成的可执行文件,嵌入式设备上,执行mDNSClientPosix, 就可以看到同一个局域网下,你刚才在linux上用dns-sd注册的服务, 执行mDNSResponderPosix,就可以注册一个服务。查看代码client.c 和 responder.c,你会了解服务注册和搜索的过程。

    这个responder.c,就是我们嵌入式设备所需要的base代码,你自己的应用逻辑,都可以在这里实现。

    怎么把它移植到我们自己的代码库中?

    编译的时候,在编译mDNSResponderPosix时,会打印出它所依赖的.c文件,把这些.c文件单独摘出来,把.h文件也拿出来,单独见一个目录,就可以使用这些.c文件,执行自己的make,生成responder可执行文件了。

    至此,整个移植的过程就结束了。

    调试过程中,通过对client.c responder.c Clinents/dns-sd.c的学习,就会了解各个接口的应用,从而融会贯通。

    展开全文
  • 此脚本将为共享 CUPS 打印机生成 avahi .service 文件。 此脚本将连接到 CUPS 服务器,并且对于配置并标记为共享的每台打印机,将为 avahi 生成一个与 Apple 的 AirPrint 公告兼容的 .service 文件。可以使用任何...
  • avahi-autoipd-0.6.25-11.el6.i686.rpm是centos工具包。
  • 安装sdk(apt install avahi-加两次tab,如下——但不包含client实现: hxx@ubuntu:~$ apt install avahi- avahi-autoipd avahi-daemon avahi-discover avahi-dnsconfd avahi-ui-utils avahi-utils),或对源码...

    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

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,616
精华内容 3,446
关键字:

avahi

友情链接: eccalgo_040624.rar