Linux系统工业化应用的场景中,实时性不足是一个很重要的缺陷和问题,传统的LINUX实时性改造有多种,下面博客分别介绍了两种方案:
给ubuntu18.04系统内核升级rt-patch补丁_papaofdoudou的博客-CSDN博客_ubuntu安装patch
利用RT-Thread VMM组件实现对Linux实时性改造的实践_papaofdoudou的博客-CSDN博客
这里在介绍并实践一种更加“高级”一点的方案,就是基于XENOMAI的LINUX实时性改造。

xenomai-stable-v3.2.x.tar.bz2,下载链接:
Files · stable/v3.2.x · xenomai / xenomai · GitLab

xenomai内核补丁:
https://xenomai.org/downloads/dovetail/patch-5.10.89-dovetail1.patch.bz2

要选择和补丁对应的Linux内核版本,linux-5.10.89
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.10.89.tar.gz
首先验证一下原版LINUX内核是否能够启动,参考如下文档:
Ubuntu18.04 Linux内核编译升级_papaofdoudou的博客-CSDN博客_ubuntu18.04升级内核
升级后,使用linux-5.10.89的内核可以正常启动UBUTNU18.04.6的文件系统,内核可以用。

首先是打xenomai补丁,解压内核并用GIT进行版本管理,方便我们查询每一步都变化了什么。

解压XENOMAI补丁:
bzip2 -d patch-5.10.89-dovetail1.patch.bz2

解压xenomai-stable-v3.2.x.tar.bz2

打补丁:
进入linux-5.10.89目录,执行如下命令将XENOMAI实时补丁打上:
../xenomai-stable-v3.2.x/scripts/prepare-kernel.sh --arch=x86_64 --dovetail=../patch-5.10.89-dovetail1.patch


补丁的改动还是非常大的:

编译内核
make menuconfig,可以看到XENOMAI配置选项已经出现:

将CONFIG_SYSTEM_TRUSTED_KEYS和CONFIG_SYSTEM_REVOCATION_KEYS置空,否则会遇到编译错误。之后执行make -j4开始编译:
最终内核链接的时候,出现链接错误,其中udp_sock是XENOMAI引入的符号。

根据报错线索,BTFIDS是新版内核增加的功能,我们可以将其关闭,方法是需要将CONFIG_DEBUG_INFO_BTF关闭,不进行这一步的检查.

或者:
sudo scripts/config --disable CONFIG_DEBUG_INFO_BTF
配置
- General setup --->
- Preemption Model (Preemptible Kernel (Low-Latency Desktop)) --->
- (X) Low-Latency Desktop
- (-xeno-3.2.1)Local version - append to kernel release
-
- Processor type and features --->
- Processor family (Core 2/newer Xeon) --->
- (X) Core 2/newer Xeon
- [*] Multi-core scheduler support
- [ ] CPU core priorities scheduler support
-
- Power management and ACPI options --->
- CPU Frequency scaling --->
- [ ] CPU Frequency scaling
- [*] ACPI (Advanced Configuration and Power Interface) Support --->
- < > Processor
- CPU Idle --->
- [ ] CPU idle PM support
-
- Memory Management options --->
- [ ] Contiguous Memory Allocator
- [ ] Transparent Hugepage Support
- [ ] Allow for memory compaction
- [ ] Page migration
这样做后可以正常编译链接通过。

执行sudo make modules_install, sudo make headers_install, sudo make install之后,新内核安装完毕:

之后重启,执行dmesg|grep Xenomai查看Xenomai加载情况:

xenomai正常加载。
安装依赖:
sudo apt install automake libtool m4 autoconf
生成配置文件
./scripts/bootstrap

编译:
sudo ./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw

编译:

How to Run Xenomai in qemu - F.J Kong's Blog

latency必须在启用xenomai的内核系统上跑,否则会出现如下的报错:
