当前位置:   article > 正文

ubuntu 22.04打RT实时内核补丁-内核版本6.6.15_linux-headers 6.6.15-rt22

linux-headers 6.6.15-rt22

查看当前内核版本

uname -r

源码下载

  1. https://www.kernel.org/pub/linux/kernel/
  2. https://www.kernel.org/pub/linux/kernel/projects/rt/

下载linux-6.6.15.tar.xz和patch-6.6.15-rt22.patch.gz

解压

        1.解压内核然后解压补丁,版本不同的话可以使用 TAB 键来补全

  1. tar -xzvf linux-xxxx.tar.gz
  2. cd linux-xxxxx
  3. gzip -cd ../patch-xxx-rtxxx.patch.gz | patch -p1 --verbose

        2.安装依赖

sudo apt install gcc make libncurses5-dev openssl libssl-dev build-essential pkg-config libc6-dev bison flex libelf-dev dwarves -y

        3.进入 config 交互界面调整下面设置,SAVE 后 EXIT

  1. make menuconfig
  2. General Setup -> Preemption Model 设置为 Fully Preemptible Kernel(RT)
  3. General Setup -> Timers subsystem -> Timer tick handling 设置为 Full dynticks system
  4. General Setup -> Timers subsystem 开启 High Resolution Timer Support
  5. Processor type and features -> Timer frequency 设置为 1000 HZ

        4.然后编辑 .config 并修改以下内容(一定要记得是修改不是添加!!!!)

sudo gedit .config
  1. CONFIG_SYSTEM_TRUSTED_KEY=""
  2. CONFIG_SYSTEM_REVOCATION_KEYS=""
  3. make menuconfig(然后直接退出)

        5.编译

make -j $(nproc)

        6.安装kernel modules

sudo make modules_install -j $(nproc)

        7.安装 kernel boot.img

sudo make install

        8.查看当前所有已安装内核

cat /boot/grub/grub.cfg | grep "menuentry 'Ubuntu"

        9.更新GRUB并重启

  1. sudo update-grub
  2. reboot

        10.更新grub后重启查看下内核是否更新了

  1. sudo update-grub
  2. uname -r

        如果遇到:loading linux xxx.. 错误:无效的shim签名 loading initial ramdisk 错误您需要先加载内核 

        解决方案:禁用安全引导(Secure Boot):进入BIOS设置,找到安全引导相关的选项,将其禁用。

测试实时性

        1.git 仓库源码安装

git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git

        2.进入git仓库

cd rt-tests 

        3.安装依赖并使用make编译

  1. sudo apt-get install apt-file
  2. sudo apt-file update
  3. sudo apt-file search numa.h
  4. sudo apt-get install libnuma-dev
  5. make

        4.测试

sudo ./cyclictest -t1 -p 80 -n -i 10000 -l 10000

比如在我的电脑上,我使用这个命令测试的结果如下:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 7.30 3.08 1.17 1/1055 3389   

T: 0 ( 5592) P:80 I:10000 C:  10000 Min:      2 Act:   3 Avg:   3 Max:     10

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

所以我们当前的机器上最小延时为2,平均为3,最大的为 10。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/483473
推荐阅读
相关标签
  

闽ICP备14008679号