Ubuntu系统实时内核编译教程

888 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、简介

RTOS

RTOS(实时性操作系统),指系统的计算正确性不仅取决于计算的逻辑正确性,还取决于产生结果的时间。如果未满足系统的时间约束,则认为系统失效。

​ 根据实际应用,可以选择采用硬实时操作系统或软实时操作系统。

  • 硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。
  • 软实时系统就是那些从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误。

Linux系统并不算是一个RTOS系统,其实时处理能力不强,但是我们可以通过加入PREEMTP_RT补丁的方式,实现硬实时需求。

二、下载内核源码加入补丁

  1. 创建存放文件夹
mkdir kernel
cd kernel
  1. 下载内核源码和补丁

内核下载地址:mirrors.edge.kernel.org/pub/linux/k…

补丁下载地址:mirrors.edge.kernel.org/pub/linux/k…

  1. 安装下载依赖项
sudo apt-get install libncurses-dev
  1. 加入补丁
#解压内核
tar -xzvf linux-5.6.19.tar.gz 
#解压补丁
 gunzip patch-5.6.19-rt12.patch.gz 
 cd linux-5.6.19/
 #打补丁
 patch -p1 < ../patch-5.6.19-rt12.patch 

Tip:补丁和内核的版本需严格对应!!

三、内核配置

  1. 打开内核配置界面
make menuconfig
  1. 选择General setup

  1. 选Preemption Model (Voluntary Kernel Preemption (Desktop))

在这里插入图片描述

  1. 选择内核抢占模型

    选Fully Preemptible Kernel (RT) 在这里插入图片描述

其中:

Preemptible Kernel (Basic RT): 这种抢占模型类似于“抢占内核(低延迟桌面)”模型。除了上面提到的属性外,线程中断处理程序是强制的(就像使用内核命令行参数时一样threadirqs)。该模型主要用于 PREEMPT_RT 补丁实现的替代机制的测试和调试。

Fully Preemptible Kernel (Real-Time): 除了少数选定的关键部分之外,所有内核代码都是可抢占的。线程中断处理程序是强制的。此外,还实现了几种替代机制,如睡眠自旋锁和 rt_mutex,以减少抢占禁用部分。此外,大的抢占禁用部分被单独的锁定结构取代。必须选择这种抢占模型以获得硬实时行为。

按esc键返回至主页面

  1. 选Kernel hacking

在这里插入图片描述

  1. 选Memory Debugging 在这里插入图片描述

  2. 按下‘/’搜索DEBUG_INFO

在这里插入图片描述

选择OK,按下回车键

  1. 按下'1'

在这里插入图片描述

  1. 在Compile the kernel with debug info选项上按下‘n’,取消编译时产生debug文件

在这里插入图片描述

四、编译内核

  1. 编译并安装内核
#阻止编译产debug文件
CONFIG_DEBUG_INFO=n 
#编译并打包
make -j6 && make -j6 bindeb-pkg 

在文件夹中会生成相应的deb包,强烈建议进行备份,在其他设备上则无需再次编译

  1. 安装内核
sudo dpkg -i linux-*.deb

这一步可能会报错:

(1) dpkg: 处理软件包 linux-libc-dev:amd64 (--install)时出错: 现在尚不能配置软件

解决方法:

// 现将info文件夹更名

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info_old         

// 再新建一个新的info文件夹                             

sudo mkdir /var/lib/dpkg/info                                                                      

sudo apt-get update

sudo apt-get -f install           

// 执行完上一步操作后会在新的info文件夹下生成一些文件,现将这些文件全部移到info_old文件夹下    
sudo mv /var/lib/dpkg/info/* /var/lib/dpkg/info_old      

// 把自己新建的info文件夹删掉                                  

sudo rm -rf /var/lib/dpkg/info      

// 把以前的info文件夹重新改回名字                                                           

sudo mv /var/lib/dpkg/info_old /var/lib/dpkg/info                                   

(2) 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list”错误

解决方法:

在下载的内核文件找到.config文件,Ctrl+F搜索 CONFIG_SYSTEM_TRUSTED,并将对应的两行删除

五、安装内核

  1. 安装deb内核软件包
sudo dpkg -i linux-*.deb
  1. 更新grub并重启
sudo update-grub
sudo reboot
  1. 查看内核版本
uname -a

可能出现情况:

重启时可能出现进入不了系统的情况,提示:has invalid signature , you need to load the kernel first

解决方法:

重启进入bios界面,关闭secure boot

六、测试实时性

  1. 安装依赖
sudo apt install rt-tests stress gnuplot
  1. 下载测试源码
git clone https://gitee.com/rosens_admin/Real-Time-Test
  1. 运行测试
sudo ./rt-test.sh 

​ 等待测试完成,测试结果会生成图片放在测试脚本所在文件

在这里插入图片描述 在这里插入图片描述

​ 安装实时补丁前后的对比,可以明显看出安装补丁后实时性有了极大的提升。