ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造

Linux系统工业化应用的场景中,实时性不足是一个很重要的缺陷和问题,传统的LINUX实时性改造有多种,下面博客分别介绍了两种方案:

给ubuntu18.04系统内核升级rt-patch补丁_papaofdoudou的博客-CSDN博客_ubuntu安装patch

利用RT-Thread VMM组件实现对Linux实时性改造的实践_papaofdoudou的博客-CSDN博客

这里在介绍并实践一种更加“高级”一点的方案,就是基于XENOMAI的LINUX实时性改造。

环境平台:

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第1张图片

资源下载

xenomai-stable-v3.2.x.tar.bz2,下载链接:

Files · stable/v3.2.x · xenomai / xenomai · GitLab

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第2张图片

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的文件系统,内核可以用。

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第3张图片

xenomai环境搭建

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第4张图片

解压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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第5张图片

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第6张图片

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第7张图片

编译内核

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第8张图片

 将CONFIG_SYSTEM_TRUSTED_KEYS和CONFIG_SYSTEM_REVOCATION_KEYS置空,否则会遇到编译错误。之后执行make -j4开始编译:

最终内核链接的时候,出现链接错误,其中udp_sock是XENOMAI引入的符号。

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第9张图片

根据报错线索,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 

这样做后可以正常编译链接通过。

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第10张图片

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第11张图片

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

xenomai正常加载。

编译xenomai用户态库:

安装依赖:

sudo apt install automake libtool m4 autoconf

生成配置文件

./scripts/bootstrap

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第12张图片

编译:

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第13张图片

编译:

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第14张图片

编译完用户态库之后,测试系统实时性:

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第15张图片

 ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第16张图片

参考资料

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

ubuntu18.04平台上基于xenomai3.2对Linux内核的实时化改造_第17张图片

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


结束

你可能感兴趣的:(Linux,嵌入式系统,xenomai,linux,ubuntu,运维)