Ubuntu16.04 Xenomai3.x 系列移植笔记-----引导概要

第一部分 引导概要

目录

硬件支持

Xenomai实现实时内核原理

关键调研

  1.单内核与双内核选择

  2.是否需要非POSIX实时API

故障指南

  • 硬件支持

xenomai支持大量硬件,链接:https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Supported_Hardware

该链接分为两大类:支持的CPU架构和已经停产的CPU架构,毫无疑问我们本次所要移植的是X86架构:

支持从带有TSC的i586 cpu开始的所有兼容x86的32/64位处理器类型。即当从CPU获得本地APIC时,可以实现较低的延迟。

拓展:linux中时钟分为3中:

  1. Real Time Clock (RTC)

           位于CMOS中的,其频率范围是2HZ--8192HZ

     2.Programable Interval Timer (PIT)

          主要由8254时钟芯片实现的

3.Time Stamp Counter (TSC)

           位于CPU里面的一个64位的TSC寄存器。每个CPU时钟周期其值加一

RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲,RTC经过8254电路的频产生一个频率较低一点的OS(系统)时钟TSC,系统时钟每一个cpu周期加一,每次系统时钟在系统初起时通过RTC初始化。8254本身工作也需要有自己的驱动时钟(PIT),可以参考一些单片机方面的书籍。

确保您在内核配置中选择的处理器类型实际上与您的CPU匹配。如果您在x86板上运行enomai时出现奇怪的延迟,请务必检查此链接即故障指南,即x86系统的xenomai编译menuconfig配置内容,该内容在第二部分有具体描述

https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Configuring_For_X86_Based_Dual_Kernels

这里需要用特别提醒的是:很多人不在乎硬件条件,可能直接跳过该部分,我需要提醒大家,这一节最重要,直接决定你能不能移植Xenomai:官方推荐硬件

  ①CPU处理器:Intel/AMD Processor i5/i7,低端处理器就不要尝试了,就算移植成功了也是不稳定的。

  ②网卡型号:使用e1000e/e1000/r8169驱动类型的网卡,官方推荐

o Intel PRO/1000 GT 

 o Buffalo LGY-PCI-GT (8169S)
 o Corega CG-LAPCIGT (8169S)
 o D-Link DGE-528T (8169S)
 o Gigabyte 7N400 Pro2 Integrated Gigabit Ethernet (8110S)
 o LevelOne GNC-0105T (8169S)
 o Linksys EG1032v3 (8169S)
 o Netgear GA511 PC Card (8169)
 o PLANEX COMMUNICATIONS Inc. GN-1200TC (8169S)
 o Surecom EP-320G-TX1 (8169S)
 o US Robotics USR997902 (8169S)
 o Xterasys XN-152 10/100/1000 NIC (8169)

③如果你有其他需求如GPIO/CAN,推荐硬件建议先查看menuconfig选型中Xenomai/cobalt--->drivers--->xxxx是否支持

  • Xenomai实现实时内核原理

有两种选择: Cobalt / Mercury

第一种通过为Linux补充一个与之并行运行的实时内核。这个名为Cobalt的小扩展内置在Linux内核中,可以处理所有对时间要求严格的活动,比如处理中断和调度实时线程。Cobalt核比linux Kernel具有更高的优先级。

在这种双内核(dual kernel)配置中,Xenomai的所有RTOS api都提供了与Cobalt内核的接口,只有这些APls被认为具有实时能力,包括Xenomai(别名libcobalt)实现的POSIX 1003.1c服务的子集。

Ubuntu16.04 Xenomai3.x 系列移植笔记-----引导概要_第1张图片

拓展:Cobalt是对xenomai2架构的衍生补充

1.xenomai 3 双内核配置

该技术基于一个内核补丁,该补丁引入了一种机制,用于将所有关键事件转移到一个双内核扩展,并耦合到主机Linux内核。这个被称为中断管道(l-Pipe)的机制

Ubuntu16.04 Xenomai3.x 系列移植笔记-----引导概要_第2张图片

第二种 通过依托本地Linux内核的实时功能,形成Mercury内核。通常,应用程序需要在目标内核中启用PREEMPT-RT扩展,以便交付实时服务。

补充:PREEMPT-RT补丁 此时linux kernel已经是一个实时内核了

在这个单一的内核配置中,Xenomai提供的所有非posix RTOS api都是通过本机线程库(最好是NPTL,但也支持用于遗留设置的linux threads)进行精确模拟的。

Xenomai 3支持单内核和双内核配置。已经停止维护的Xenomai 2架构只支持双内核配置。

总结:Xenomai 3.x,Xenomai RTOS模拟系统的架构,它能够无缝运行如一个双内核(基于I-pipe技术的Xenomai 2.x),或者完全在Linux内核之上(启用PREEMPT-RT)

  • 关键调研

 

  1.单内核与双内核选择

假设您知道目标SoC和与实时保证相关的应用程序需求,您应该定义哪种单一或双内核配置最适合您的需要。以下提示可能会有所帮助:

1.  您的应用程序实际上有实时需求吗?它们有多严格?

如果要将应用程序从嵌入式RTOS迁移到基于Linux的平台?请考虑:

因为与传统的RTOS不同,Linux将嵌入式和实时特性视为正交问题。一些迁移的应用程序甚至可以只在常规内核和标准抢占(CONFIG PREEMPT)上模拟原始RTOS API。那么推荐单一内核配置的Xenomai 3。

对于严格的实时需求,您应该考虑目标SoC体系结构和Linux内核版本的硬实时支持的可用性。

这些双重内核的优点对您的情况是否至关重要?

o将钴钴共核移植到一个新的架构中是相当简单的。

o它与主流Linux内核的开发周期解耦,因此可以更自由地选择所需的(或必需的)内核版本

o它可以简化最坏情况的分析,并保持结果在主线Linux内核的更新周期有效。

o它可微调非实时部分的产量,而不会对实时工作造成负面影响。它不需要对常规的Linux系统进行任何调优,以保证实时作业的短延迟和有限延迟。

这些单个内核的优点是否对您的情况至关重要?

o实时应用程序无需更改就可以重用备用内核驱动程序(前提是它们不会因为不恰当的实现而造成延迟问题)。另一方面,驱动程序需要专门实现在双重内核配置上运行,即在内核内RTDM接口上运行

o编程模型可能比使用双内核配置更简单,因为内核被认为是在全局执行实时行为。也就是说,不管底层的实时技术如何,谨慎的应用程序设计和实现必须是一个通用规则,因为并非所有可用的服务都适合实时使用。

o所有用以监察系统运作的标准工具,均可即时报告系统的运作情况。另一方面,双内核系统必须专门为此目的调整这些工具。

  2.是否需要将非POSIX实时API全部更换为POSIX实时内核

不建议,两者可能存在差异,一旦移植某些功能可能无法实现,

  • 故障指南

https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Troubleshooting

 

 

你可能感兴趣的:(个人工作,学习项目)