Linux编译实时内核和打补丁

news2024/11/23 11:57:24

目录

  • 1.Linux内核
  • 2.实时内核
  • 3.编译实时内核
    • 3.1 准备
    • 3.2 获取内核源码
    • 3.3 编译
    • 3.4 设置GRUB确保启动到实时内核
  • 4.给内核打补丁
  • 5.安装新的内核

1.Linux内核

https://github.com/torvalds/linux

Linux内核是Linux操作系统的核心部分,它是操作系统的基本组成部分,负责管理系统资源、文件系统、设备驱动程序和提供系统调用接口等功能。Linux内核的作用主要包括以下几个方面:

  • 系统资源管理:Linux内核负责管理系统的内存、CPU、磁盘空间等资源,以确保它们被合理分配和有效利用。

  • 文件系统管理:Linux内核提供了对文件系统的支持,包括文件的创建、读写、删除等操作,以及对文件系统的管理和维护。

  • 设备驱动程序管理:Linux内核包含了大量的设备驱动程序,用于管理和控制各种硬件设备,如网络接口、磁盘驱动器、USB设备等。

  • 进程管理:Linux内核负责管理系统中运行的进程,包括进程的创建、调度、终止等操作,以确保系统的稳定运行。

  • 网络支持:Linux内核提供了对网络协议栈的支持,包括TCP/IP协议栈、网络设备驱动程序等,以实现网络通信功能。

  • 安全性管理:Linux内核通过访问控制、权限管理等机制,确保系统的安全性和稳定性。

总之,Linux内核是整个Linux操作系统的核心,它负责管理系统的各种资源和提供各种功能,是整个操作系统的基础和核心。

2.实时内核

Linux实时内核是一种专门设计用于处理实时任务的内核,它可以确保任务在规定的时间内得到及时处理。与普通内核相比,Linux实时内核有以下区别:

  • 响应时间:实时内核可以保证任务在规定的时间内得到处理,响应时间更加可预测和稳定。

  • 优先级调度:实时内核支持更加灵活的任务优先级调度,可以确保高优先级任务优先得到处理。

  • 中断处理:实时内核对中断处理进行了优化,可以更快地响应硬件中断。

  • 时间管理:实时内核提供更加精确的时间管理,可以满足实时任务对时间精度的要求。

总的来说,Linux实时内核在处理实时任务方面更加可靠和高效,适用于对任务响应时间有严格要求的应用场景。

3.编译实时内核

Linux内核源码: https://mirrors.edge.kernel.org/pub/linux/kernel/

举例:在Xubuntu16.04系统中编译4.14.195的实时内核
假设这里以linux-4.14.195.tar.gz 实时内核源码为例:
在这里插入图片描述

3.1 准备

  • 要构建内核,需要在系统中提供几个可用的工具,使用安装它们
$ sudo apt-get install build-essential bc ca-certificates gnupg2 libssl-dev wget gawk flex bison
  • 在下载实时内核的源代码之前,请检查当前安装的内核版本:
$ uname -r
4.15.0-62-generic 
  • 要继续实时内核编译,需要创建一个临时文件夹并导航到其中,由于提取的内核源占用了大量空间,因此那里应该有足够的空间(约25GB),安装新内核后,可以再次删除此文件夹。
    在本例中,我们将在主文件夹中使用一个临时文件夹:
$ mkdir -p ${HOME}/rt_kernel_build
$ cd ${HOME}/rt_kernel_build

PS:后面所有的命令都在rt_kernel_build文件夹中执行。

3.2 获取内核源码

要构建实时内核,首先需要获得内核源代码和实时补丁。

上面已经确定当前Xubuntu16.04系统中安装了4.15内核,实时修补程序仅存在于选定的内核版本。这些可以在linuxfoundation wiki上面找到。

在本例中,我们将选择一个4.14内核,选择一个接近的内核版本安装在系统上。

继续下载内核源代码、补丁源代码及其签名文件:

$ wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.195-rt94.patch.xz
$ wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.195-rt94.patch.sign
$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.195.tar.xz
$ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.195.tar.sign

解压缩下载的文件:

$ xz -d linux-4.14.195.tar.xz

3.3 编译

  • 编译之前,我们需要解压源码,并且打实时补丁
$ tar xf linux-4.14.195.tar
$ cd linux-4.14.195
linux-4.14.195$ xzcat ../patch-4.14.195-rt94.patch.xz | patch -p1 
  • 接下来需要配置内核
$ make oldconfig
  • 这将要求提供内核选项。对于其他所有内容,优先购买模型将使用默认值(只需按Enter键)或根据您的偏好进行调整。对于抢占模型,请选择“Fully Preemptible Kernel”:
Preemption Model
  1. No Forced Preemption (Server) (PREEMPT_NONE)
> 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)
  3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW)
  4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)
  5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)
choice[1-5]: 5
  • 现在开始构建内核,这可能会花一点时间。。。
$ make -j `getconf _NPROCESSORS_ONLN` deb-pkg
  • 构建完成后,将linux-headerslinux-image安装在父文件夹中(仅限于名称中没有-dbg的文件)
$ sudo apt install ../linux-headers-4.14.195-rt94_*.deb ../linux-image-4.14.195-rt94_*.deb

3.4 设置GRUB确保启动到实时内核

要使新内核成为系统每次引导到的默认内核,必须更改/etc/default/grub中的grub配置文件。
(PS:这适用于ubuntu,但可能不适用于其他linux系统)

  • 可以使用列出所有可用的内核
$ awk -F\' '/menuentry |submenu / {print $1 $2}' /boot/grub/grub.cfg

menuentry Ubuntu
submenu Advanced options for Ubuntu
    menuentry Ubuntu, with Linux 4.15.0-62-generic
    menuentry Ubuntu, with Linux 4.15.0-62-generic (recovery mode)
    menuentry Ubuntu, with Linux 4.15.0-60-generic
    menuentry Ubuntu, with Linux 4.15.0-60-generic (recovery mode)
    menuentry Ubuntu, with Linux 4.15.0-58-generic
    menuentry Ubuntu, with Linux 4.15.0-58-generic (recovery mode)
    menuentry Ubuntu, with Linux 4.14.195-rt94
    menuentry Ubuntu, with Linux 4.14.195-rt94 (recovery mode)
menuentry Memory test (memtest86+)
menuentry Memory test (memtest86+, serial console 115200)
menuentry Windows 7 (on /dev/sdc2)
menuentry Windows 7 (on /dev/sdc3)
  • 上面已存在了4.14.195-rt94内核,将其设置为开机后默认使用的内核,同时更新grub菜单条目
$ sudo sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.14.195-rt94"/' /etc/default/grub
$ sudo update-grub
  • 重启电脑
    执行完上述步骤后,重新启动电脑,它应该会自动引导到正确的内核中。

4.给内核打补丁

https://github.com/pagxir/linux-patch/commit/819ac8cc0a4fdee32f2b9a881bced045a671af73
要在Linux中打入上面链接给的补丁,需要按照以下步骤进行:

  • 下载补丁文件:在终端中使用wget命令下载补丁文件,例如:
wget https://github.com/pagxir/linux-patch/commit/819ac8cc0a4fdee32f2b9a881bced045a671af73.patch
  • 切换到需要打补丁的目录:在终端中使用cd命令切换到需要打补丁的目录,例如:
cd /usr/src/linux
  • 打入补丁:在终端中使用patch命令打入补丁,例如:
patch -p1 < /path/to/819ac8cc0a4fdee32f2b9a881bced045a671af73.patch

注意,命令中的-p1参数表示要去掉补丁文件中的一级目录,如果补丁文件中包含多级目录,需要相应地修改参数。

  • 编译内核:在终端中使用make命令重新编译内核,例如:
make && make modules_install && make install

注意,这一步可能需要一些时间,具体时间取决于系统配置和内核大小。

  • 重启系统:在终端中使用reboot命令重启系统,注意,重启后需要选择新安装的内核版本才能生效。

5.安装新的内核

linux-headers-5.15.137-rt71实时内核链接:https://download.csdn.net/download/qq_45445740/88788240

  • 下载已经编译好了的5.15内核,apt install安装内核
    linux-headers-5.15.137-rt71_5.15.137-rt71-1_amd64.deb
    linux-image-5.15.137-rt71_5.15.137-rt71-1_amd64.deb
    linux-image-5.15.137-rt71-dbg_5.15.137-rt71-1_amd64.deb
  • 安装:
sudo apt install ./linux-headers-5.15.137-rt71_5.15.137-rt71-1_amd64.deb ./linux-image-5.15.137-rt71_5.15.137-rt71-1_amd64.deb ./linux-image-5.15.137-rt71-dbg_5.15.137-rt71-1_amd64.deb
  • 查看内核是否已升级:
awk -F\' '/menuentry |submenu / {print $1 $2}' /boot/grub/grub.cfg
  • 修改当前系统使用的内核:
sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.137-rt71"/' /etc/default/grub
  • sudo update-grub
  • reboot

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

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

相关文章

.NET高级面试指南专题三【线程和进程】

在C#中&#xff0c;线程&#xff08;Thread&#xff09;和进程&#xff08;Process&#xff09;是多任务编程中的重要概念&#xff0c;它们用于实现并发执行和多任务处理。 进程&#xff08;Process&#xff09;&#xff1a; 定义&#xff1a; 进程是正在运行的程序的实例&…

Kong: Services and Routes 等基本属性

Services 在Kong Gateway中&#xff0c;服务是现有上游应用程序的抽象。服务可以存储插件配置和策略等对象的集合&#xff0c;并且可以与路由相关联。 定义服务时&#xff0c;管理员会提供名称和上游应用程序连接信息。连接详细信息可以在 url 字段中以单个字符串的形式提供…

keepalived+nginx双主热备(有问题私信)

keepalivednginx双主热备 前言keepalivednginx双主热备keepalivednginx双主热备部署安装nginx安装keepalived修改master节点的keepalived配置文件 修改backup节点的keeepalived配置文件配置keepalived主备配置keepalived双主热备 前言 有关keepalived和nginx的一些工作原理&am…

YOLOv8融合改进 更换检测头同时改进C2f模块

一、Detect_DyHead检测头和C2f-EMSC,C2f-EMSCP模块 详细介绍和代码在往期的博客里: Detect_DyHead: (YOLOv8改进检测头Detect为Detect_Dyhead-CSDN博客) C2f-EMSC和C2f-EMSCP: (YOLOv8改进之多尺度转换模块C2f-EMSC和C2f-EMSCP-CSDN博客) 二、算法实现 1、将检测…

山西电力市场日前价格预测【2024-01-29】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-29&#xff09;山西电力市场全天平均日前电价为279.99元/MWh。其中&#xff0c;最高日前电价为397.38元/MWh&#xff0c;预计出现在07:45。最低日前电价为0.00元/MWh&#xff0c;预计出…

无际线复选框

效果演示 实现了一个网格布局&#xff0c;其中每个网格是一个复选框&#xff0c;可以选择是否显示。每个复选框都有一个漂浮的天花板&#xff0c;表示它是一个房间的天花板。每个房间的天花板都有一个不同的形状和颜色&#xff0c;分别对应不同的房间。整个页面的背景是一个由两…

2024/1/27 备战蓝桥杯 1-1

目录 求和 0求和 - 蓝桥云课 (lanqiao.cn) 成绩分析 0成绩分析 - 蓝桥云课 (lanqiao.cn) 合法日期 0合法日期 - 蓝桥云课 (lanqiao.cn) 时间加法 0时间加法 - 蓝桥云课 (lanqiao.cn) 扫雷 0扫雷 - 蓝桥云课 (lanqiao.cn) 大写 0大写 - 蓝桥云课 (lanqiao.cn) 标题…

js实现动漫拼图1.0版

文章目录 1 实现效果视频2 功能实现思路3代码实现 1 实现效果视频 拼图1.0 2 功能实现思路 布局忽略&#xff08;小白学前端&#xff0c;不献丑了&#xff09; 左侧拼图格 左侧4*4的拼图小格子 利用表格实现&#xff0c;规划好td的大小&#xff0c;给每个格子加上背景图片&…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

使用Python和ffmpeg旋转WebM视频并保存为MP4文件

简介: 在本篇博客中&#xff0c;我们将介绍如何使用Python编写一个程序&#xff0c;结合wxPython和ffmpeg模块&#xff0c;来旋转WebM视频文件并将其保存为MP4格式。我们将使用wxPython提供的文件选择对话框来选择输入和输出文件&#xff0c;并使用ffmpeg库来进行视频旋转操作。…

206. 反转链表(力扣LeetCode)

文章目录 206. 反转链表题目描述双指针递归 206. 反转链表 题目描述 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&am…

第八篇【传奇开心果系列】beeware的toga开发移动应用示例:实现消消乐安卓手机小游戏

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、初步实现四、扩展思路五、实现游戏逻辑示例代码六、实现界面设计示例代码七、实现增加关卡和难度示例代码八、实现存档和排行榜示例代码九、实现添加特殊方块和道具示例…

(五)流程控制switchcase

文章目录 switch case用法全配套break示例演示 不全配套break不怎么常规的写法常规的写法示例1演示1示例2演示2 经典成绩分类案例代码演示 switch case 相对于ifelse的嵌套&#xff0c;switch case 有点像并列的感觉 用法 switch (一定要放整数类型&#xff0c;int 型变量、c…

ubuntu 22 安装 node,npm,vue

1:安装 nodejs sudo apt update curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt update && sudo apt install -y nodejs node -v 2:安装npm sudo npm install n -g npm -v 3:安装vite npm install vite -g 4:运行vue 把项目拷贝到…

「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解

引言&#xff1a;什么是路径遍历&#xff1f;如何进行路径遍历攻击并规避常见防御&#xff1f;如何防止路径遍历漏洞。 1. 简介 路径遍历&#xff08;Path Traversal&#xff09;是一种安全漏洞&#xff0c;也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确…

Tomcat10安装报错Unknown module: java.rmi specified to --add-opens

错误原因需要根据自己的tomcat的版本查看 需要根据自己的tomcat找到对应安装的java版本(查看版本网址)https://tomcat.apache.org/whichversion.html 将电脑当中的环境变量JRE_HOME变量删除即可&#xff08;具体如下图&#xff09;

LeetCode 热题 100 | 矩阵

目录 1 73. 矩阵置零 2 54. 螺旋矩阵 3 48. 旋转图像 4 240. 搜索二维矩阵 II 菜鸟做题第二周&#xff0c;语言是 C 1 73. 矩阵置零 解题思路&#xff1a; 遍历矩阵&#xff0c;寻找等于 0 的元素&#xff0c;记录对应的行和列将被记录的行的元素全部置 0将被记录的…

redis-4 搭建redis集群

1.为什么需要redis集群&#xff1f; Redis 集群提供了高可用性、横向扩展和数据分片等功能&#xff0c;使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况&#xff1a; 高可用性&#xff1a;通过在多个节点之间进行数据复制和…

网络编程1

什么是网络编程 ⽹络编程&#xff0c;指⽹络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的⽅式实现⽹络通信&#xff08;或称为⽹络数据传输&#xff09;。 当然&#xff0c;我们只要满⾜进程不同就⾏&#xff1b;所以即便是同⼀个主机&#xff0c;只要是不同进程…

【服务器Midjourney】创建部署Midjourney网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建MJ】 🌼1. 给服务器添加端口 🌼2. 使用Xshell连接服务器 🌼3. 安装docker 🌼4. 安装Midjourney程序 🌼5. 绑定域名+申请SSL证书 🌼6. 更新网站