zoukankan      html  css  js  c++  java
  • 【原创】xenomai内核解析之xenomai的组成结构

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

    @

    这是第二篇笔记。

    一、xenomai 3

    从xenomai3开始支持两种方式构建linux实时系统,分别是cobaltmercury

    • cobalt :添加一个实时核,双核结构,具有实时内核cobalt、实时驱动模型RTDM、实时应用POSIX接口库libcobalt,基于libcobalt的其他API skins,如Alchemy APIVxWorks® emulatorpSOS® emulator等。

    • mercury :基于直接修改linux内核源代码的PREEMPT RT,应用空间在glibc之上,添加xenomai API库,如下图所示。在不支持cobalt内核时,可使用该方法运行xenomai应用;当然,也可不需要PREEMPT RT,那么实时性就……

    二、xenomai3 结构

    mercury只是在glibc上加了一层皮,不是接下来研究的对象。我们看cobalt ,从底层硬件驱动、内核空间到用户空间,保证了实时任务的实时性。其整体结构如图所示。


    在内核空间,在标准linux基础上添加一个实时内核Cobalt,得益于基于ADEOS(Adaptive Domain Environment for Operating System),使Cobalt在内核空间与linux内核并存,并把标准的Linux内核作为实时内核中的一个idle进程在实时内核上调度。

    ADEOS (Adaptive Domain Environment for Operating System),提供了一个灵活的环境,可以在多个操作系统之间或单个OS的多个实例之间共享硬件资源,从而使多个优先级域可以同时存在于同一硬件上。早期在xenomai 2上使用。

    2005年6月17日,Philippe Gerum发布用于Linux内核的I-pipe,I-pipe基于ADEOS,但是I-pipe更精简,并且只处理中断,xenomai3使用I-pipe。

    ADEOS ,其核心思想是Domain,也就是范围的意思,linux内核有linux内核的范围,cobalt内核有cobalt内核的范围。两个内核管理各自范围内的应用、驱动、中断;两个domain之间有优先级之分,cobalt内核优先级高于linux内核;I-pipe优先处理高优先级域的中断,来保证高优先级域的实时性。此外,高优先级域可以通过I-pipe 向低优先级域发送各类事件等。

    在用户空间,添加针对实时应用优化的库--libcobalt,libcobalt提供POSIX接口给应用空间实时任务使用,应用通过libcobalt让实时内核cobalt提供服务。

    驱动方面,xenomai提供实时驱动框架模型RTDM(Real-Time Driver Model),专门用于Cobalt,基于RTDM进行实时设备驱动开发,为实时应用提供实时驱动。RTDM将驱动分为2类:

    •字符设备(open/close, read, write, ioctl),如UART,UDD,SPI,Memory,……

    •协议设备(socket, bind, send, recv, etc),如UDP/TCP,CAN,IPC,……

    中断方面,I-Pipe(interrupt Pipeline)分发Linux和Xenomai之间的中断,并以Domain优先级顺序传递中断。I-Pipe传递中断如下图所示,对于实时内核注册的中断,会直接得到处理。对于linux的中断,先将中断记录在i-log,等实时任务让出CPU后,linux得到运行,该中断才得到处理。

    实时内核cobalt与非实时内核linux相结合,既能提供工业级RTOS的硬实时性能,又能利用linux操作系统非常出色的网络和图形界面服务,在产品的开发周期和成本控制方面都有巨大优势 。

    解析系统调用是了解内核架构最有力的一把钥匙,后续文章会以xenomai POSIX接口(libcobalt )为入口,解析xenomai内核。

    参考链接:

    ADEOS

    Adaptive Domain Environment for Operating Systems

    ELC-2018-Xenomai

    Xenomai 3 – An Overview of the Real-Time Framework for Linux

    Real-Time Linux Testbench on Raspberry Pi 3 using Xenomai

  • 相关阅读:
    CPU理论,平均负载和CPU密集型场景
    Dubbo和Zookeeper
    nmon问题定位和LoadRunner结果分析
    混合场景,面向目标的场景和nmon监控
    性能测试场景的学习:controller
    java vuser协议
    LoadRunner脚本开发:操作数据库(六)
    LoadRunner脚本开发:手写SOAP脚本的三种方法(五)
    jmeter脚本开发:jmeter工具的学习(二)
    子Fragment获取父Fragment
  • 原文地址:https://www.cnblogs.com/wsg1100/p/12833126.html
Copyright © 2011-2022 走看看