Ubuntu系统实时内核编译教程

Ubuntu系统实时内核编译教程

一、简介

RTOS

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

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

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

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

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

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

内核下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/

补丁下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/

  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 

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

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

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

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rosen.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值