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的内核系统上跑,否则会出现如下的报错: