Ubuntu22.04编译安装实时内核

下载安装

1.查看自己系统目前的内核版本

uname -r

2.下载安装实时内核文件

目前系统版本是Ubuntu 22.04.5 LTS,内核版本是 6.8.0-40。因此我需要安装6.8.2版本的PREEMPT_RT内核,在这个网站。(安装和当前默认内核最接近的RT内核,遇到问题的可能性最小)

下载 patch-6.8.2-rt11.patch.gz


…/
incr/ 03-Apr-2024 15:36 -
older/ 03-Apr-2024 15:36 -
patch-6.8.2-rt11.patch.gz 03-Apr-2024 15:36 59K
patch-6.8.2-rt11.patch.sign 03-Apr-2024 15:36 438
patch-6.8.2-rt11.patch.xz 03-Apr-2024 15:36 51K
patches-6.8.2-rt11.tar.gz 03-Apr-2024 15:36 106K
patches-6.8.2-rt11.tar.sign 03-Apr-2024 15:36 438
patches-6.8.2-rt11.tar.xz 03-Apr-2024 15:36 83K
sha256sums.asc 03-Apr-2024 15:40 1253


这个网站linuxfoundation可以查看最新的PREEMPT_RT内核。

创建一个新的文件夹:

mkdir ~/kernel

进入这个文件夹:

cd ~/kernel

从这个网站 https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/ 去下载 6.8.2版本的内核文件:

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.8.2.tar.gz

你也可以手动下载这个文件,然后复制到kernel文件夹。

解压:

tar -xzf linux-6.8.2.tar.gz

下载对应的rt_preempt patch, 对我们来说就是刚刚的patch-6.8.2-rt11.patch.gz

wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.8/patch-6.8.2-rt11.patch.gz

你也可以手动下载,然后拷贝到kernel文件夹。

解压

gunzip patch-6.8.2-rt11.patch.gz

切换目录,打实时补丁

cd linux-*/
patch -p1 < ../patch-*.patch

复制当前引导的内核配置作为新实时内核的默认配置

cp -v /boot/config-$(uname -r) .config

打开“软件和更新”。在 Ubuntu 软件菜单中勾选“源代码”框

我们需要一些工具来构建内核,安装它们:

sudo apt-get build-dep linux
sudo apt-get install zstd
sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf fakeroot

启用所有 Ubuntu 配置,我们只需使用:

yes '' | make oldconfig

然后我们需要在内核中启用rt_preempt:

make menuconfig

并设置以下内容:

# Enable CONFIG_PREEMPT_RT
-> General Setup
  -> Preemption Model (Fully Preemptible Kernel (Real-Time))
  (X) Fully Preemptible Kernel (Real-Time)

# Enable CONFIG_HIGH_RES_TIMERS
-> General setup
  -> Timers subsystem
  [*] High Resolution Timer Support

# Enable CONFIG_NO_HZ_FULL
-> General setup
  -> Timers subsystem
  -> Timer tick handling (Full dynticks system (tickless))
    (X) Full dynticks system (tickless)

# Set CONFIG_HZ_1000 (note: this is no longer in the General Setup menu, go back twice)
-> Processor type and features
  -> Timer frequency (1000 HZ)
  (X) 1000 HZ

# Set CPU_FREQ_DEFAULT_GOV_PERFORMANCE [=y]
->  Power management and ACPI options
  -> CPU Frequency scaling
  -> CPU Frequency scaling (CPU_FREQ [=y])
    -> Default CPUFreq governor (<choice> [=y])
    (X) performance

->  Cryptographic API 
 ->  Certificates for signature checking (at the very bottom of the list) 
  -> Provide system-wide ring of trusted keys 
   -> Additional X.509 keys for default system keyring
   Remove the “debian/canonical-certs.pem” from the prompt and press Ok

->  Cryptographic API 
 ->  Certificates for signature checking (at the very bottom of the list) 
  -> Provide system-wide ring of trusted keys 
   -> X.509 certificates to be preloaded into the system blacklist keyring 
   Remove the “debian/canonical-certs.pem” from the prompt and press Ok

保存以上配置,退出 。

编译内核:

make -j `nproc` bindeb-pkg

如果需要编译src pkg,请运行"make deb-pkg",但是你必须通过git拉取linux kernel的源代码树,并checkout v6.8.2 tag,然后按上面的过程打实时补丁,并修改内核配置文件。

git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux.git
git checkout v6.8.2

根据CPU性能大概需要10-30分钟。

然后我们安装所有内核 debian 软件包

ls -l ../*.deb
-rw-r--r-- 1 zt zt    9881878 10月 27 14:10 ../linux-headers-6.8.2-rt11_6.8.2-5_amd64.deb
-rw-r--r-- 1 zt zt  173899106 10月 27 14:09 ../linux-image-6.8.2-rt11_6.8.2-5_amd64.deb
-rw-r--r-- 1 zt zt 1320705494 10月 27 14:44 ../linux-image-6.8.2-rt11-dbg_6.8.2-5_amd64.deb
-rw-r--r-- 1 zt zt    1398982 10月 27 14:09 ../linux-libc-dev_6.8.2-5_amd64.deb
sudo dpkg -i ../*.deb

现在应该安装实时内核了。重新启动系统并检查新的内核版本

sudo reboot

zt@zt-ROScube-I-ET:~$ uname -a
Linux zt-ROScube-I-ET 6.8.2-rt11 #5 SMP PREEMPT_RT Sun Oct 27 13:59:50 CST 2024 x86_64 x86_64 x86_64 GNU/Linux

测试实时性

1.git 仓库源码安装

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

2.进入git仓库

cd rt-tests 

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

sudo apt-get install apt-file libnuma-dev 

4.编译

make

4.测试

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

我使用这个命令测试的结果如下:

# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.28 0.31 0.19 1/685 2625

T: 0 ( 2587) P:80 I:10000 C:  10000 Min:      2 Act:    2 Avg:    2 Max:      11

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/902245.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究

中药网络药理学和毒理学的研究 TCMSP&#xff1a;https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择&#xff1a;输入Molecule Name 然后进行匹配&#xff1a;得到了smiles 再次通过smiles&#xff1a;COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入&#xff1a;http…

尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记

#1024程序员节&#xff5c;征文# public/index.html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>redux</title></head><body><div id"root"></div></body> </html&…

Vuex的基础

文章目录 vuex概述构建vuex[多组件数据共享]环境创建一个空仓库ps.创建仓库时遇到的错误 核心概念 - state状态核心概念 - mutations辅助函数 - mapMutations 核心概念 - actions辅助函数 - mapActions 核心概念 - getters核心概念 - 模块module&#xff08;进阶语法&#xff0…

Python(pandas库2)

DateFrame的添加 上文中DateFrame的增加中&#xff0c;因版本弃置append函数 如果你想要向 DataFrame 添加一行&#xff0c;建议的方法是首先创建一个新的 DataFrame 来表示这行数据&#xff0c;然后使用 pd.concat() 函数来合并它们。 concat 语法&#xff1a; objs: 要连…

基于协同过滤算法的个性化课程推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

JDBC: Java数据库连接的桥梁

什么是JDBC&#xff1f; Java数据库连接&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java提供的一种API&#xff0c;允许Java应用程序与各种数据库进行交互。JDBC提供了一组标准的接口&#xff0c;开发者可以利用这些接口执行SQL语句、处理结果集…

「C/C++」C++ STL容器库 之 std::multiset 键的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

腾讯云跨AZ部署FortigateHA备忘录

随时保存配置 config system globalset admintimeout 480set alias "FortiGate-VM64-KVM"set gui-auto-upgrade-setup-warning disableset hostname "FG-Slave"set revision-backup-on-logout enableset revision-image-auto-backup enableset timezone &…

【 thinkphp8 】00006 启动 内、外置服务器

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【 t…

Java学习Day53:铲除紫云山金丹原料厂厂长(手机快速登录、权限控制)

1.手机快速登录 手机快速登录功能&#xff0c;就是通过短信验证码的方式进行登录。这种方式相对于用户名密码登录方式&#xff0c;用户不需要记忆自己的密码&#xff0c;只需要通过输入手机号并获取验证码就可以完成登录&#xff0c;是目前比较流行的登录方式。 前端页面&…

centos7.x安装openCV 4.6.0版本

## 从源代码编译安装 1.更新系统 sudo yum update -y 2.安装依赖项 sudo yum groupinstall "Development Tools" sudo yum install cmake gcc-c git libjpeg-turbo-devel libpng-devel libtiff-devel libwebp-devel openexr-devel gstreamer1-plugins-base-devel…

iTerm2 保持SSH远程连接

1、保持SSH远程连接的稳定&#xff0c;防止因闲置时间过长而断开连接 When idle, send ASCII code 35 every 60 seconds每60秒 输入# 2、客户端设置保持活动 设置客户端每隔60秒发送一次保活信号&#xff0c;总共尝试3次。 vim ~/.ssh/configHost *ServerAliveInterval 60…

uniapp 底部导航栏tabBar设置后不显示的问题——已解决

uniapp 底部导航栏tabBar设置后不显示的问题——已解决 网上找了一堆解决办法&#xff0c;挨个对着试吧 解决办法一&#xff1a;tabBar里的list第一项和page中的第一项要相同&#xff0c;确实就能显示了。但是问题来了&#xff0c;page中的第一项是入口页&#xff0c;那就意味…

鲸鱼优化算法(Whale Optimization Algorithm, WOA)原理与MATLAB例程

鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;是一种基于鲸鱼捕食行为的智能优化算法。它模拟了座头鲸在狩猎时的“气泡网”捕食策略。 文章目录 1.适应度函数2. 更新公式2.1 突袭行为2.2 螺旋更新3.线性递减参数4. 边界处理 MATLAB 实现示例代码说明…

HarmonyOS 5.0应用开发——Navigation实现页面路由

【高心星出品】 文章目录 Navigation实现页面路由完整的Navigation入口页面子页面 页面跳转路由拦截其他的 Navigation实现页面路由 Navigation&#xff1a;路由导航的根视图容器&#xff0c;一般作为页面&#xff08;Entry&#xff09;的根容器去使用&#xff0c;包括单页面&…

前端构建工具vite的优势

1. 极速冷启动 Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件&#xff0c;Vite 只在浏览器请求模块时动态加载所需的文件。无打包冷启动&#xff1a;无需预先打包&#xff0c;项目启动非常快&#xff0c;尤其对于大型项目效果更明…

Arduino Uno 同时控制多路舵机

Arduino Uno同时控制4个舵机 舵机可以在0~180度内指定角度的控制。常用于航模、机器人、遥控玩具等物品,然而,很多时候要一次性控制多个舵机,今天以控制4个舵机为例进行说明 接线方式如下图: 舵机的信号线分别接A0,A1,A2,A3。控制舵机从0旋转到180度,再由180度旋转到0度,…

基于NERF技术重建学习笔记

NeRF&#xff08;Neural Radiance Fields&#xff09;是一种用于3D场景重建的神经网络模型&#xff0c;能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数&#xff0c;利用了体积渲染和神经网络的结合&#xff0c;通过学习光线穿过空间时的颜色和密度来重建场…

机器视觉-相机、镜头、光源(总结)

目录 1、机器视觉光源概述 2、光源的作用 3、光谱 4、工业场景常见光源 4.1、白炽灯 4.2、卤素灯 4.3、 荧光灯 4.4、LED灯 4.5、激光灯 5、光源的基本性能 5.1、光通量 5.2、光效率 5.3、发光强度 5.4、光照度 5.5、均匀性 5.6、色温 5.7、显色性 6、基本光学…

openpnp - 解决“底部相机高级校正成功后, 开机归零时,吸嘴自动校验失败的问题“

文章目录 openpnp - 解决"底部相机高级校正成功后, 开机归零时&#xff0c;吸嘴自动校验失败的问题"概述笔记问题现象1问题现象2原因分析现在底部相机和吸嘴的位置偏差记录修正底部相机位置现在再看看NT1在底部相机中的位置开机归零&#xff0c;看看是否能通过所有校…