140
社区成员
发帖
与我相关
我的任务
分享一. Dovetail介绍
多年来,使用 Linux 作为轻量级软件内核的宿主并能专门提供极短且有限的响应时间,一直是嵌入式领域支持实时应用的流行方式。
使用 Linux 作为轻量级主机的这种双内核设计使 Linux 内核中引入了一个小型实时架构,使它可以独立于正在进行的通用内核工作并能够立即处理out-of-band任务。由架构共同管理的应用线程仍然受益于通用内核服务,例如虚拟内存管理;这些应用程序也可以利用 Linux 提供的丰富 GPOS 功能集,例如网络、数据存储或 GUI。
将实时核与 GPOS 架构分开有很多好处:
换种说法,您是否会假设 glibc 中的每个例程仅凭运行于在本机中的抢占系统而具有实时能力?您当然不会,因此在任何情况下您都会仔细选择实时程序需要调用的服务集以满足时间关键的工作需求。出于这个原因,通过提供一套紧凑的、专用的 API 来提供一组专门针对实时使用的服务显然是有价值的而不是一种限制。
Dovetail是一套内核接口,它将高优先级执行阶段机制引入主内核逻辑。任何时候,在这个阶段运行的out-of-band工作都可以抢占通用的工作。特定任务的软件内核——例如实时内核——可以连接到这个接口,以获得对外部中断的有界响应时间和超低延迟调度能力。这转化为 Dovetail 实现如下:
虽然实现一个自治实时内核可能需要这两层,但在移植 Dovetail 的早期阶段只需要启用中断管道。对交替调度的支持建立在后者的基础上,并且可能也应该被推迟到管道在目标架构或平台上完全正常运行后。代码库是允许以这种增量过程的方式专门维护的。
Dovetail 仅将托管自治内核的基本机制引入内核,为其在用户空间中的应用程序启用通用编程模型。它本身并不实现实时内核,而应该由单独的内核组件提供,例如 EVL 内核或Cobalt内核。
二. 为什么我们需要Dovetail?
基于 Linux 的双内核系统需要一些接口层来将辅助第二个内核(通常是像 EVL 内核这样的实时内核)与其要嵌入的内核逻辑耦合,以便从丰富的 Linux 功能集中受益,同时运行具有严格实时要求的专用应用程序。这种接口的典型实现是 I-pipe,多年来它同时服务于 RTAI 和 Xenomai 3 Cobalt。由于这个文档[1]中解释的几个原因,维护 I-pipe 被证明是困难的,因为对主线内核的更改经常导致比较严重的代码冲突,有时会导致I-pipe 的严重倒退。尽管中断流水线的概念在对原始内核进行合理有限的更改的情况下,在提供较短的响应时间方面被证明是正确的,但还把I-pipe集成到主线代码中的这种方式已经有点过时了。
Dovetail 是 I-pipe 的继承者,具有以下目标:
[1]: https://source.denx.de/Xenomai/xenomai/-/wikis/Dovetail
大牛你好,请问你研究过xenomai发布的linux-dovetail各个版本的名称含义吗?