点击查看系列文章 =》 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