第一部分 引导概要
目录
-
硬件支持
xenomai支持大量硬件,链接:https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Supported_Hardware
该链接分为两大类:支持的CPU架构和已经停产的CPU架构,毫无疑问我们本次所要移植的是X86架构:
支持从带有TSC的i586 cpu开始的所有兼容x86的32/64位处理器类型。即当从CPU获得本地APIC时,可以实现较低的延迟。
拓展:linux中时钟分为3中:
- 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实现实时内核原理
有两种选择: Cobalt / Mercury
第一种通过为Linux补充一个与之并行运行的实时内核。这个名为Cobalt的小扩展内置在Linux内核中,可以处理所有对时间要求严格的活动,比如处理中断和调度实时线程。Cobalt核比linux Kernel具有更高的优先级。
在这种双内核(dual kernel)配置中,Xenomai的所有RTOS api都提供了与Cobalt内核的接口,只有这些APls被认为具有实时能力,包括Xenomai(别名libcobalt)实现的POSIX 1003.1c服务的子集。
拓展:Cobalt是对xenomai2架构的衍生补充
1.xenomai 3 双内核配置
该技术基于一个内核补丁,该补丁引入了一种机制,用于将所有关键事件转移到一个双内核扩展,并耦合到主机Linux内核。这个被称为中断管道(l-Pipe)的机制
第二种 通过依托本地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.单内核与双内核选择
2.是否需要非POSIX实时API
这两块暂时不介绍
-
故障指南
https://gitlab.denx.de/Xenomai/xenomai/-/wikis/Troubleshooting