当前位置: 首页 > 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.rkmt.cn/news/121597.html

相关文章:

  • 农业环境监测Agent低功耗设计(基于LoRa与NB-IoT的实测对比)
  • Clipper2终极指南:快速掌握多边形裁剪与偏移技术
  • 【金融合规自动化监控指南】:为什么90%的机构都忽略了这3项规则?
  • 2025上海的留学机构比较好的排名 - 留学品牌推荐官
  • 2025年口碑好的自动吨袋包装机/定量包装机行业内口碑厂家排行榜 - 品牌宣传支持者
  • 解决FeignClient Bean名称重复注册:The bean ‘xxx.FeignClientSpecification‘已定义且覆盖禁用
  • Golang文档处理终极解决方案:docx库企业级实战指南
  • 终极指南:LOOT模组排序工具如何彻底解决天际冲突问题
  • django基于python的短视频推荐系统的设计与实现_wro56f5v
  • 如何快速部署Moonraker:3D打印远程控制完整指南
  • 2025年市场靠谱的格宾石笼网直销厂家推荐,六角石笼网/双隔板石笼网/锌铝合金石笼网/镀锌低碳钢丝石笼网格宾石笼网生产厂家有哪些 - 品牌推荐师
  • 电阻丝技术创新,2025年度您可以选择的推荐品牌 - 品牌推荐大师
  • linux系统基础介绍以及系统目录
  • 2025年专业的同芯针针电极厂家最新TOP排行榜 - 品牌宣传支持者
  • 关于Netty框架中boss线程和work线程是如何协调工作的源码分析
  • 49、Windows Server 2003 技术术语详解
  • VMware 使用记录
  • doio someip
  • 【高精度气象预测背后】:Agent 模型每日自动更新的 4 个关键步骤
  • 6、服务器虚拟化与管理的全面指南
  • 杰理之SD卡IO设置【篇】
  • 16、Hyper-V 虚拟机配置与管理全解析
  • 22、资源泄漏与线程同步技术详解
  • Kotaemon前端界面集成方案:打造可视化智能问答平台
  • 深入解析:Eclipse 创建 Java 接口
  • 24、调试器扩展:原理、实现与应用
  • 2025年比较好的短视频拍摄公司推荐:视频拍摄公司哪家合作案 - 工业推荐榜
  • 计算机毕设java公益旧物捐赠系统的设计与实现 基于Java的公益旧物捐赠管理平台的设计与开发 Java环境下公益旧物捐赠信息系统的构建与实现
  • 模组的导程与刚性
  • 五轴加工如何赋能多行业创新应用