关于xenomai3 RTnet的一点记录

简介: Xenomai3的RTnet协议栈支持TCP和UDP,但不包括IGMP,且ARP支持有限,可能导致延迟或错误。服务端仅允许单个客户端连接。启用`CONFIG_XENO_DRIVERS_NET_ADDON_PROXY_ARP`时,RTnet与rtproxy MAC相同,否则rtproxy不支持ARP。TCP/IP的实时性不足,但Xenomai4的EVL核聚焦二层实时网络。更多详情见链接。
  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是非常正确的做法!

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

目录
相关文章
|
5天前
|
Linux 测试技术 API
xenomai内核解析之xenomai初探
本文是关于Xenomai实时操作系统的初探,Xenomai是一个实时性增强的Linux系统,它通过实时内核和用户空间库提供硬实时性能。Xenomai 3主要由实时内核Cobalt、实时驱动模型RTDM、用户空间库libcobalt等组成,支持两种构建实时系统的方式:Cobalt和Mercury。Cobalt在内核空间与标准Linux内核并存,通过I-Pipe处理中断,确保实时任务的执行。Mercury则是通过修改Linux内核实现。
20 0
xenomai内核解析之xenomai初探
|
5天前
|
Linux API 调度
xenomai内核解析-xenomai实时线程创建流程
本文介绍了linux硬实时操作系统xenomai pthread_creta()接口的底层实现原理,解释了如何在双内核间创建和调度一个xenomai任务。本文是基于源代码的分析,提供了详细的流程和注释,同时给出了结论部分,方便读者快速了解核心内容。
21 0
xenomai内核解析-xenomai实时线程创建流程
|
5天前
|
机器学习/深度学习 算法 Linux
xenomai内核解析--实时内存管理--xnheap
Xenomai是一个实时操作系统(RTOS)层,用于Linux,旨在提供确定性的任务调度和服务。其内存管理机制包括一个名为xnheap的内存池,确保内存分配和释放的时间确定性,以满足硬实时系统的严格需求。
45 0
xenomai内核解析--实时内存管理--xnheap
|
5天前
|
API 调度
xenomai内核解析--双核系统调用(三)--如何为xenomai添加一个系统调用
本文介绍了如何在Xenomai中添加自定义系统调用`get_timer_hits()`,该调用用于获取CPU定时器中断次数。首先,在`syscall.h`中定义127号系统调用,并在`clock.h`和`clock.c`中声明和实现该函数。接着,更新libcobalt库以包含新接口。最后,提供了一个示例应用,演示如何在实时任务中使用此系统调用。编译内核和库后,运行示例程序显示定时器中断次数,体现了Xenomai的tickless特性。
18 1
|
5天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
35 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
5天前
|
存储 Linux API
xenomai内核解析--双核系统调用(一)
本文介绍了Xenomai内核系统调用的实现,探讨了在Linux内核与Xenomai实时内核共存时,系统调用如何区分和交互。系统调用是用户空间与内核空间通信的关键,它提供了硬件抽象、系统稳定性、安全性和可移植性。在32位系统中,通过`int 0x80`指令触发,而在64位系统中,使用`syscall`指令。Xenomai通过I-pipe拦截系统调用,区分实时与非实时任务,并通过`cobalt_syscalls`表执行相应操作。文章还详细解析了系统调用表的生成和权限控制机制。
30 1
xenomai内核解析--双核系统调用(一)
|
5天前
|
安全 Linux 调度
xenomai+linux双内核下的时钟管理机制
clock是操作系统正常运行的发动机,系统利用时钟中断维持系统时间、促使任务调度,以保证所有进程共享CPU资源;可以说,“时钟中断”是整个操作系统的脉搏。那你是否好奇xenomai cobalt内核和Linux内核双内核共存的情况下,时间子系统是如何工作的?一个硬件时钟如何为两个操作系统提供服务的?本文将揭开xenomai双核系统时间机制
23 0
xenomai+linux双内核下的时钟管理机制
|
5天前
|
网络协议 Linux 数据处理
xenomai UDD介绍与UDD用户态驱动示例
Xenomai UDD(User-space Device Driver)是一种用户态设备驱动框架,允许用户态程序直接操作硬件,减少内核态切换和数据拷贝,提高实时性和性能。UDD与Linux的UIO(Userspace I/O)类似,主要区别在于中断处理,UDD基于RTDM和Xenomai调度,确保实时中断响应。示例展示了如何使用UDD进行GPIO操作,对比了UDD和RTnet在网卡收发包时的CPU耗时。UDD适用于中断少、重输出的场景,如GPIO输出和网络发包。
30 0
xenomai UDD介绍与UDD用户态驱动示例
|
5天前
|
消息中间件 调度 数据安全/隐私保护
xenomai内核解析--任务同步互斥机制(一)--优先级倒置
本文是关于Xenomai实时操作系统中资源管理和优先级倒置问题的概述。Xenomai使用`xnobject`和`xnregistry`管理任务间的同步互斥资源,如信号量、互斥锁等。资源管理涉及访问控制和资源保存,确保共享资源的正确调度。文章还介绍了优先级倒置现象,即高优先级任务因低优先级任务持有资源而被阻塞。为解决此问题,Xenomai采用了优先级继承策略,临时提升低优先级任务的优先级,以防止持续的优先级反转。文章后续将深入分析`xnsynch`模块和优先级倒置解决方案。
26 1
xenomai内核解析--任务同步互斥机制(一)--优先级倒置
|
存储 算法 Linux
Linux内核32-读-拷贝-更新(RCU)
Linux内核32-读-拷贝-更新(RCU)

热门文章

最新文章