Xenomai是一套为嵌入式系统设计的实时开发框架,通过 “双内核” 架构,让Linux既能处理复杂的通用任务,又能可靠地完成那些对响应时间有极端要求的任务,广泛用于工业自动化、机器人、航空航天等对实时性要求极高的场景。本篇文章以启扬RK3588开发板为例,分享如何增加Xenomai3实时补丁。
Xenomai官网:
步骤:
只需要打两个补丁,Dovetail或者I-pipe补丁,以及xenomai3的内核补丁。
Dovetail 是 I-pipe 的后继产品,二选一,Dovetail支持5.10之后的内核, I-pipe反之。
0****1
打Dovetail补丁
我现在内核是6.1.99,主要Dovetail的补丁是RK发放的,RK修改过的,要用有这个补丁的内核版本,没有对应内核的Dovetail补丁问FAE也没用。
在sdk里面位置:docs/Patches/Real-Time-Performance/XENOMAI/kernel-6.1/6.1.99/
cd kernelgit apply docs/Patches/Real-Time-Performance/XENOMAI/kernel-6.1/6.1.99/*
PS:
有跟随内核主线维护的Dovetail的内核仓库,这个仓库就是加了Dovetail的内核,也有对应的patch但是我没有找到。
这个补丁的作用是把硬件资源抽象化ADEOS,并且划分作用域。
作用是图中的域2。
0****2
打xenomai3的内核补丁
需要下载xenomai3的源码
# 在sdk的根目录下 需要翻墙git clone https://source.denx.de/Xenomai/xenomai.git cd xenomai# 选择版本git checkout stable/v3.3.x# 生成patchscripts/prepare-kernel.sh --linux=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/kernel/ --arch=aarch64 --outpatch=/home/yangx/linux2/yangx/RK3588/IAC-RK3588-MB-kernel-6.1/cobalt.patch# 进入kernel 打patch即可git apply ../cobalt.patch
0****3
配置内核选项
查看链接:Wiki · xenomai / xenomai · GitLab
以及这些选项配置:有的没有,尽量一致
make menuconfig ARCH=arm64
进入menuconfig的界面,打入的补丁正常的话会显示:
内核的相关配置就结束了。
我的内核配置patch
0****4
编译xenoma3库
# 在sdk的根目录下cd xenomaisource 一下NXP的编译器 或者 配置一下编译器的环境变量source /opt/fsl-imx-wayland/6.1-mickledore/environment-setup-armv8a-poky-linux# 生成Makefile./scripts/bootstrap./configure CFLAGS="-mtune=cortex-a76" LDFLAGS="-mtune=cortex-a76" --build=i686-pc-linux-gnu --host=aarch64-linux-gnu --with-core=cobalt --enable-smp CC=aarch64-linux-gnu-gcc LD=aarch64-linux-gnu-ld# 编译 安装make -j128mkdir -p build && make install DESTDIR=./build/# 之后把build下生成的文件全部复制到板子的文件系统里面即可。
测试:
加压力测试以测试实时性和空闲状态下比较。