[Linux服务器] Linux编译实时内核和打补丁

760 0
Honkers 2025-8-14 17:27:17 | 显示全部楼层 |阅读模式

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 准备

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

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

3.2 获取内核源码

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

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

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

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

  1. $ wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.195-rt94.patch.xz
  2. $ wget https://cdn.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.195-rt94.patch.sign
  3. $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.195.tar.xz
  4. $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.195.tar.sign
复制代码

解压缩下载的文件:

  1. $ xz -d linux-4.14.195.tar.xz
复制代码

3.3 编译

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

  • 可以使用列出所有可用的内核
  1. $ awk -F\' '/menuentry |submenu / {print $1 $2}' /boot/grub/grub.cfg
  2. menuentry Ubuntu
  3. submenu Advanced options for Ubuntu
  4. menuentry Ubuntu, with Linux 4.15.0-62-generic
  5. menuentry Ubuntu, with Linux 4.15.0-62-generic (recovery mode)
  6. menuentry Ubuntu, with Linux 4.15.0-60-generic
  7. menuentry Ubuntu, with Linux 4.15.0-60-generic (recovery mode)
  8. menuentry Ubuntu, with Linux 4.15.0-58-generic
  9. menuentry Ubuntu, with Linux 4.15.0-58-generic (recovery mode)
  10. menuentry Ubuntu, with Linux 4.14.195-rt94
  11. menuentry Ubuntu, with Linux 4.14.195-rt94 (recovery mode)
  12. menuentry Memory test (memtest86+)
  13. menuentry Memory test (memtest86+, serial console 115200)
  14. menuentry Windows 7 (on /dev/sdc2)
  15. menuentry Windows 7 (on /dev/sdc3)
复制代码
  • 上面已存在了4.14.195-rt94内核,将其设置为开机后默认使用的内核,同时更新grub菜单条目
  1. $ sudo sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.14.195-rt94"/' /etc/default/grub
  2. $ sudo update-grub
复制代码
  • 重启电脑
    执行完上述步骤后,重新启动电脑,它应该会自动引导到正确的内核中。

4.给内核打补丁

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

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

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

  • 编译内核:在终端中使用make命令重新编译内核,例如:
  1. 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
  • 安装:
  1. 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
复制代码
  • 查看内核是否已升级:
  1. awk -F\' '/menuentry |submenu / {print $1 $2}' /boot/grub/grub.cfg
复制代码
  • 修改当前系统使用的内核:
  1. 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

6.Ubuntu22.04 安装PREEMPT-RT实时内核

参考:https://www.cnblogs.com/wsg1100/p/17279712.html

  • 1.注册token
    将 Ubuntu Pro 订阅添加到 Ubuntu LTS 设备,用户需要免费的 Ubuntu One 帐户,到Ubuntu Pro注册一个Ubuntu 账号,https://ubuntu.com/pro,并订阅个人服务,最多可在 5 台设备上为个人和小规模商业用途免费订阅。
    在Ubuntu One 帐户中访问 Ubuntu Pro 令牌。

  • 2.激活ubunutu pro服务
    命令行启用,打开终端执行
  1. sudo pro attach 你的token
复制代码
  • 3.安装 realtime Linux kernel
    激活ubunutu pro服务后,默认还是普通Linux内核,如果要使用实时ubuntu,通过 pro 命令启用:
  1. sudo pro enable realtime-kernel
  2. sudo apt-get install ubuntu-advantage-tools
复制代码

启用完成后,安装:

  1. sudo apt-get install linux-realtime
复制代码

重启

  • 4.验证安装
    重启后输入以下命令
  1. neofetch
复制代码


安裝成功

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行