preempt_rt 实时内核补丁

介绍在 Ubuntu16.04 下安装 preempt_rt 实时内核的方法。

注意:因为 Realtek 网卡的 Ethercat 驱动只支持到了 4.14 版本的内核,所以笔者最后使用了 4.14.226 版本:

  • linux-4.14.226.tar.xz: https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/
  • patch-4.14.226-rt109.patch.gz: https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/4.14/older/

1 前言

硬件平台: Core™ i5-8400 CPU @ 2.80GHz × 6

软件平台: Ubuntu16.04.7

从(https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/)下载4.19.72版本的内核 linux-4.19.72.tar.xz。

从 (https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/4.19/older/) 下载实时内核补丁 patch-4.19.72-rt26.patch.gz。

2 安装流程

首先,使用下列指令查看内核版本。

1
uname -a

输出如下结果:

Linux pc 4.15.0-142-generic #146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

按照如下指令进行配置。

1
2
3
4
5
6
7
8
mkdir preempt_rt && cd preempt_rt
xz -cd linux-4.19.72.tar.xz | tar xvf -
gunzip patch-4.19.72-rt26.patch.gz
cd linux-4.19.72
patch -p1 < ../patch-4.19.72-rt26.patch
# xzcat ../patch-4.19.72-rt26.patch.xz | patch -p1
sudo apt-get install -y build-essential kernel-package libncurses5-dev libssl-dev bison flex
sudo make menuconfig # 配置内核

按照如下过程进行配置。

01

选择 General setup

02

选择 Preemmption Model (Voluntary Kernel Premption (Desktop)) ,进入之后如下图所示。

03

选择 Fully Preemptible Kernel (RT),确定之后再看如下图所示,表示选中成功。

04

然后按 Esc 键退回至主页面。

05

选中 Kernel hacking

06

选中 Memory Debugging

07

确认一下没有选择 Check for stack overflows ,默认都是没有选中的。

1
2
3
4
5
make -j6            # 编译内核,大概用半小时左右
sudo make modules_install -j6
sudo make install -j6
sudo update-grub # 更新grub
sudo reboot # 重启

重启之后再次查看内核版本。

1
uname -a

输出如下:

Linux pc 4.19.72-rt26 #1 SMP PREEMPT RT Fri Apr 16 23:16:37 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

说明编译成功。

3 测试实时性

1
2
sudo apt-get install rt-tests
sudo cyclictest -t 5 -p 80 -n # 运行5个线程,线程优先级为80,无限循环

cyclictest运行结果的解释:

  • T: 0 序号为0的线程
  • P: 0 线程优先级为0
  • I: 1000 时间间隔为1000微秒(us)
  • C: 9397 计数器。线程的时间间隔每达到一次,计数器加1
  • Min: 最小延时(us)
  • Act: 最近一次的延时(us)
  • Avg: 平均延时(us)
  • Max: 最大延时(us)

测试结果如下:
cyclictest

还可以在CPU满负荷的时候进行实时性测试。

1
2
sudo apt-get install stress
stress --cpu 4 --io 4 --vm 2 --vm-bytes 128M --timeout 60s & # 后台运行stress 60s

新开一个终端用 htop 查看cpu使用情况。

1
2
sudo apt-get install htop
htop

测试结果如下:

stess

4 可能遇到的问题

在配置内核的时候可能会碰到如下两个问题:

  1. bison: not found
    bi
    解决方案:sudo apt-get install bison

  2. flex: not found
    fl
    解决方案: sudo apt-get install flex

------ 本文结束感谢您的阅读------
Donate a cup of cola?