Linux编译实时内核和打补丁

目录

  • 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 Model1. 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.cfgmenuentry Ubuntu
submenu Advanced options for Ubuntumenuentry Ubuntu, with Linux 4.15.0-62-genericmenuentry Ubuntu, with Linux 4.15.0-62-generic (recovery mode)menuentry Ubuntu, with Linux 4.15.0-60-genericmenuentry Ubuntu, with Linux 4.15.0-60-generic (recovery mode)menuentry Ubuntu, with Linux 4.15.0-58-genericmenuentry Ubuntu, with Linux 4.15.0-58-generic (recovery mode)menuentry Ubuntu, with Linux 4.14.195-rt94menuentry 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.mzph.cn/news/652105.shtml

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

相关文章

spring整合mybatis的底层原理

spring整合mybatis的底层原理 原理&#xff1a; FactoryBean的自定义对象jdk动态代理Mapper接口对象 一、手写一个spring集成mybatis 目录结构&#xff1a; 1.1 入口类 public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext co…

Linux中的软链接与硬链接

Linux链接概念 Linux链接分两种&#xff0c;一种被称为硬链接&#xff08;Hard Link&#xff09;&#xff0c;另一种被称为符号链接&#xff08;Symbolic Link&#xff09;。默认情况下&#xff0c;使用 ln 命令不加参数创建硬链接&#xff0c;加 -s 参数则创建软链接 硬链接…

【mongoDB】创建用户账号和权限

使用use database_name 命令创建或切换到一个数据库 查看用户 show users 输入该命令后&#xff0c;无数据表示该数据库没有用户 创建用户 user:" freedom " 表示用户名为freedom pwd:" 123456 ” 表示密码为123456 roles:[" root "] …

一键去除图片背景——background-removal-js

一些JavaScript库和工具可以帮助实现背景去除&#xff1a; OpenCV.js&#xff1a;OpenCV的JavaScript版本&#xff0c;提供了许多计算机视觉功能&#xff0c;包括背景去除。Jimp&#xff1a;一个用于处理图像的JavaScript库&#xff0c;提供了许多图像处理功能&#xff0c;包括…

Deepin基本环境查看(六)【计算机、回收站、控制面板、文档、设备管理器】

Deepin基本环境查看 - 目录Deepin基本环境查看&#xff08;一&#xff09;【基本信息】Deepin基本环境查看&#xff08;二&#xff09;【内存】Deepin基本环境查看&#xff08;三&#xff09;【网络信息】Deepin基本环境查看&#xff08;四&#xff09;【硬盘/分区、文件系统、…

鸿蒙ArkUI 宫格+列表+HttpAPI实现

鸿蒙ArkUI学习实现一个轮播图、一个九宫格、一个图文列表。然后请求第三方HTTPAPI加载数据&#xff0c;使用了axios鸿蒙扩展库来实现第三方API数据加载并动态显示数据。 import {navigateTo } from ../common/Pageimport axios, {AxiosResponse } from ohos/axiosinterface IDa…

第5章 (python深度学习——波斯美女)

第5章 深度学习用于计算机视觉 本章包括以下内容&#xff1a; 理解卷积神经网络&#xff08;convnet&#xff09; 使用数据增强来降低过拟合 使用预训练的卷积神经网络进行特征提取 微调预训练的卷积神经网络 将卷积神经网络学到的内容及其如何做出分类决策可视化 本章将…

Android 性能优化总结:包体积优化

前言 随着开发不断迭代&#xff0c;App体积越来越大&#xff0c;包大小的增大也会给我们应用带来其他的影响 比如 下载率影响 过大的包体积会影响下载转化率&#xff0c;根据Google Play Store包体积和转化率分析报告显示&#xff0c;平均每增加1M&#xff0c;转化率下降0.2%左…

基于Java SSM框架实现大学生综合素质评分平台项目【项目源码+论文说明】

基于java的SSM框架实现大学生综合素质评分平台演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所…

C#调用SqlSugar操作达梦数据库报错“无效的表或视图名”

安装达梦数据库后&#xff0c;使用SqlSugar连接测试数据库并基于DBFirst方式创建数据库表对应的类&#xff0c;主要代码如下&#xff1a; SqlSugarClient db new SqlSugarClient(new ConnectionConfig(){DbType DbType.Dm,ConnectionString "Serverlocalhost; User Id…

qemu单步调试arm64 linux kernel

一、背景和目的 qemu搭建arm64 linux kernel环境-CSDN博客 之前介绍了qemu启动kernel的配置步骤和方法&#xff0c;现在开始我们的调试&#xff0c;这篇文章主要讲解如何单步调试内核&#xff0c;所有的实验还是基于ARM64&#xff1b; 二、环境准备 需要准备hostx86 target…

容器化部署 Jenkins,并配置SSH远程操作服务器

目录 一、Jenkins是什么 二、常见的部署Jenkins的方法 三、为什么选择容器化部署 四、容器化部署Jenkins步骤 1、安装 Docker 2、获取 Jenkins 镜像 3、创建并运行容器 4、访问 Jenkins 4.1 查看初始密码问题 5、配置 Jenkins 5.1 安装插件 5.2 创建管理员用户 5.3…

Java项目实战--瑞吉外卖DAY03

目录 P22新增员工_编写全局异常处理器 P23新增员工_完善全局异常处理器并测试 p24新增员工_小结 P27员工分页查询_代码开发1 P28员工分页查询_代码开发2 P22新增员工_编写全局异常处理器 在COMMON新增全局异常捕获的类&#xff0c;其实就是代理我们这些controlle。通过aop把…

基于SSM+Shiro+Druid实现的企业资产后台管理系统

系统介绍 系统演示 关注【全栈小白】视频号查看演示视频 随着企业的发展&#xff0c;很多中小企业的规模越来越大&#xff0c;需要管理资产也越来越多&#xff0c;比如显示器&#xff0c;主机&#xff0c;打印机&#xff0c;传真机&#xff0c;复印机&#xff0c;电话&#…

SAP-PP: BOM选择标识不存在

在MM03 中选择生产版本无法打开 原因是未维护 BOM选择标识 配置路径&#xff1a;生产→物料需求计划→工厂参数→执行工厂参数总体维护→BOM/工艺路线选择 T-CD: OPPQ

flutter极光推送配置厂商通道(华为)笔记--进行中

一、基础集成按照下面官方文档进行 厂商通道相关参数申请教程 集成厂商 集成指南 官方文档&#xff1a;厂商通道回执配置指南 注意&#xff1a;不同厂商对app上架的要求不同&#xff0c;华为、荣耀 对app上架没有硬性要求 遇到问题 1、引入apply plugin: com.huawei.agconn…

Jenkins部署及应用

一. 简介 二. 下载地址源&#xff1a; …

Docker部署Stable-Diffusion-webui

前排提示&#xff1a;如果不想折腾&#xff0c;可直接跳到最后获取封装好的容器&#xff0c;一键运行 :D 前言 乘上AI生成的快车&#xff0c;一同看看沿途的风景。 启一个miniconda容器 docker run -itd -v 宿主机内SD项目路径:/tmp --gpus all --ipc host -p 7860:7860 con…

机器学习---可能近似正确(PAC)、出错界限框架

1. 计算学习理论概述 从理论上刻画了若干类型的机器学习问题中的困难和若干类型的机器学习算法的能力 这个理论要回答的问题是&#xff1a; 在什么样的条件下成功的学习是可能的&#xff1f; 在什么条件下某个特定的学习算法可保证成功运行&#xff1f; 这里考虑两种框架&…

《SPSS统计学基础与实证研究应用精解》视频讲解:数据结构重组(数据重组方式的选择、由变量组到样本观测值组的重组、由样本观测值组到变量组的重组)

《SPSS统计学基础与实证研究应用精解》4.11 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解4.11节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会…