当前位置: 首页 > news >正文

linux kernel 编译/安装/切换/删除 以及添加preempt rt patch的方法

目录
  • 编译preempt_rt内核
    • 解压源码及补丁
    • 使用make bindeb-pkg进行编译
  • 安装编译的新内核
    • 更新grub
  • 切换内核:
    • 更改grub默认启动项
    • 切换启动内核
    • 更新开机引导文件
    • 重启切换指定内核
    • 注意
  • 删除内核

编译preempt_rt内核

注意:因为编译的是x86的设备,所以不存在交叉编译,arm编译需要指定交叉编译工具链及架构等,不能照搬这份教程

解压源码及补丁

preempt_rt补丁下载链接

选取匹配版本的补丁下载

tar -xzvf linux-6.8.2.tar.gz
gunzip patch-6.8.2-rt11.patch.gz

将解压得到的patch-6.8.2-rt11.patch文件复制到内核解压文件夹linux-6.8.2中,执行以下命令,make menuconfig需要将CONFIG_PREEMPT_RT的配置enable:

patch -p1 < patch-6.8.2-rt11.patch
make menuconfig # need to config "CONFIG_PREEMPT_RT=y"
make bindeb-pkg -j 16

如果有证书密钥问题可以尝试禁用,一般不需要执行

scripts/config --disable SYSTEM_TRUSTED_KEYS 
scripts/config --disable SYSTEM_REVOCATION_KEYS 

使用make bindeb-pkg进行编译

sudo make bindeb-pkg -j16

执行完成之后,在源码目录的上层会生成4个文件

linux-headers-6.1.80--000_6.1.80-rt26-0_amd64.deb #kernel头文件,kernel模块开发时会需要
linux-image-6.1.80--000_6.1.80-rt26-0_amd64.deb
linux-image-6.1.80--000-dbg_6.1.80-rt26-0_amd64.deb # debug版本,调试需要
linux-libc-dev_6.1.80-rt26-0_amd64.deb

安装编译的新内核

拷贝生成的所有deb到需要安装的目标机器上,执行安装(tips: linux-image-6.1.80--000-dbg_6.1.80-rt26-0_amd64.deb是debug版本image,可以不用拷贝)

sudo dpkg -i *.deb

更新grub

安装完成后需要更新grub

sudo update-grub

重启后就可以切换到想要的内核,因为加了rt补丁,所以会有“PREEMPT_RT”的字段(忽略版本不对的问题,手头没设备,随便找的图)

uname -a #查看当前内核

alt text

切换内核:

查看需要使用的内核在启动选项中的位置

gedit /boot/grub/grub.cfg

之后我们向下查找,直至看到 menuentry ‘Ubuntu’ ,menuentry表示grub启动选项的显示条目。如下所示

aiai@aiai-AMAX-5570:~$ grep menuentry /boot/grub/grub.cfg
if [ x"${feature_menuentry_id}" = xy ]; thenmenuentry_id_option="--id"menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {menuentry 'Ubuntu, with Linux 6.8.2-rt11' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.2-rt11-advanced-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {menuentry 'Ubuntu, with Linux 6.8.2-rt11 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.2-rt11-recovery-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {menuentry 'Ubuntu, with Linux 6.8.0-57-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-57-generic-advanced-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {menuentry 'Ubuntu, with Linux 6.8.0-57-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-57-generic-recovery-7a1c4c23-68ef-4f9e-b834-0c629dce82c2' {
menuentry 'UEFI Firmware Settings' $menuentry_id_option 'uefi-firmware' {

Advanced options for Ubuntu下有四个启动选项,在grub中的序号分别是0-3

更改grub默认启动项

该命令需要root模式下操作

sudo gedit /etc/default/grub

切换启动内核

打开grub文件后,找到 GRUB_DEFAULT=0 该项定义,可以修改,指定启动的内核“1 > x”,x为需要启动的kernel序号

GRUB_DEFAULT="1 > 2" #对应启动序号2,即'Ubuntu, with Linux 6.8.0-57-generic'

更新开机引导文件

sudo update-grub

重启切换指定内核

reboot

注意

有时因为操作失误,会出现grub中的内核实际上已经被删除的同步问题,可以查询想要的内核是否已经被安装

dpkg -l |grep linux-image

删除内核

首先查看当前使用的内核版本:

uname -a

正在使用的内核是无法删除的,我们可以删除其他内核
image-1

查询目前系统中存在的内核版本:

$ dpkg --get-selections | grep linux-image
linux-image-5.15.0-1026-intel-iotg              install
linux-image-6.6.78-rt51-test                    hold
linux-image-intel-iotg                          install

使用以下命令卸载当前未使用的多余内核:

sudo apt -P linux-image-5.15.0-1026-intel-iotg

这时再查看目前系统中存在的内核,会发现卸载的内核变成啦deinstall:

$ dpkg --get-selections | grep linux-image
linux-image-5.15.0-1026-intel-iotg              deinstall
linux-image-6.6.78-rt51-test                    hold
linux-image-intel-iotg                          install
http://www.jsqmd.com/news/110364/

相关文章:

  • 农业环境监测Agent低功耗设计(基于LoRa与NB-IoT的实测对比)
  • Kotaemon能否用于药品说明书查询?医疗合规提醒
  • Clipper2终极指南:快速掌握多边形裁剪与偏移技术
  • 2025年知名的尼龙缆绳厂家推荐及采购指南 - 品牌宣传支持者
  • 屏幕文字智能提取革命:告别手动输入的新时代办公利器
  • Kotaemon法律条文查询系统:司法领域专用RAG构建
  • 快速搭建企业级后台管理系统:Vue-Element-Plus-Admin 完整实战指南
  • 把数据放到云端,真的安全吗?云服务器安全防线拆解
  • Java HTML转PDF技术突破:OpenHTMLtoPDF在企业级文档处理中的核心价值
  • 2025新加坡10大留学机构排名 - 留学品牌推荐官
  • LibreHardwareMonitor实战宝典:精准掌控硬件运行状态
  • 量子计算:从理论到实践的科技革命 - 指南
  • 解放双手!Auto Simulated Universe自动化工具带你轻松通关模拟宇宙
  • 央国企新人成长路径
  • 终极指南:使用urdf-viz快速可视化机器人模型
  • Kotaemon REST API 文档详解:快速接入第三方系统
  • 从平面到立体:零基础掌握图片转3D模型的完整指南
  • Langflow插件全攻略:轻松打造AI应用生态圈
  • ComfyUI:颠覆传统AI绘画的节点工作流神器
  • 解决FeignClient Bean名称重复注册:The bean ‘xxx.FeignClientSpecification‘已定义且覆盖禁用
  • Kotaemon + Kubernetes:大规模部署RAG服务的架构设计
  • django基于Python的电商图书数据分析与可视化_l3rfr8eu
  • ET框架UI事件系统:从入门到精通的完整实战指南
  • 如何用AI Agent在24小时内完成全基因组关联分析?高效流程首次公开
  • Golang文档处理终极解决方案:docx库企业级实战指南
  • 3、Windows Server 2003:安装、授权与更新全解析
  • django基于python的电影推荐系统设计与实现_83632ix7
  • 全球仅3家公司掌握的核心技术:农业无人机智能避障Agent架构剖析
  • 终极指南:LOOT模组排序工具如何彻底解决天际冲突问题
  • 插件分享:将豆包生成的数学公式无损导出为Word文档