一文搞懂Linux kernel编译步骤

一、前言

什么是Linux的内核编译呢?简单来说,Linux内核编译是一个将内核源代码转换成可在特定的硬件架构上运行的二进制文件的过程。通过编译内核,我们可以根据自己的需求和兴趣对内核进行定制和优化,以满足特定的应用场景。下文则是Linux内核编译的详细流程:

注: 在ubuntu20.04.3 LTS中以kernel 6.11.6为编译版本

二、 内核编译流程

2.1 准备工作

  • 1.安装必要的编译工具
    安装gcc编译器、make工具、ncurses库(用于make menuconfig)等编译工具

    sudo apt install make gcc git  libncurses5-dev
    sudo apt install  fakeroot build-essential xz-utils libssl-dev bc flex libelf-dev bison  ccache zstd dwarves(解决btf生成问题)
    
  • 2.获取内核源代码
    可以从官方网站或源代码仓库中获取Linux内核的源代码,我们可以选择下载最新版本的源代码,或者根据我们的需求选择特定版本的源代码,可以通过git clone或者直接下载来获取内核源代码。
    官网地址: https://kernel.org/

  • 3.解压内核源代码
    如果下载的是压缩包,需要使用相应的命令将压缩包解压到你需要的目录。

2.2 配置内核

  • 4.复制默认配置
    将默认的内核配置文件复制到我们下载好的内核源代码的目录中,并重命名为.config文件。

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

    在这里插入图片描述

  • 5.修改默认配置
    打开config
    修改 CONFIG_SYSTEM_TRUSTED_KEYS,将其赋空值。

    vim .config   
    CONFIG_SYSTEM_TRUSTED_KEYS=""
    
  • 6.打开内核配置界面
    通过make menuconfig命令在终端中打开内核配置界面。在配置界面中,可以选择启用或禁用特定的功能、模块和设备驱动程序。还可以调整内核的参数和选项,以满足我们特定的需求。

     make menuconfig
    
  • 7.保持配置
    配置完成后,保存并退出菜单。这将生成一个包含所选配置信息的.config文件。

2.3 编译内核

  • 8.开始编译
    在内核源码目录中运行make命令开始编译内核。这个过程需要一段时间,具体取决于系统配置和计算机性能。

    make -j8  //-j代表CPU的个数
    //查看CPU的个数
    screenfetch
    

    在这里插入图片描述

  • 9.安装内核模块
    编译完成后,将编译生成的内核模块安装到系统中。

    sudo make modules_install //可能有问题,如果有问题,则执行下面的语句
    sudo make INSTALL_MOD_STRIP=1 modules_install -j8  (INSTALL_MOD_STRIP=1一定要加上,否则会有initrd.img-xxx文件太大的问题,导致开机一直卡在加载映像到磁盘,无法开机)
    

    在这里插入图片描述

  • 10.安装内核镜像
    运行make install命令将编译生成的内核镜像(如vmlinuz)和initramfs或initrd 镜像(如果需要的话)复制到/boot目录下。

    sudo make install
    

    在这里插入图片描述

    检查一下/boot/initrd.img-xxx大小是否太大,正常一般不超过100M,如果太大就执行(make INSTALL_MOD_STRIP=1 modules_install -j8)的命令,然后再执行:

    mkinitramfs /lib/modules/6.11.xxxx/ -o /boot/initrd.img-6.11xxx
    

    注意: 当我们编译并安装了新的内核后,通常需要为新的内核创建一个匹配的initrd映像文件。这是因为新的内核可能需要不同的驱动程序和配置来访问存储介质和挂载根文件系统。在这种情况下,我们就可以使用mkinitramfs命令来创建新的initrd映像文件,并确保它与新的内核版本相匹配。

2.4 验证和测试

  • 11.重新启动计算机
    选择新编译的内核启动。
  • 12.验证内核编译是否成功
    使用uname-a命令查看当前系统的信息,确认内核名称、版本号和发布日期是否正确。
    uname-a
    
    在这里插入图片描述

三、注意事项

  • 备份
    在进行内核编译之前,建议将备份当前的系统和内核配置,以防万一编译失败或出现其他问题的时候我们可以及时回退。
  • 依赖关系
    确保系统配置和硬件支持所选择的内核选项,在编译过程中,如果遇到依赖关系错误,可以检查并安装缺失的依赖包。这个一般我们将编译错误复制在浏览器中查询一般就可以找到缺失的依赖包了。

四、具体内核编译问题

4.1 编译内核报错:No rule to make target ‘debian/canonical-certs.pem‘

  • 报错描述

    make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 				'certs/x509_certificate_list'.  Stop.
    make: *** [Makefile:1053: certs] Error 2
    
  • 问题原因

    缺少证书

  • 问题解决

    方法一: 打开.config文件注释掉这一行或将其赋空值

    CONFIG_SYSTEM_TRUSTED_KEYS="debian/certs/benh@debian.org.cert.pem"
    

    方法二: 执行完下面的语句后make clean,然后重新编译

    scripts/config --disable SYSTEM_TRUSTED_KEYS
    

    后续遇到的一些实际错误也会在下面接着进行补充,大家感兴趣和以关注加收藏。

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

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

相关文章

CST汽车天线仿真(双向混合求解)

CST从2018版本开始具有双向混合求解,到2019版已经通用微波工作室的各个求解器之间的双向混合。具体的混合对象如下图: 对天线的安装和耦合仿真,意味着对复杂结构(天线)和电大尺寸环境(安装平台,…

leetcode-5-最长回文子串

题解: 回文串:如果一个字符串正着读和反着读都是一样的那这个字符串就是回文串。 对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。 1、初始化字典d…

Python反射API:面向对象编程的“魔法镜”

在Python的世界里,面向对象编程(OOP)就像是一场盛大的化妆舞会,每个对象都穿着华丽的外衣,隐藏着自己的真实面目。而Python的反射API,就像是一面“魔法镜”,能够让我们窥探这些对象的真实身份和…

Python练习8

Python日常练习 题目: 编写函数,接收两个正整数作为参数,返回一个元组, 其中第一个元数为最大公约数,第二个元素为最小公倍数。 例如: 若输入12,8,则输出如下 【请输入一个…

推荐程序员好用的浏览器插件

推荐程序员好用的浏览器插件 1. 网页颜色控制:Dark Reader安装效果 2. 前端助手:FeHelper安装效果 3. markdown可视化:Markdown Reader安装效果 4. ES插件:Multi Elasticsearch Heads安装效果 1. 网页颜色控制:Dark Re…

希尔排序算法

1、基本思想 希尔排序也称缩小增量排序,是插入排序的一种更高效的改进版本。它的基本思想是先将待排序的数组元素按照一定的间隔(称为增量)分成若干个子序列,分别对这些子序列进行插入排序,随着迭代的进行,…

太速科技-634-基于3U PXIe的VU3P FMC+数据接口板

基于3U PXIe的VU3P FMC数据接口板 一、产品概述 板卡是一款基于 3U PXIE 总线架构的高性能数据预处理FMC 载板,具有 1 个 FMC(HPC)接口,1 个 X8 GTH 背板互联接口,可以实现 1 路 PCIe x8。板卡主控芯片采用Xilin…

OpenCV基本操作(python开发)——(8)实现芯片瑕疵检测

OpenCV基本操作(python开发)——(1) 读取图像、保存图像 OpenCV基本操作(python开发)——(2)图像色彩操作 OpenCV基本操作(python开发)——(3&…

MySQL数据库中的视图

视图 ​ 本篇将开始介绍有关数据库中视图的相关知识点,其中主要包含视图的基本使用,视图规则和限制。 ​ 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会…

Docker 镜像拉不动?自建 Docker Hub 加速站 解决镜像拉取失败

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 众所周知,6 月份的时候,Docker Hub 的镜像就已经无法正常拉取,那会随手用 Nginx 反代了一下 Docker Hub,建了个自用的镜像站,一直用到了 9 月份&…

应对传统能源企业管理人员青黄不接问题:搭建系统完善的招聘管理体系

应对传统能源企业管理人员青黄不接问题:搭建系统完善的招聘管理体系 对于很多传统能源企业由于成立时间久,发展到现在,往往都面临着一个共性问题,即未来三到五年,老员工退休后,新员工如何接续的问题。这个…

C++进阶-->红黑树的实现

1、红黑树的概念 红黑树是一棵二叉搜索树,他和前面AVL树不同的是红黑树不是通过平衡因子来保证树的平衡,而是在树结点的处加多了个记录颜色的变量,这个变量可以是红色或者黑色。通过对任何一条从根到叶子的路径上各个结点的颜色进行约束&…

Linux操作系统开机引导

linux操作系统的开机引导的过程 linux操作系统开机流程图 1、开机自检:根据bios的设置,对cpu、内存、显卡、键盘等设备进行初步检测,如果以上检测设备正常工作,系统会把控制权移交到硬盘 总结:检测包含系统启动操作系…

DataX 的安装配置和使用 (详细版)

1,上传解压 1,开始上传安装包到你虚拟机上放置安装包的文件夹 2,开始解压 ,配置环境变量 1、上传 /opt/modules 2、解压 tar -zxvf datax.tar.gz -C /opt/installs 3、修改 vi /etc/profile 配置环境变量: export DAT…

蓝桥杯第21场小白入门赛补题

5.蓝桥派对 思路 :一个区间与多少个其他区间有关联,先对所有区间左端点和右端点从小到大排序,对于每个询问,我们先算出[1,r]这个区间里有多少个区间的起点即区间总数,使用upper_bound函数,然后使用lower_bo…

Linux篇(常见入门命令)

目录 一、开启终端 二、Linux命令格式 1. 什么是Linux 的命令? 三、Linux下的命令补全 四、切换用户 五、uname:查看操作系统信息 六、ls:查看目录下文件 1. 用法一 2. 用法二 3. 用法三 七、pwd:显示当前路径 八、cd&…

7.qsqlquerymodel 与 qtableview使用

目录 qtableview 委托QStyledItemDelegateQAbstractItemDelegateCheckBoxItemDelegate使用 qtableview 委托 //设置单元格委托 void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *itemDelegate() const;//设置列委托 void setItemDelegateForCol…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

2024.11.6更新 关闭MPO有点用但是还是驱动掉到恶心,找到终极方法了视频输出直接插主板走核显,稳得一笔,3dmark跑了个分几乎没变化。核显负责桌面浏览器,独显就专心只跑游戏。等24.11驱动再看看 问题 折磨的开始是天下苦黄狗久矣&…

VS2022远程连接调试编译Linux环境下的C++代码

工具:VS2022 虚拟机:RHEL 8.0 一、下载必要工具 1.VS2022组件安装 打开VS2022Installer,点击修改下载必要工具。 选择Linux 和嵌入式开发,然后点击右下角的修改! 等待安装........ 安装完成后,创建Linu…

AI笔筒操作说明及应用场景

AI笔筒由来: 在快节奏的现代办公环境中,我们一直在寻找既能提升效率、增添便利,又能融入企业文化、展现个人品味的桌面伙伴。为此,我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版,它集高科技与实用性于一身…