最近公司开始了实时linux的项目,我开始做了一些前期的调研。
实时linux通常有两种方案,一个是preempt rt的patch,patch的主要内容是中断线程化,优先级继承以及spinlock的mutex化。还有一种方案是宏微内核,目前在国内做的比较好的公司是RT-THREAD。
我们采用了开源的xenomai方案,xenomai是一种开源的方案,提供两种模式,一种是dual kernel(cobalt)模式,使用cobalt作为微内核,使用ipipe做中断优先级管理。另一种是singal kernel(mercury)模式,基于打了preempt rt patch的宏内核,然后提供xenomai在user space的支持。
本篇先介绍一下preempt rt patch的操作。
- 下载kernel代码:https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.189.tar.xz
- 下载patch: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/4.4/patch-4.4.189-rt186.patch.gz
- 安装patch:patch –p1 < ../ patch-4.4.189-rt186.patch
- 配置:
make localmodeconfig
make menuconfig (确保选中CONFIG_PREEMPT_RT_FULL)
- 编译和安装
make
make modules_install
make install
update-grub
- 测试:
cyclictest -p 90 -m -c 0 -i 200 -n -h 100 -q -l 1000000
打preempt rt patch相对还算比较简单,系统可以正常启动,测试结果也明显好于通用的kernel.
参考:https://blog.csdn.net/x356982611/article/details/77370385/