ubuntu 22.04 编译安装新内核

news2025/1/11 7:08:39

1、普通用户登录系统

查看当前内核版本

$ uname -r
5.15.0-118-generic

2、下载内核源码

www.kernel.org

用户home目录新建子目录linux,下载并解压 linux-5.15.165.tar.xz

3、创建起始的配置文件.config

Configuration targets (见linux kernel in a nutshell)

configUpdates the current kernel configuration by using a line-oriented program.
menuconfigUpdates the current kernel configuration by using a text-based menu program.
xconfigUpdates the current kernel configuration by using a QT-based graphical program.
gconfigUpdates the current kernel configuration by using a GTK+-based graphical program.
oldconfigUpdates the current kernel configuration by using the current .config file and prompting for any new options that have been added to the kernel.
silentoldconfigJust like oldconfig, but prints nothing to the screen except when a question needs to be answered.
randconfigGenerates a new kernel configuration with random answers to all of the different options.
defconfigGenerates a new kernel configuration with the default answer being used for all options. The default values are taken from a file located in the arch/$ARCH/defconfig file, where $ARCH refers to the specific architecture for which the kernel is being built.
allmodconfigGenerates a new kernel configuration in which modules are enabled whenever possible.
allyesconfigGenerates a new kernel configuration with all options set to yes.
allnoconfigGenerates a new kernel configuration with all options set to no.
$ cd linux-5.15.165

四种方法创建.config文件

(1)最基本的方法,从头开始

$ sudo make config

内核配置程序逐项询问每一个配置选项,是否启用(Y/m/n/?)。

内核包含数千个配置选项,配置所有选项需要很长时间。

(2)使用源码“默认”的内核配置

$ sudo make defconfig

通常基于内核维护者认为的最好选项,也可能只是内核维护者个人计算机所使用的配置,为了确保新内核正常运行,应该根据自己的计算机进行定制。

(3)使用发行版提供的内核配置

$ cp /boot/config-$(uname -r) ./.config

新内核增加的配置项需要手工配置。

(4)从正在运行的内核中获得配置(本文使用)

发布版的内核包含很多内核模块,但是对某个特定机器,实际用到的模块只是其中的极小一部分。
重新构建内核时,对不使用的模块进行编译就会浪费时间。
将localmodconfig作为make的目标,kbuild系统会获取一个当前在用的模块列表,
生成仅以正在使用的内核模块为对象的.config文件,减少编译时间。

localmodconfig 也是使用 /boot/config-$(uname -r) 作为基准的。

$ lsmod > /tmp/mod
$ sudo make LSMOD=/tmp/mod localmodconfig

4、按需修改配置

$ sudo make menuconfig

按/输入配置项名称,可以省略CONFIG_前缀,回车搜索
按搜索结果旁的数字,可跳转至配置项,输入y、m、n更改配置
按Esc,直至返回到初始页
继续下一个配置项
选择Save,输入新文件名

5、构建内核

Build targets(见linux kernel in a nutshell)

allBuilds all of the different targets needed for this kernel to be able to be used. This includes both the modules and the static portion of the kernel.
vmlinuxBuilds just the static portion of the kernel, not any loadable modules.
modulesBuilds all of the loadable kernel modules for this configuration.
modules_installInstalls all of the modules into the specified location. If no location is specified with the INSTALL_MODULE_PATH environment variable, they are installed in the default root directory of the machine.
dir/Builds all of the files in the specified directory and in all subdirectories below it.
dir/file.[o|i|s]Builds only the specified file.
dir/file.koBuilds all of the needed files and links them together to form the specified module.
tagsBuilds all of the needed tags that most common text editors can use while editing the source code.
$ sudo make

问题:
scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory
解决:
sudo apt install libssl-dev

问题:
<stdin>:1:10: fatal error: libelf.h: No such file or directory
解决:
sudo apt install libelf-dev

问题:
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
解决:
vi .config
CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" 改为""
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem" 改为""

问题:
net/core/rtnetlink.c:3528:1: warning: the frame size of 1112 bytes is larger than 1024 bytes [-Wframe-larger-than=]
解决:
vi .config
CONFIG_FRAME_WARN=1024 改为 4096

问题:
arch/x86/kernel/head_64.o: warning: objtool: .text+0x5: unreachable instruction
arch/x86/kernel/smp.o: warning: objtool: sysvec_reboot()+0x54: unreachable instruction
arch/x86/kernel/smp.o: warning: objtool: sysvec_reboot()+0x4c: unreachable instruction

解决:TODO

6、安装构建的所有模块

$ sudo make modules_install 
  INSTALL /lib/modules/5.15.165/kernel/drivers/net/dummy.ko
  INSTALL /lib/modules/5.15.165/kernel/drivers/net/vxlan/vxlan.ko
  INSTALL /lib/modules/5.15.165/kernel/drivers/thermal/intel/x86_pkg_temp_thermal.ko
  INSTALL /lib/modules/5.15.165/kernel/fs/efivarfs/efivarfs.ko
  INSTALL /lib/modules/5.15.165/kernel/net/ipv4/netfilter/iptable_nat.ko
  INSTALL /lib/modules/5.15.165/kernel/net/ipv4/udp_tunnel.ko
  INSTALL /lib/modules/5.15.165/kernel/net/ipv6/ip6_udp_tunnel.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/nf_log_syslog.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_LOG.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_MASQUERADE.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_addrtype.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_mark.ko
  INSTALL /lib/modules/5.15.165/kernel/net/netfilter/xt_nat.ko
  INSTALL /lib/modules/5.15.165/kernel/net/sched/act_bpf.ko
  INSTALL /lib/modules/5.15.165/kernel/net/sched/act_gact.ko
  INSTALL /lib/modules/5.15.165/kernel/net/sched/act_police.ko
  INSTALL /lib/modules/5.15.165/kernel/net/sched/cls_bpf.ko
  INSTALL /lib/modules/5.15.165/kernel/net/sched/sch_sfq.ko
  DEPMOD  /lib/modules/5.15.165

将模块放在文件系统中的适当位置,以便新内核正确找到。
模块位于 /lib/modules/kernel_version 目录中,其中 kernel_version 是刚构建的新内核的版本。

7、安装内核image

将启动以下过程: 
(1)内核构建系统将验证内核是否构建成功。
(2)构建系统会将 static kernel 部分安装到 /boot 目录下,并根据构建内核的内核版本命名这个可执行文件。
(3)将使用刚刚在 modules_install 阶段安装的模块自动创建任何所需的初始 ramdisk 映像。
(4)bootloader程序将被正确通知存在新内核,并将其添加到相应的菜单中,以便用户可以在下次引导机器时选择它。
(5)完成此操作后,内核安装成功,您可以安全地重新启动并试用新的内核映像。
请注意,此安装不会覆盖任何较旧的内核映像,因此,如果新内核映像出现问题,可以在引导时选择旧内核。

几乎所有发行版都附带一个名为 installkernel 的脚本(/usr/sbin/installkernel),内核构建系统可以使用该脚本自动将构建的内核安装到正确的位置并修改引导加载程序,开发人员无需执行任何额外操作。提供 installkernel 的发行版通常会将其放在名为 mkinitrd 的包中,因此如果在机器上找不到该脚本,请尝试安装该包。

$ sudo make install
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
sh ./arch/x86/boot/install.sh 5.15.165 \
        arch/x86/boot/bzImage System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.15.165 /boot/vmlinuz-5.15.165
update-initramfs: Generating /boot/initrd.img-5.15.165
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/update-notifier 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.15.165 /boot/vmlinuz-5.15.165
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.165
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.165.old
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.0-118-generic
Found initrd image: /boot/initrd.img-5.15.0-118-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done

问题:
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
解决:
安装binutils 或者 找到arch/x86/Makefile的142行,注释掉CONFIG_X86_X32相关配置。

问题:
Warning: os-prober will not be executed to detect other bootable partitions.
解决:
vi /etc/default/grub
添加 GRUB_DISABLE_OS_PROBER=false
sudo update-grub

$ sudo make install
sh ./arch/x86/boot/install.sh 5.15.165 \
        arch/x86/boot/bzImage System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.15.165 /boot/vmlinuz-5.15.165
update-initramfs: Generating /boot/initrd.img-5.15.165
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/update-notifier 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 5.15.165 /boot/vmlinuz-5.15.165
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.15.165 /boot/vmlinuz-5.15.165
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.165
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.165.old
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.0-118-generic
Found initrd image: /boot/initrd.img-5.15.0-118-generic
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done

8、重启系统

# reboot

查看当前内核版本

# uname -r
5.15.165

9、实现开机进入grub引导菜单,选择可用内核启动

# vi /etc/default/grub
注释 GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT 改为 30
GRUB_CMDLINE_LINUX_DEFAULT 改为 text

# update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.165
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.165.old
Found initrd image: /boot/initrd.img-5.15.165
Found linux image: /boot/vmlinuz-5.15.0-118-generic
Found initrd image: /boot/initrd.img-5.15.0-118-generic
Warning: os-prober will be executed to detect other bootable partitions.
Its output will be used to detect bootable binaries on them and create new boot entries.
done

# reboot

选择第二项,显示可选的启动内核项

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

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

相关文章

多模态大模型LLM与AIGC前沿技术实战,基于训练数据和生成算法模型

多模态大模型LLM与AIGC前沿技术实战&#xff0c;基于训练数据和生成算法模型 AI领域&#xff0c;多模态大模型LLM&#xff08;如M6、DALL-E&#xff09;与AIGC&#xff08;Artificial Intelligence for Generative Content&#xff09;的融合&#xff0c;正在重新定义内容创造的…

机器学习:对数据进行降维(PCA和SVD)

目录 前言 一、PCA 1.PCA是什么&#xff1f; 2.PCA的实现使用步骤 3.PCA参数解释 4.代码实现 5.PCA的优缺点 二、SVD 1.SVD是什么&#xff1f; 2.SVD的实现步骤 3.代码实现 总结 前言 数据降维是将高维数据转换为较低维度的过程&#xff0c;同时尽量保留数据中的关…

【人工智能学习笔记】4_2 深度学习基础之多层感知机

感知机概述 感知机是人工智能最早的模型,是一种有监督的算法,本质上是一个二分类问题,是神经网络和支持向量机的基础缺点:感知机智能解决单纯的线性问题 感知机的过程 多层感知机的层级结构 多层感知机的层级结构主要包括输入层、隐藏层和输出层、可以用于拟合非线性函数。…

达梦CASE_SENSITIVE参数解析

1. 参数含义 标识符大小写敏感&#xff0c;默认值为 Y。 当大小写敏感时&#xff0c;小写的标识符应用双引号括起&#xff0c;否则被转换为大写&#xff1b;当大小写不敏感时&#xff0c;系统不自动转换标识符的大小写&#xff0c;在标识符比较时也不区分大小写。 CASE_SENS…

HarmonyOS开发实战( Beta5.0)蓝牙实现服务端和客户端通讯详解

鸿蒙HarmonyOS开发往期必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 介绍 本示例分为服务端和客户端两个功能模块。 服务端创建蓝牙…

Cisco SD-WAN (Viptela) 20.15.1 发布,新增功能概览

Cisco SD-WAN (Viptela) version 20.15.1 ED - 软件定义广域网 Cisco SD-WAN powered by Viptela 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-sd-wan-20/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 支持 S…

SAP会计凭证导入ABAP开发模板+注意点—附带源码

会计凭证导入 前言:开发并不仅仅只要考虑实现的功能,只实现功能的是程序,考虑到使用场景的是工程。 使用bapi BAPI_ACC_DOCUMENT_CHECK 校验创建会计凭证的数据,报错和参数和正式创建一致。用途,防止产生错误的凭证,即使财务凭证可以冲销。 BAPI_ACC_DOCUMENT_POST 正式…

优化Python脚本,提高处理Office文档和数据的效率

目录 引言 性能优化的基本原则 1. 确定性能瓶颈 2. 优先优化最耗时的部分 3. 避免过度优化 4. 保持代码可读性 优化Python脚本处理Office文档和数据的方法 1. 使用高效的库和模块 2. 利用内置函数和高效的数据结构 3. 并发与异步编程 4. 缓存与重用 5. 自动化办公场…

8月更新速递丨秋风送爽,EasyTwin产品能力升级不停~

秋高气爽&#xff0c;金桂飘香&#xff0c;微风中已有几分凉意&#x1f342;&#xff5e;在过去的8月中&#xff0c;EasyTwin从**「多元异构数据融合」、「场景编辑及开发能力提升」**两方面&#xff0c;对产品进行了一轮全新的产品更新优化⬇️ 多元异构数据融合 GIS数据融…

Rust 赋能前端: 视频抽帧

❝ 如果你能想得到&#xff0c;就能做得到 大家好&#xff0c;我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder ❝ 此篇文章所涉及到的技术有 WebAssembly Rust wasm-bindgen 线程池 ViteReact/Vue(下面的内容&#xff0c;在各种前端框架中都用) 因为&#xf…

ZYNQ 7020 学习记录-2呼吸灯(模块化)

系列文章目录 1.点灯 2.呼吸灯&#xff08;模块化&#xff09; 文章目录 系列文章目录前言一、模块实例化二、呼吸灯1.原理解释2.按键消抖模块3.呼吸灯模块4.顶层模块5.上板验证 总结 前言 由于研究生课题组所需学习ZYNQ&#xff0c;以下是本人自学ZYNQ的学习记录&#xff0c…

MySQL数据库教程合集

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

【Qt】Qml界面中嵌入C++ Widget窗口

1. 目的 qml做出的界面漂亮&#xff0c;但是执行效率低&#xff0c;一直想找一个方法实现qml中嵌入c界面。现在从网上找到一个方法&#xff0c;简单试了一下貌似可行&#xff0c;分享一下。 2. 显示效果 3. 代码 3.1 工程结构 3.2 pro文件 需要添加widgets > QT quick …

数据集 VisDrone-Dataset 无人机检测跟踪数据集 >> DataBall

开源数据集 VisDrone-Dataset 无人机检测跟踪数据集-机器视觉目标跟踪 人工智能 深度学习 无人机或通用无人驾驶飞行器&#xff08;UAV&#xff09;配备相机后&#xff0c;已被迅速部署到包括农业、航拍、快速递送和监视在内的广泛应用中。因此&#xff0c;自动理解从这些平台收…

如何在Layui框架中实现列表操作后返回编辑页面并带参数刷新表单

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

C#匿名方法

在C#中&#xff0c;匿名函数是一种没有名字的方法&#xff0c;可以在代码中定义和使用。 我们已经提到过&#xff0c;委托是用于引用与其具有相同标签的方法。换句话说&#xff0c;可以使用委托对象调用可由委托引用的方法。 匿名方法&#xff08;Anonymous methods&#xff…

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGis接口说明文档)

OSGeo4W简介 更高级的 QGIS 用户应该使用 OSGeo4W 包。此安装程序可以并行安装多个版本的 QGIS&#xff0c;并且还可以进行更高效的更新&#xff0c;因为每个新版本仅下载和安装更改的组件。      OSGeo4W 存储库包含许多来自 OSGeo 项目的软件。包括 QGIS 和所有依赖项&a…

Codeforces practice C++ 2024/9/11 - 2024/9/13

D. Mathematical Problem Codeforces Round 954 (Div. 3) 原题链接&#xff1a;https://codeforces.com/contest/1986/problem/D 题目标签分类&#xff1a;brute force&#xff0c;dp&#xff0c;greedy&#xff0c;implementation&#xff0c;math&#xff0c;two pointers…

威雅学校:解锁新学期!与威雅共赴秋实之约

【常州威雅】 九月的风&#xff0c;轻拂过青春的扉页; 新学期的篇章&#xff0c;正待你我提笔书写。 常州威雅再度迎来开学季&#xff0c;我们已准备好为威雅学子们提供一个充满活力与挑战的学习环境。在这里&#xff0c;新的故事将被书写&#xff0c;新的梦想将被点燃&#xf…

Van-ZYL算法

系统模型&#xff1a;由于观测散射矩阵一定是对称的&#xff08;系统压缩后的测量结果&#xff09;&#xff0c;且原S矩阵是互易的。此时系统由R T转置 Shv Svh 目标的互易 Ohv Ovh 接收数据的固有属性 R T转置 目标互易接收数据固有属性推导 本文串扰模型有两种理解。 1、…