首页 > 系统相关 >5.3.1 Xenomai3:libcobalt库和API/Skin分析

5.3.1 Xenomai3:libcobalt库和API/Skin分析

时间:2024-12-20 11:26:55浏览次数:7  
标签:libcobalt 5.3 Xenomai3 create 接口 POSIX skin

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

5.3 Xenomai进程和线程的创建

5.3.1 Xenomai3:libcobalt库和API/Skin分析

结合官方网址Overview :: Xenomai 3的一章图来分析。里面的颜色和文字都是精工细琢的。

(1)蓝色部分Cobalt core

如图中蓝色部分所示,”Cobalt core”是Xenomai3中实时内核的名字,运行在kernel space。Cobalt是金属元素钴的英文名称,它的元素符号是Co,刚好与co-kernel相同,有点意思吧!大家注意过吗,Xenoami官网的主题色就是蓝色的。

(2)红色部分libcobalt

如图中红色部分所示,Xenomai3在用户层定义了libcobalt库,通过系统调用与内核层的Cobalt core沟通。系统调用的定义参考《5.2 ARM64 Xenomai系统调用》。

特别注意一下旁边括号里面的文字备注(POSIX subset + extensions)。

其一,POSIX subset表明仅支持POSIX的子集,以lib/cobalt/thread.c中创建线程接口为例,通过COBALT_IMPL宏来定义pthread_create的语义("http://www.opengroup.org/onlinepubs/000095399/functions/pthread_create.html")。展开后,实际定义了一个函数为__wrap_pthread_create,同时定义了一个别名__cobalt_pthread_create。

其二,extensions表明cobalt有自己的扩展,例如进一步调用pthread_create_ex函数!

总而言之,libcobalt为应用程序提供了posix接口,也被称为posix skin!后面都用posix skin的术语。

(3)橙色部分copperplate interface

libcobalt提供了posix skin,那如果现有的应用程序是基于Xenomai2/native、vxworks、psos等non-POSIX real-time API写的,怎么办?移植起来工作量很大!

Xenomai3实现一个接口转换层即copperplate interface,可以把其它接口(也称为skin)转换为libcobalt提供的posix skin。默认情况下,Copperplate会自动初始化(Auto-initialization),其它接口可以正常工作。

单词copperplate的本意是铜版印刷体,是一种优美圆润的英文书法字体,感觉这个名字非常的无厘头。但是单看copper时,就恍然大悟了。

单词copper是金属铜的意思,纯铜是柔软的金属,表面刚切开时为红橙色。三原色中的红色混合黄色,得到的就是橙色,与上图中表达的意思完全一致!

另外,铜元素也是过渡元素,这个“过渡”二字是不是非常符合copperplate interface的定位?

(4)黄色部分non-POSIX real-time API

从字面理解,non-POSIX real-time API就很简单了,包括Xenomai2/native、vxworks、psos等接口。在Xenomai3中实现了这些接口,只不过是用了“模拟”的手段,实际是通过copperplate interface转换为posix skin的调用!不同的接口,也称为不同skin,列如native skin、vxworks skin、psos skin等。

以Xenomai2/native接口为例,此接口在Xenomai3中的名字是alchemy(炼金术),定义在lib/alchemy目录。

仍然以创建线程为例:rt_task_create调用copperplate_create_thread,再间接调用pthread_create_ex函数。

(5)白色部分Applications

Applications有很多种skin可以选择,包括libcobalt提供的原生posix skin,以及模拟出来的alchemy skin、native skin、vxworks skin、psos skin等等。

在编译和链接阶段,具体要怎么使用不同的skin呢? xeno-config横空出世!

xeno-config是一个辅助脚本,用于为使用Xenomai库的应用程序提供正确的编译和链接标志。通过这个工具,开发者可以轻松获取所需的编译器选项和链接器参数,确保应用程序能够正确地集成到Xenomai环境中。

对于不同的API或特性集,如Cobalt、POSIX、Alchemy等,xeno-config可以通过传递特定的参数来调整输出的编译和链接标志。

注意,如果是交叉编译环境,在执行xeno-config之前,需让DESTDIR指向xenomai的安装目录。下面的例子中,xenomai-v3.2.1编译后,通过make install安装到了~/ipipie-arm64/xenomai_install目录。

在不同场景下如何获取编译和链接标志,参考《5.3.2 Xenomai3:使用xeno-config获取编译和链接参数》 。

点击查看系列文章 =》 Interrupt Pipeline系列文章大纲-CSDN博客

原创不易,需要大家多多鼓励!您的关注、点赞、收藏就是我的创作动力!

标签:libcobalt,5.3,Xenomai3,create,接口,POSIX,skin
From: https://blog.csdn.net/aspirestro/article/details/144606808

相关文章

  • 白骑士的JavaScript教学生态系统篇之现代前端开发流程 5.3.4 持续集成与部署(CI/CD)
            在现代软件开发中,持续集成与持续部署(CI/CD)已经成为提高开发效率、确保软件质量的关键流程。CI/CD不仅能够自动化代码的构建、测试和部署,还能帮助开发团队快速地将新功能和修复发布到生产环境。本文将深入探讨CI/CD的概念、优势、常用工具以及如何在JavaScript......
  • 5.3、Python 匿名函数与 Lambda 表达式
    大家好,欢迎来到Python小白入门课程!今天我们要学习的是一个非常方便的工具:匿名函数和Lambda表达式。1.什么是匿名函数?在Python中,我们通常使用def关键字来定义一个函数,例如:defadd(x,y):"""这个函数计算两个数的和"""returnx+yresult=add(3,5)......
  • GitLab 发布安全补丁版本17.6.1, 17.5.3, 17.4.5
    本分分享极狐GitLab补丁版本17.6.1,17.5.3,17.4.5的详细内容。这几个版本包含重要的缺陷和安全修复代码,我们强烈建议所有私有化部署用户应该立即升级到上述的某一个版本。对于极狐GitLabSaaS,技术团队已经进行了升级,无需用户采取任何措施。极狐GitLab正式推出面向GitLab......
  • 电影《749局》迅雷BT下载/百度云下载资源[MP4/2.12GB/5.35GB]超清版
    电影《749局》:近未来的冒险与成长之旅电影《749局》是一部融合了科幻、冒险与奇幻元素的电影,由陆川编剧并执导,王俊凯、苗苗、郑恺、任敏、辛柏青领衔主演,李晨特邀主演,张钧甯、李梦、杨皓宇特别主演。该片于2024年10月1日在中国大陆上映,以其独特的科幻设定、宏大的视觉效果和......
  • Spring Cloud 5.3: 将多工程整合成多模块工程-构建配置抽象
    我们已经将EurekaService工程和Gateway工程分别做成了demo-springcloud工程的两个模块,到这有一个不大不小的问题:有一些配置及依赖是每个模块都会用到的,难道每新建一个模块都要重新拷贝一遍配置?答案当然是NoNoNo!我们可以把一些通用的配置及依赖项抽象到父级模块(或者顶级的工程)下,......
  • Affinity Photo 2.5.3.2516 x64 (照片编辑) 授权版
    AffinityPhoto是全球数百万创意和摄影专业人士的首选。这款备受赞誉的图像编辑软件拥有令人难以置信的速度、功能和精度,可以满足您编辑和修饰照片、创建多图层构图、精美的栅格绘图等一切需要。该版本已授权,可以免费使用。软件截图:使用说明:1、将压缩文件解压到某固定位......
  • 25版王道数据结构课后习题详细分析 第五章 树与二叉树 5.3 二叉树的遍历和线索二叉树
    一、单项选择题————————————————————————————————————————解析:二叉树中序遍历的最后一个结点一定是从根开始沿右子女指针链走到底的结点,设用p指示。若结点p不是叶结点(其左子树非空),则前序遍历的最后一个结点在它的左子树中,A、B......
  • Go 使用gRPC协议操作RocketMQ 5.3
    docker-compose安装RocketMQdocker-compose.ymlversion:'3.8'services:namesrv:image:apache/rocketmq:5.3.0container_name:rmqnamesrvports:-9876:9876networks:-rocketmqcommand:shmqnamesrvbroker:i......
  • 【Tarjan缩点】USACO5.3 校园网Network of Schools】
    [P2746USACO5.3]校园网NetworkofSchools大意:一个图可能有环a:求deg入度为0的点的个数b:至少加多少条边让图所有点可以互相到达思路:看代码#include<cstdio>#include<queue>#include<deque>#include<stack>#include<map>#include<cmath>#include<algorit......
  • 报错:2024-08-12T18:39:35.313+08:00 ERROR 29668 --- [demo2] [ main] o.s.
    org.springframework.beans.factory.BeanDefinitionStoreException:Failedtoparseconfigurationclass[com.example.demo.DemoApplication]atorg.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:179)~[spring-con......