Linux内核编译安装 - Deepin,Debian系

为什么要自己编译内核

优点

  • 定制化:你可以根据自己的硬件和需求配置内核,去掉不必要的模块,优化性能。
  • 性能优化:移除不需要的驱动程序和特性,减小内核体积,提高系统性能。
  • 最新特性和修复:获取最新的内核版本和特性,或者提前应用一些补丁。
  • 学习机会:通过编译内核,可以更深入地理解Linux的内部工作机制。

缺点

  • 复杂性:编译和配置内核需要较高的技术水平,过程复杂且容易出错。
  • 时间消耗:编译内核是一个耗时的过程,尤其是在资源有限的系统上。
  • 维护成本:自己编译的内核需要手动更新和维护,缺乏自动化工具的支持。
  • 兼容性问题:手动配置不当可能导致硬件或软件兼容性问题,需要仔细测试。

我的感受是

  • 了解到内核相关的知识。
  • 提前使用到最新版本的内核,不用等论坛大佬的更新:
    在这里插入图片描述
  • 内核体积大大缩小: 在这里插入图片描述

过程

下载

网站下载linux内核源码[^1] [^2],并解压,进入源码目录;
https://www.kernel.org/
https://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/

安装依赖

参考脚本安装依赖[^3];

sudo apt install git wget fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison zstd debhelper

配置文件

  1. 使用现有配置文件dppve.config[^3]
cp /xxx/dppve.config .config
  1. 精简(可选)
    先让系统尽可能多地加载模块,使用工具自动保留已加载的模块[^5] [^6];
make localmodconfig
  1. 手动调整配置(可选)
make menuconfig
  1. 使用ccache加速多次编译(可选)
    安装配置ccache[^7] [^8];
sudo apt-get install ccache
export CC="ccache gcc"
export CXX="ccache g++" 

编译

这个步骤很慢,网友讲可能需要1-3个小时;
可能是我直接在实体机上编译的原因,我第一次编译大约花费25分钟;
经过localmodconfig、ccache后,后续编译时间一般在2-8分钟,感觉很快;

make -j$(nproc)

打包deb

make bindeb-pkg

安装文件在源码文件夹同级目录生成

默认配置生成的linux-image deb文件约80M,localmodconfig后约20M;

在这里插入图片描述

安装

安装软件包[^9],linux-libc-dev可不安装;

# 查看
ls -lh ../linux-*.deb
# 安装
dpkg -i ../linux-*.deb

启用

可使用grub-customizer管理grub配置,更换内核加载
列表
在这里插入图片描述
设置
在这里插入图片描述

References

[^1]. The Linux kernel archives. (n.d.). https://www.kernel.org/
[^2]. 8.10. 编译内核. (n.d.). https://www.debian.org/doc/manuals/debian-handbook/sect.kernel-compilation.zh-cn.html
[^3]. kernel_config · AtomGit_开放原子开源基金会代码托管平台. (n.d.). https://atomgit.com/fslong/kernel_config/
[^4]. Kernelconfig.io. (n.d.). https://www.kernelconfig.io/index.html
[^5]. Linux 内核编译 —— make localmodconfig 简化内核配置流程-CSDN博客. (n.d.). https://blog.csdn.net/maijian/article/details/6202426
[^6]. 精简LINUX内核配置及快速编译的方法汇总_linux 最小配置 快速编译-CSDN博客. (n.d.). https://blog.csdn.net/exiaoqian/article/details/42522653
[^7]. 使用 ccache 加速内核编译. (n.d.). https://www.expoli.tech/articles/2023/07/06/Use-ccache-to-speed-up-kernel-compilation
[^8]. Linux 5.10.20 上使用ccache加快内核编译速度(安装配置及使用方法)_kernel-5.10编译慢-CSDN博客. (n.d.). https://blog.csdn.net/weixin_48299611/article/details/115563624
[^9]. 查看、安装、卸载内核-论坛-深度科技. (n.d.). https://bbs.deepin.org/post/243646

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

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

相关文章

什么是开放最短路径优先(OSPF)

OSPF是一种典型的链路状态路由协议,一般在同一个路由域中使用。这里的路由域指的是一个自治系统(AS),是指一组通过统一的路由策略或协议相互交换路由信息的网络。在这个自治系统(AS)中,所有的OS…

【Leetcode】最小数字游戏

你有一个下标从 0 开始、长度为 偶数 的整数数组 nums ,同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下: 每一轮,Alice 先从 nums 中移除一个 最小 元素&…

等保测评是做什么的

等保测评的定义和目的 等保测评,全称为信息安全等级保护测评,是依据国家信息安全等级保护规范规定,由具有资质的测评机构对信息系统安全等级保护状况进行检测评估的活动。等保测评的目的是验证网络系统或应用是否满足相应的安全保护等级要求…

【Linux】System V消息队列 System V信号量

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…

前端 JS 经典:小数运算不精确

原因:计算机对小数的存储是二进制的,有限位数的二进制做算法得到的是有限位数,无限位数的二进制做运算,得到的是无限位数。 如下:0.5 和 0.25 转二进制是有限位数,0.3 和 0.2 转二进制是无限位数。 (0.5)…

Spark调度底层执行原理详解(第35天)

系列文章目录 一、Spark应用程序启动与资源申请 二、DAG(有向无环图)的构建与划分 三、Task的生成与调度 四、Task的执行与结果返回 五、监控与容错 六、优化策略 文章目录 系列文章目录前言一、Spark应用程序启动与资源申请1. SparkContext的创建2. 资…

力扣1111.有效括号的嵌套深度

力扣1111.有效括号的嵌套深度 栈模拟 对于每个括号求出深度 奇数深度存入A&#xff0c;偶数深度存入B这样最大程度降低最大深度 class Solution {public:vector<int> maxDepthAfterSplit(string s) {//因为栈中只会存(的数量 所有用一个变量即可int d 0;vector<i…

Python | Leetcode Python题解之第233题数字1的个数

题目&#xff1a; 题解&#xff1a; class Solution:def countDigitOne(self, n: int) -> int:# mulk 表示 10^k# 在下面的代码中&#xff0c;可以发现 k 并没有被直接使用到&#xff08;都是使用 10^k&#xff09;# 但为了让代码看起来更加直观&#xff0c;这里保留了 kk,…

C语言内存管理深度解析面试题及参考答案(2万字长文)

在嵌入式面试时,C语言内存管理是必问面试题,也是难点,相关知识点可以参考: C语言内存管理深度解析​​​​​​​ 下面整理了各种类型的C语言内存管理的面试题: 目录 全局变量和局部变量在内存中分别存储在哪个区域? 静态变量和全局变量有什么区别? 什么是作用域?…

ORM Bee,如何使用Oracle的TO_DATE函数?

ORM Bee,如何使用Oracle的TO_DATE函数? 在Bee V2.4.0,可以这样使用: LocaldatetimeTable selectBeannew LocaldatetimeTable();Condition conditionBF.getCondition();condition.op("localdatetime", Op.ge, new TO_DATE("2024-07-08", "YYYY-MM-DD&…

如何选择适合的分布式锁技术

1. Redis锁 优势&#xff1a; 性能高&#xff1a;Redis作为内存数据库&#xff0c;读写速度非常快&#xff0c;因此Redis锁在性能上表现优异。 实现方便&#xff1a;Redis提供了丰富的命令集&#xff0c;可以方便地实现分布式锁的逻辑。 劣势&#xff1a; 可靠性&#xff1a…

Excel第31享:基于left函数的截取式数据裂变

1、需求描述 如下图所示&#xff0c;在“Excel第30享”中统计2022年YTD各个人员的“上班工时&#xff08;a2&#xff09;”&#xff0c;需要基于工时明细表里的“日期”字段建立辅助列&#xff0c;生成“年份”字段&#xff0c;本文说明“年份”字段是怎么裂变而来的。 下图为…

systemverilog的关联数组

关联数组定义 在 SystemVerilog 中&#xff0c;关联数组&#xff08;Associative Arrays&#xff09;是一种非常灵活的数据结构&#xff0c;它可以使用任意类型的键&#xff08;key&#xff09;来索引数组中的元素。这使得关联数组特别适合于实现类似哈希表&#xff08;hash t…

图像处理:使用 OpenCV-Python 卡通化你的图像(2)

一、说明 在图像处理领域&#xff0c;将图像卡通化是一种新趋势。人们使用不同的应用程序将他们的图像转换为卡通图像。如今&#xff0c;玩弄图像是许多人的爱好。人们通常会点击图片并添加滤镜或使用不同的东西自定义图像并将其发布到社交媒体上。但我们是程序员&#xff0c;…

后端老鸟的前端初探:心得与领悟20240713

&#x1f389; 后端老鸟的前端初探&#xff1a;心得与领悟 &#x1f680; 作为一名深耕后端多年的开发者&#xff0c;我最近踏上了前端探索的征程。这段跨界之旅让我有了许多深刻的心得与领悟&#xff0c;现在我想和大家细细分享&#xff1a; 前端技术的飞速更新 &#x1f68…

godis源码分析——Redis协议解析器

前言 redis这个目录下的所有代码就是为了一个事情&#xff0c;就是适配redis。 流程 redis下的基本流程 源码 在redis/client/client.go 主要是客户端处理 package clientconst (created iotarunningclosed )type B struct {data chan stringticker *time.Ticker }// …

Docker安装RabbitMQ(带web管理端)

1.拉取带web管理的镜像 可以拉取rabbitmq对应版本的web管理端&#xff0c;比如&#xff1a;rabbitmq:3.9.11-management&#xff0c;也可以直接拉取带web管理端的最新版本 rabbitmq:management. docker pull rabbitmq:3.9.11-management 注意&#xff1a;如果docker pull ra…

sqlalchemy使用with_entities返回指定数据列

sqlalchemy使用with_entities返回指定数据列 在 SQLAlchemy 中,with_entities 方法用于指定查询语句返回的实体(Entity)或列(Column)。它允许你限制查询的返回结果,只包含你感兴趣的特定字段或实体 使用方法 假设有一个名为 User 的 SQLAlchemy 模型类,包含以下字段:…

Unity3D中如何降低游戏的Drawcall详解

在Unity3D游戏开发中&#xff0c;Drawcall是一个至关重要的性能指标&#xff0c;它指的是CPU通知GPU绘制一个物体的命令次数。过多的Drawcall会导致游戏性能下降&#xff0c;因此优化Drawcall的数量是提高游戏性能的关键。本文将详细介绍Unity3D中降低Drawcall的几种主要方法&a…

设计模式使用场景实现示例及优缺点(行为型模式——模板方法模式)

模板方法模式&#xff08;Template Method Pattern&#xff09; 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一个操作中的算法的骨架&#xff0c;将算法的一些步骤延迟到子类中。这样可以在不改变算法的结构的前提下…