5

xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(三)--实时与非实时数据交互

 收集于1周前 阅读数 5
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: http://www.cnblogs.com/wsg1100/p/13832697.html

前面两篇文章我们看了xddp在xenomai内核里涉及的数据结构、RTDM对于协议类实时设备的管理方式,以及实时端创建一个XDDP通道后(xddp必须由实时端来创建),实时端与非实时端是如何联系起来的,本文从linux端打开创建好的xddp通道开始,来详细看整个通讯过程。

目录

1.概述

前面两篇文章我们看了xddp在xenomai内核里涉及的数据结构、RTDM对于协议类实时设备的管理方式,以及实时端创建一个XDDP通道后(xddp必须由实时端来创建),实时端与非实时端是如何联系起来的。

JfIvEvN.png!mobile

以上工作做好后,下面可以进行数据交互了,本文从linux端打开创建好的xddp通道开始,来详细看整个通讯过程。

  1. 实时端创建xddp socket,通过bind指定socket使用的端口号,或者给socket设置一个label,端口号自动分配。实时与非实时通过socke使用的端口号来关联,在linux端,端口号即xnpip设备的次设备号。

  2. 通过指定端口通讯时,linux通过直接读写xnpipe设备( /dev/rtpN ,N为端口号)来通讯。使用label时,由于实时端端口号为自动分配,所以只能linux端只能通过读写文件 /proc/xenomai/registry/rtipc/xddp/%s 来通讯, %s 为通讯使用的label。

  3. 非实时向实时端发送数据:通讯过程中,由于xnpipe可看做一个全双工设备,有两个数据链表,命名以实时端为主, inq 表示接收数据报链表(NRT->RT), outq 为发送数据报链表(RT->NRT)。对于linux端,每次发送的数据都作为一个数据报节点插入到链表 inq 尾,实时端读取时从链表头取数据,符合FIFO。

  4. 实时向非实时发送数据,分三种数据:

    • 不带标识的数据包会作为一个单独的数据报节点插入链表 outq 尾。
    • 使用MSG_OOB标识时,表示这是一个紧急的数据,需要优先被linux端读取,这时会作为一个单独的数据报节点插入链表 outq 。liunx端读取时从链表头取数据,所以除MSG_OOB标识的数据外,符合FIFO。
    • 使用MSG_MORE标识时,表示还有数据要与该数据一起发送,暂时不作为单独数据包发送(不放到 outq ),先积累到数据缓冲区,待缓冲区满或者发送的数据没有MSG_MORE时,将整个缓冲区作为一个大的数据包插入链表 outq 尾。

    整个XDDP使用过程中:

    1. 建立xddp通道时,所有数据结构需要的内存均已申请。数据收发过程中,数据交互使用的内存从xnheap申请释放,同步、互斥、唤醒使用的是xenomai内核机制,所以整个通讯由xenomai内核管理,保证了xenomai的实时性;
    2. 对于linux向xenomai发送的数据,xenomai任务在xenomai的调度下能很快读取,看任务具体优先级等。
    3. 对于xenomai发送给linux的数据,如果非实时任务阻塞读,会使用ipip虚拟中断机制APC来通知linux唤醒该任务,待linux得到cpu时,自会处理虚拟中断APC,唤醒接收的非实时任务处理数据,整体框图如下。

N3InU3y.png!mobile

详细的过程见下文。

版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址: https://www.cnblogs.com/wsg1100/


猜你喜欢

  • 9

    xenomai信号 上篇文章讲了linux的信号在内核的发送与处理流程,现在加入了cobalt核,Cobalt内核为xenomai线程提供了信号机制。下面一一解析xenomai内核的信号处理机制。 1 双核下的信号分类 我们已经知道...

  • 3

    xenomai内核解析--实时IPC概述

    版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址: https://www.cnblogs.com/wsg1100/ 目录 1.概述 Linux系统中常见...

  • 25

    本文是基于MySQL5.7.22进行分析1.SQL总体执行流程图通过上面图,可以从全局上了解SQL语句执行流程以及与其他模块交互1.1SQL查询执行流程2.语法解析2.1编程语言知识回顾在介绍具体的MySQL数据库解析SQL之前,先来回归一下编程语言的知识点形式语言(Formallanguage)形...

  • 19

    MYSQL服务器接收SQL格式的查询,首先要对sql进行解析,内部将文本格式转换为二进制结构,这个转换就是解析器,解析的目的是为了让优化器更好的处理指令,以便以最优的路径,最少的耗时返回我们想要的结果。sql解析器的构成:1、词法分析(Lexicalscanner):作用是将...

  • 59

    在FreeBSD-SA-18:12这份安全公告中,FreeBSD修复了一个内核内存泄漏漏洞,该漏洞会影响相关操作系统的所有版本。这个漏洞就是这篇文章的主人公:漏洞CVE-2018-6924,由于FreeBSD内核在解析代码指向的ELF头时,缺少有效验证,此时的本地非...

  • 101

    上一篇我们讲了Java中的数组,其实是为本章的内容做准备的,String这个类是我们在写Java代码中用得最多的一个类,没有之一,今天我们就讲讲它,我们打开String这个类的源码:声明了一个char[]数组,变量名value,声明了一个int类型的变量has

  • 106

    我们通常会用volatile实现一些需要线程安全的代码(也有很多人不敢用,因为不了解),但事实上volatile本身并不是线程安全的,相对于synchoronized,它有更多的使用局限性,只能限制在某些特定的场景。本篇文章的目的就是让大家对 volatile

  • 97

    肿瘤虽然面临困境,一家人仍未放弃希望。毕竟,还有很多没有条件的家庭,因为听信了“小地方”医生的诊断,或因误诊耽误了孩子的病情,或者干脆就放弃了治疗

  • 81

    导语:正如《征途》的创造者史玉柱所言,这是一款适合有钱人的游戏。在这个世界里,欺凌他人的威力和合法的伤害权都标价出售。自古游戏与玩家的“撕逼”之争无非就是这几种:游戏太辣鸡!游戏太氪金!游戏既辣鸡还氪

  • 60

    准确而灵敏的地震仪器,对于快速的定位及预警而言至关重要,但要大量布设这样的设备花费并不小。史丹佛大学的研究人员发现了一个新的方法,可以透过侦测光纤末端讯号些微的变动,来进行震源的定位和强度的判定。这种方法不仅对大地震有效,局部地区的小地震也可以...

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD