【原创】关于xenomai3 RTnet的一点记录

  1. xenomai3协议栈RTnet支持TCP、UDP,但不支持IGMP;
  2. 对ARP支持有限制:地址解析的延迟会影响数据包传输延迟,RTnet为实时性考虑,路由表设计静态的,只在设置期间配置,或者接收到其他机器A发出的的ARP请求才会将A的路由信息添加到路由表。如果我们访问的IP是未知目标MAC地址,不会发出解析请求,直接报错。如果我们不能配置路由表,这会影响我们作为客户端去连接服务端时,出现找不到服务端。
  3. RTnet TCP作为服务端时,每个服务端端口同时只允许一个客户端连接,这算是什么服务端!!!!
  4. 关于CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP配置说明:
  • CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP启用时:

    • rtproxy 与rtnet设备MAC地址相同

    • RTnet接收的ARP请求由linux接收处理,但rtnet接收到ARP回复会记录到rtroute表中

      即若没有启用rtproxy ,无法ping通rtnet的IP

    • linux路由表

    • rtping不能使用,只能使用linux ping

    • linux发送时,直接通过rtnet网卡发送

    • 对于每一个IP帧,先检查rtnet是否接收,rtnet不接收才转发给rtproxy ,对于rtnet不支持的ip协议,直接转发

  • CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP关闭后:

    • rtproxy 设备MAC地址为 0:0:0:0:0:0,且不支持ARP(dev->flags |= IFF_NOARP),rtproxy 设备不支持组播。
    • RTnet接收的ARP请求由RTnet处理并回复
    • linux发送时,先查询rtroute,然后修改linux发送的数据包,源MAC修改为rtnet设备的MAC,目的MAC为路由表中获取(缺点是rtroute的路由表是静态的)
  1. TCP/IP本就不是实时的,xenomai3全部用rtnet实现可用性太低,但在实际实时以太网应用中,基本只用到二层实时网络收发,不涉及三层及以上协议,所以xenomai4中evl核中基于linux扩展,实时只支持raw packet是非常正确的做法!

  2. 在一些应用场合我们需要控制phy,或者读写phy寄存器信息,但rtnet ioctl没有linux的ioctl全面,没有相关接口,这类接口需要自己在socket.c中添加,同时网卡驱动中同步增加。

更多信息参见:https://source.denx.de/Xenomai/xenomai/-/wikis/RTnet_Basics

posted @ 2023-05-16 18:48  沐多  阅读(533)  评论(0编辑  收藏  举报