对于实时操作系统开发,推荐使用以下发行版: - Ubuntu LTS (长期支持版) - Debian Stable - Fedora - CentOS Stream (替代已停更的CentOS)
# 检查当前内核是否支持实时补丁
uname -a
# 下载对应版本的PREEMPT_RT补丁
# 访问 https://wiki.linuxfoundation.org/realtime/start 获取最新补丁
# 编译安装实时内核
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.92.tar.xz
wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.15/patch-5.15.92-rt54.patch.xz
tar xvf linux-5.15.92.tar.xz
cd linux-5.15.92
xzcat ../patch-5.15.92-rt54.patch.xz | patch -p1
# 配置内核
make menuconfig
# 在"General setup" -> "Preemption Model"中选择"Fully Preemptible Kernel (RT)"
# 编译安装
make -j$(nproc)
sudo make modules_install
sudo make install
sudo update-grub
# 安装依赖
sudo apt-get install git build-essential libtool automake flex bison
# 获取Xenomai源码
git clone https://gitlab.denx.de/Xenomai/xenomai.git
cd xenomai
./scripts/bootstrap
./configure --with-core=cobalt --enable-pshared
make -j$(nproc)
sudo make install
# 禁用CPU频率调节
sudo apt-get install cpufrequtils
echo 'GOVERNOR="performance"' | sudo tee /etc/default/cpufrequtils
sudo systemctl disable ondemand
# 禁用Intel C-states
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="/GRUB_CMDLINE_LINUX_DEFAULT="processor.max_cstate=1 intel_idle.max_cstate=0 /' /etc/default/grub
sudo update-grub
# 设置实时进程优先级范围
echo "kernel.sched_rt_runtime_us = 950000" | sudo tee -a /etc/sysctl.conf
echo "kernel.sched_rt_period_us = 1000000" | sudo tee -a /etc/sysctl.conf
# 禁用透明大页
echo "never" | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# 应用更改
sudo sysctl -p
sudo apt-get install build-essential cmake git gdb
# 安装cyclictest
sudo apt-get install rt-tests
# 安装latencytop
sudo apt-get install latencytop
# 安装ftrace工具
sudo apt-get install trace-cmd kernelshark
# 安装perf工具
sudo apt-get install linux-tools-common linux-tools-generic
# 运行测试(建议在无负载情况下运行)
sudo cyclictest -t1 -p 80 -n -i 10000 -l 10000
# 解释:
# -t1: 使用1个线程
# -p80: 设置优先级为80
# -n: 使用clock_nanosleep
# -i10000: 间隔10微秒
# -l10000: 循环10000次
sudo apt-get install stress
stress -c 4 -i 2 -m 2 & # 在后台产生CPU、IO和内存负载
sudo cyclictest -t1 -p 99 -n -i 1000 -l 100000
mlockall()
锁定进程内存,避免页面错误clock_gettime(CLOCK_MONOTONIC_RAW)
高延迟问题:
实时线程被抢占:
内存分配失败:
mlockall()
锁定内存通过以上配置,您的Linux系统将能够支持实时操作系统开发和运行实时关键任务应用。