Ubuntu上编译 Linux_RT 内核

news/2025/9/26 18:14:08/文章来源:https://www.cnblogs.com/Jeffxu/p/18690987

目录
  • 一、编译安装
    • 1. 下载 Linux 内核源码和对应版本的 preempt_rt 补丁源码
    • 2. 解压及安装依赖项
      • 2.1 安装依赖
      • 2.2 解压缩文件并打补丁
    • 3. 自定义部分编译配置
      • 3.1 生成相关的内核配置文件
      • 3.2 修改调整内核的一些配置项
    • 4. 编译内核
    • 5. 修改启动项
  • 二、实时性测试


实时Linux内核常见的有 PREEMPT_RTXenomai,其中 PREEMPT_RT 是将Linux内核以打补丁的形式来实现抢占式实时性。Xenomai 的架构为双内核,其中实时性任务又 Xenomai 内核来执行,非实时性的任务由通用Linux内核来执行。

在此记录编译安装 PREEMPT_RT 补丁的内核过程。

一、编译安装

1. 下载 Linux 内核源码和对应版本的 preempt_rt 补丁源码

Linux内核源码下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/
PREEMPT_RT 补丁源码下载地址:https://wiki.linuxfoundation.org/realtime/preempt_rt_versions

要保证所下载的 Linux内核源码版本 和 PREEMPT_RT 所对应的版本匹配,否则可能编译失败。
在此使用的是 5.4.182 版本的Linux内核和补丁。

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.182.tar.gz
wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/5.4/patches-5.4.182-rt72-rc1.tar.gz

2. 解压及安装依赖项

在Linux上新建对应的目录来存放Linux源码和对应的补丁包,如将下载的 linux-5.4.182.tar.gzpatches-5.4.182-rt72-rc1.tar.gz 放入到 kernelRT 目录下,并进入到该目录。

mkdir kernelRT
cd kernelRT
2.1 安装依赖
sudo apt-get update
sudo apt-get build-dep linux
sudo apt-get install autoconf automake make bc bison flex libtool libncurses-dev libelf-dev libssl-dev libudev-dev libpci-dev libiberty-dev openssl dkms fakeroot zstd net-tools
2.2 解压缩文件并打补丁
// 将Linux源码解压到当前位置
tar -zxvf linux-5.4.182.tar.gz// 将补丁解压到当前位置
gunzip patches-5.4.182-rt72-rc1.tar.gz// 进入Linux源码目录下,进行打补丁
cd linux-5.4.182
patch -p1 < ../patch-5.15-rt17.patch

3. 自定义部分编译配置

3.1 生成相关的内核配置文件

内核的配置文件有两种生成方式,如下:
(1)、直接复制当前系统的内核配置,然后有新增项时自动设置为默认值

// 复制当前系统的内核作为要编译内核的配置
cp -v /boot/config-$(uname -r) .config// 所有配置设为默认
yes '' | make oldconfig

(2)、根据当前系统中加载的模块生成一个最小配置文件,自动启用当前系统中使用的模块,并禁用未使用的选项,适用于针对当前硬件和模块精简内核配置,以减小编译的内核体积,提供性能。

make localmodconfig
3.2 修改调整内核的一些配置项
// 打开内核配置界面
make menuconfig

要实现实时性,需要调整以下的配置项

  • CONFIG_PREEMPT_RT 对应的 Preemption Model 选择 (X) Fully Preemptible Kernel (Real-Time) 如下
  • CONFIG_HIGH_RES_TIMERS 对应的 Timers subsystem 选择 [*] High Resolution Timer Support 如下
  • CONFIG_NO_HZ_FULL 对应的 Timer tick handling 选择 (X) Full dynticks system (tickless)
  • CONFIG_HZ_1000 对应的 Timer frequency 选择 (X) 1000 HZ,如下
  • Enable loadable module support 启动加载模块支持对应的选项中,需要将 Module signature verification 取消选中,否则在安装部分模块的过程中由于没有签名导致安装失败,如下图:
  • Cryptographic API > Certificates for signature checking 选项设置中 Additional X.509 keys for default system keyringProvide a keyring to which extra trustable keys may be addedProvide system-wide ring of blacklisted keys都需要取消选中,如下图
  • Kernel hacking > Compile-time checks and compiler options对应的选项中 要把编译内核调试信息 Compile the kernel with debug info取消选中,否则编译出来的内核镜像太大,导致新内核在加载时无法分配对应的内存启动失败,如下图

设置完成后,保存并退出该配置界面。

4. 编译内核

在设置完以上的所有选项之后,开始编译内核

// 根据自己系统的核心数来设置对应的数字,查看核心指令 echo $(nproc)
make -j4
sudo make modules_install -j4
sudo make install -j4

5. 修改启动项

安装完成之后,重新启动时,进入高级设置里面,可以选择启动实时内核。如果需要默认以实时内核来启动,需要配置和更新对应的grub

//打开grub
sudo vim /etc/default/grub

根据界面的选项顺序修改 GRUB_DEFAULT 的内容,索引从0开始

修改完之后需要 sudo update-grub 来更新配置

二、实时性测试


【参考资料】
Ubuntu20.04编译内核安装preempt_rt实时补丁
Ubuntu编译安装实时内核
实时Linux内核(PREEMPT_RT)的编译安装以及测试
Building the PREEMPT_RT-patched Linux Kernel

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做淘宝的网站的多少钱开发app的过程

热门推荐 &#xff08;1&#xff09;即将直播持续集成与交付&#xff1a;分层自动化之UI自动化体系建设直播简介&#xff1a;本系列直播由阿里旗下一站式研发提效平台云效策划推出&#xff0c;主要为大家详细介绍阿里巴巴在持续集成和持续交付的最佳实践。 直播讲师&#xff1a…

vue3 + vite Cannot access ‘xxx‘ before initialization

vue3 + vite Cannot access ‘xxx‘ before initialization 是用于循环引用造成的,不建议循环引用,所以遇到这种情况要优化代码

《“悬荡”于理想与现实之间:一份关于人机共生未来的思想实验评估》

《“悬荡”于理想与现实之间:一份关于人机共生未来的思想实验评估》 对这篇《元人文AI:价值共生时代的技术哲学与创新实践》的分析是否客观,需要从多个维度进行综合评估。总的来说,该分析在理论构建的深度、体系的…

区别:RS-232、RS-422、RS-485

RS-232、RS-422、RS-485博客园文作者:Citrusliu博文地址:https://www.cnblogs.com/citrus

解决字符串数组中大整数精度问题

示例:[{"specId": 3140724743078936585, "quantity": 1, "specName": "箱"}, {"specId": 3140724798770905093, "quantity": 10, "specName"…

软文发布门户网站太原seo霸屏

“八股文”在实际工作中是助力、阻力还是空谈&#xff1f; 作为现在各类大中小企业面试程序员时的必问内容&#xff0c;“八股文”似乎是很重要的存在。但“八股文”是否能在实际工作中发挥它“敲门砖”应有的作用呢&#xff1f;有IT人士不禁发出疑问&#xff1a;程序员面试考…

playwright-mcp入门

npm install -g @executeautomation/playwright-mcp-server npm install -g @playwright/mcp 配置-方式1 npx @playwright/mcp@latest --port 8931{"mcpServers": {"playwright": {"url"…

【征文计划】深度剖析 Rokid SLAM 算法:从传感器融合到空间重建的完整技术链路 - 实践

【征文计划】深度剖析 Rokid SLAM 算法:从传感器融合到空间重建的完整技术链路 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important;…

国信DRS数据恢复中心成为东芝(TOSHIBA)存储硬盘的数据恢复合作服务商

国信DRS数据恢复中心可在不影响原厂硬件质保的情况下打开密封的硬盘驱动器以便恢复数据,东芝硬盘用户可享有我中心数据恢复服务20%的折扣优惠。 如果您的硬盘驱动器硬件损坏无法正常识别或读取异常,数据误删除、误分…

深入解析Windows注册表regf文件格式

本文详细解析了Windows注册表使用的regf二进制文件格式,涵盖基础块、存储桶和单元格结构,探讨了安全描述符、子键索引等关键组件的实现细节及其在历史漏洞中的作用,为安全研究人员提供深入的技术参考。Windows注册表…

华米运动步数修改,每天自动修改并同步 微信运动/支付宝运动 步数

只支持使用 脚本猫 扩展在浏览器后台定时运行脚本主页:https://scriptcat.org/zh-CN/script-show-page/4285此脚本一直为 开源免费 使用,如果你是从某些地方买的话,你就是被骗了# 温馨提示使用 Zepp 或 Zepp Life 注…

两个路由器做双网站安卓程序开发用什么软件

iframe基本内涵 通常我们使用iframe直接直接在页面嵌套iframe标签指定src就可以了。 <iframe src"demo_iframe_sandbox.htm"></iframe> 但是&#xff0c;有追求的我们&#xff0c;并不是想要这么low的iframe. 我们来看看在iframe中还可以设置些什么属…

建设酒店网站ppt模板下载html底部友情链接代码

python的开发者为处理表格和画图提供了库的支持&#xff0c;使用pandas库可以轻松完成对csv文件的读写操作&#xff0c;使用matplotlib库提供了画热力图的各种方法。实现这个功能首先需要读出csv数&#xff0c;然后设置自定义色条的各种属性如颜色&#xff0c;位置&#xff0c;…

IMU-坐标系-位姿

坐标坐标系 1.判定坐标系:大拇指指向 Z 轴,看四指环绕方向,如果是 X 指向 Y,就是右手系。右手大拇指指向z轴方向,其余四指由x轴握向y轴方向,如果成功,那么判定为右手系。左手大拇指指向z轴方向,其余四指由x轴握…

在 Nginx Docker 官方镜像中编译并加入第三方模块 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算机毕业设计springboot考研资讯管理系统 基于Spring Boot的考研信息管理平台设计与达成 Spring Boot驱动下的研究生入学考试资讯管理系统开发

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

登录 Linux 自动展示 CPU/内存/磁盘挂载使用情况等信息(针对于银河麒麟调整的)

1、编写脚本 创建脚本: vi /etc/profile.d/sysinfo.sh脚本内容: #!/bin/bash set -e# 颜色 GREEN="\033[1;32m" YELLOW="\033[1;33m" CYAN="\033[1;36m" RESET="\033[0m"# …

解码数据结构线性表之链表

概念 链表的定义 链表是一种线性数据结构,由一系列节点组成,节点之间通过指针连接,形成链式结构。每个节点包含数据域和指针域,数据域存储数据,指针域指向其他节点。 与数组不同,链表的节点在内存中不需要连续存…

C++ placement new

在 C++ 中,placement new 是一种特殊的 new 操作符,用于在指定的内存地址上构造对象,而不是从堆上分配新内存。这在需要精细控制内存布局或在预分配的缓冲区中构造对象时非常有用,比如在嵌入式系统、内存池或自定义…

Spring Boot接入邮箱,完成邮箱验证码

图+文+源码学习 1. 邮箱的发送、接收流程 2. spring-boot-starter-mail的集成 3. 源码的简单解读先知 邮箱的一些基本概念: 发送邮件STMP协议:Simple Mail Transfer Protocol ,简单邮箱传输协议,用于发送邮件的协议…