嵌入式系统Linux实时化(三)Xenomai框架移植
Xenomai 可以无缝地和 Linux 内核一起运行, 这种模式为双内核架构, 命名为 Cobalt。而另外一种模式是单内核架构, 命名为 Mercury, Mercury 在实际实施应用时, 对于 Linux 内核配置。基于国产处理器飞腾E2000开发板--飞腾派移植Xenomai实时框架与测试。
一、Xenomai3的两种配置
Xenomai 可以无缝地和 Linux 内核一起运行, 这种模式为双内核架构, 命名为 Cobalt。
而另外一种模式是单内核架构, 命名为 Mercury, Mercury 在实际实施应用时, 对于 Linux 内核配置。
有两种选择:
第一种: 可以在 Linux 内核不做任何修改的情况下运行;
第二种: 也可以只加载 Preempt-rt 补丁后运行, 这种情况比前者的实时性更好。
-
双核配置Colbat
Xenomai 3双核配置:Colbat

多一个优先比linux还高的Cobalt核心去处理实时的事情,提供不同的实时API给不同的应用程序使用。并且利用乐观中断保护机制减少改变中断掩码,一般的机制在每次进入关键部分时都要中断屏蔽,而乐观中断保护可以不用。
而实时在意的“截止日期”,实际上就是探讨延迟(延迟越大,系统越难在时内内完成完成高优先于任务,自然即时能力就越差),而延迟很大的来源则是中断处理。
通过使用与它并行运行的实时协同内核来补充Linux。这个名为Cobalt的小扩展内置于Linux内核中,处理所有时间关键活动,例如处理中断和调度实时线程。Cobalt核心优先于本机内核活动。
在这种双内核配置中,所有RTOS API Xenomai都提供与Cobalt核心的接口,并且只有那些API被认为是实时的,包括由Xenomai(aka libcobalt)实现的POSIX 1003.1c服务子集。
-
单核配置Mercury

运用本机的linux core在PREEMPT_RT之上达到real-time的事情,这里不是强制的,看应用程序对反应时间和最大抖动的要求,有些甚至会作到某种程度截止日期的忽略。
依靠本机Linux内核的实时功能,形成Mercury核心。通常,应用程序需要在目标内核中启用PREEMPT-RT扩展,以提供实时服务。
但是,这不是强制性的,它取决于响应性和最大抖动的应用要求; 甚至可以容忍一定比例的截止日期未命中。
在这种单内核配置中,Xenomai提供的所有非POSIX RTOS API都可以通过本机线程库(最好是NPTL,但也支持传统设置的linuxthreads)进行精确模拟。
二、 Xenomai源码结构
xenomai遵循分离源码模式,将内核态的支持和用户态的库解耦。为此,内核空间和用户空间组件分别位于kernel/和lib/子目录下面。其他的顶层文件夹例如scripts/、testsuite/、utils/,提供在构建主机或运行时目标上使用的其他脚本和程序。

kernel/:实现内核内支持代码的代码被视为Linux内核的内置扩展。 因此,应该使用标准的Linux内核配置过程来定义Xenomai内核组件的各种设置。 Xenomai当前引入的所有内核代码都实现了Cobalt内核(即双内核配置)。 到目前为止,Mercury内核在内核空间中不需要Xenomai特定的代码。
lib/:包含Xenomai框架导出到应用程序的各种用户空间库。 该树是与内核支持分开构建的。构建库是为了支持选定的Cobalt或Mercury内核。
HAL
源码位置在:xenomai-head/ksrc/arch/arm/hal.c
硬件抽象层:进程透过HAL呼叫ipipe的服务。这一层主要是包装ipipe与底层资讯让nucleus可以不用看到硬体资讯。
核/ Cobalt
源码位置在:xenomai-head /ksrc/nucleus;xenomai-head/kernel/cobalt(xenomai 3)
Xenomai的内核,包含调度,定时器,同步,线程,锁等等一般该有的RTOS功能,负责实时任务的执行。
调度(scheduler)
优先处理实时任务,linux也被视为其中一个线程,本身也有调度器,但须等到没有实时任务时(空闲状态),才会执行linux thread。
用户接口(skins)
源码位置在xenomai-head /ksrc /skins
调用xenomai的接口,有本地rtdm posix psos + uitron vrtx vxworks等。
三、xenomai移植与测试
开发资源
源码地址
https://source.denx.de/Xenomai/xenomai/-/tree/master
https://source.denx.de/Xenomai/
V4版本
https://v4.xenomai.org
V3版本
https://v3.xenomai.org
开发测试环境
硬件环境:
板卡: 基于国产处理器飞腾E2000开发板--飞腾派


软件环境:
1)Linux phytiumpi 5.10.153-dovetail3-phytium-embeded-2023-v1.0-GA #4 SMP PREEMPT IRQPIPE
2)Xenomai 3.2
移植安装
-
内核移植
使用Xenomai双内核框架,先要先在内核中合入ipipe补丁,重新编译内核。
ipipe · main · xenomai / download-archive · GitLab
若补丁正确,会在设定表里看到xenomai相关选项。
-
Xenomai SDK编译
Xenomai版本是3.2.2,源代码链接如下:
Files · v3.2.2 · xenomai / xenomai · GitLab
构建 Cobalt 模式的 Xenomai 库和应用程序。
//安装编译环境
sudo apt install autoconf automake libtool fuse debhelper findutils autotools-dev pkgconfig libltdl-dev flex bison
//配置
./scripts/bootstrap
./configure --enable-pshared --enable-smp --with-core=cobalt
//编译
make
//安装
sudo make install
移植测试
-
实时内核环境测试
查看系统启动信息中是否有xenomai信息与版本。

查看系统实时线程状态

Xenomai运行环境测试

系统安装xenomai开发框架后,默认在/usr目录上会创建xenomai软件目录。
更多推荐



所有评论(0)