19 内核开发-内核源码编译


19 内核开发-内核源码编译

(1)开始准备


安装好virtual box + ubuntu 系统后,即可下载内核代码,进行编译

历史内核源码地址:https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/
下载 linux-5.10.102.tar.gz 的包,可以使用wget 命令
创建编译目录 /home/peach/lkd_kernels/productionk
然后解压到磁盘上 /home/peach/lkd_kernels/productionk
tar -zxf linux-5.10.102.tar.gz --directory=/home/peach/lkd_kernels/productionk/

(2)安装必备编译软件
sudo apt update 
sudo apt upgrade 
sudo apt install build-essential dkms ssh -y
sudo apt install linux-headers-$(uname –r) ssh -y
(3)进行kernel config 配置
lsmod > /tmp/lsmod.now
make LSMOD=/tmp/lsmod.now localmodconfig


# 备份执行文件:
cp –af .config ~/lkd_kernels/kconfig_prod01

# 执行编译 
make -j8

我们已经看到生成了我们需要文件 bzImage和vmlinux 文件。


注意:make LSMOD=/tmp/lsmod.now localmodconfig 该命令将执行以下操作。

设置环境变量 LSMOD 为 /tmp/lsmod.now。
执行 localmodconfig 目标。
localmodconfig 目标通常用于配置内核模块,它将创建一个名为 .config 的文件,其中包含用于编译内核模块的配置选项。
因此,该命令将使用 /tmp/lsmod.now 文件中的选项配置内核模块,然后编译该模块。
请注意,/tmp/lsmod.now 文件必须存在并且包含有效的内核模块配置选项。


(4)遇到错误

错误:一些包没有安装

make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2


#解决
scripts/config --disable SYSTEM_TRUSTED_KEYS

错误:
make[1]: *** No rule to make target 'debian/canonical-revoked-certs.pem', needed by 'certs/x509_revocation_list'.  Stop.
make: *** [Makefile:1868: certs] Error 2

#解决
scripts/config --disable SYSTEM_REVOCATION_KEYS

报错:
BTF: .tmp_vmlinux.btf: pahole (pahole) is not available
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1161: vmlinux] Error 1

一般是系统缺少dwarves软件包导致。

#解决
sudo apt-get install dwarves

报错:

FAILED: load BTF from vmlinux: Unknown error -2make: *** [Makefile:1179: vmlinux] Error 255

排查
peach@peach:~/lkd_kernels/productionk/linux-5.10.102$  sudo dmesg | grep pahole

[ 3353.221446] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-6.scope,task=pahole,pid=92508,uid=1000
[ 3353.221459] Out of memory: Killed process 92508 (pahole) total-vm:2031180kB, anon-rss:1651324kB, file-rss:4kB, shmem-rss:0kB, UID:1000 pgtables:4036kB oom_score_adj:0
[ 3565.138510] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-6.scope,task=pahole,pid=97364,uid=1000
[ 3565.138525] Out of memory: Killed process 97364 (pahole) total-vm:2031180kB, anon-rss:1647620kB, file-rss:4kB, shmem-rss:0kB, UID:1000 pgtables:4040kB oom_score_adj:0
[ 3714.551892] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/user.slice/user-1000.slice/session-6.scope,task=pahole,pid=102077,uid=1000
[ 3714.551907] Out of memory: Killed process 102077 (pahole) total-vm:2031180kB, anon-rss:1665776kB, file-rss:4kB, shmem-rss:0kB, UID:1000 pgtables:4032kB oom_score_adj:0

有人说要 10g 内存, 我的版本时 5.10 的,我分配了8g 就编译通过了,其实没有那么夸张。

Just quick FYI: Current linux build needs at least 10GB of RAM!

I was just trying to build kernel 6.5 and noticed the process was being killed after both SWAP+RAM was getting full. I started with 4.0 of RAM on my VM, then increased until it passed.

I noticed the linux building process needing about 10GiB of RAM to finish building without throwing that error. This is crazy on how much RAM it needs.

内存不够 oom killed了

# 调大虚拟机的内存 该为8g 

报错:
/bin/sh: 1: zstd: not found

#安装
 sudo apt install zstd

(5)总结

建议虚拟机磁盘设计大一点 25G 以上,否则可能编译多个版本内核后,磁盘文件就满了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CasaOS玩客云安装memos开源云笔记并实现随时随地远程记笔记

文章目录 前言1. 使用Docker部署memos2. 注册账号与简单操作演示3. 安装cpolar内网穿透4. 创建公网地址5. 创建固定公网地址 前言 本文主要介绍如何在CasaOS玩客云,使用Docker本地部署21.6K stars的热门开源云笔记服务memos,并结合cpolar内网穿透工具打…

基于Springboot的校园志愿者管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园志愿者管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结…

土壤重金属含量分布、Cd镉含量、Cr、Pb、Cu、Zn、As和Hg、土壤采样点、土壤类型分布

土壤是人类赖以生存和发展的重要资源之一,也是陆地生态系统重要的组成部分。近年来, 随着我国城市化进程加快,矿产资源开发、金属加工冶炼、化工生产、污水灌溉以及不合理的化肥农药施用等因素导致重金属在农田土壤中不断富集。重金属作为土壤环境中一种具有潜在危害…

软件测试与管理-白盒测试-逻辑覆盖法例题

目录 知识点: 例题 : 知识点: 语句覆盖:设计足够多的测试用例,使得被测试程序中的“ 每条可执行语句至少被执行一次” 优点:可通过源码观察直观地得到测试用例,无须细分每个判定表达式。缺点&am…

2024-5-3学习笔记 虚拟继承原理

目录 原理 总结 前面提到过,解决菱形继承产生的数据二义性问题和数据冗余,就需要用到虚拟继承,关于它是如何解决的,我们来一起研究。 class Person { public :string _name ; // 姓名 }; class Student : virtual public Perso…

Chrome浏览器命令行妙用:使你的网上冲浪更加无障碍

引言 在当今数字化时代,网络浏览器已成为我们日常生活中不可或缺的工具之一。对于许多人来说,Google Chrome浏览器是首选,不仅因为它的普及度,更因为它提供的丰富功能和高度的可定制性。在Chrome的众多特性中,命令行功…

Pytorch实现图片异常检测

图片异常检测 异常检测指的是在正常的图片中找到异常的数据,由于无法通过规则进行识别判断,这样的应用场景通常都是需要人工进行识别,比如残次品的识别,图片异常识别模型的目标是可以代替或者辅助人工进行识别异常图片。 AnoGAN…

Linux-信号概念

1. 什么是信号 信号本质是一种通知机制,用户or操作系统通过发送信号通知进程,进程进行后续处理 在日常生活中就有很多例子,比如打游戏方面王者荣耀的“进攻”,“撤退”,“请求集合”,“干得漂亮&#xff01…

【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明:此刻你我都在努力~ 加油陌生人~ 个人主页: Gu Gu Study ​​ 专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。 如果喜欢能否点个赞支持一下&#…

第四百九十二回

文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SearchBar组件"相关的内容,本章回中将介绍SegmentedButton组件.闲话休提,让我们一起Talk …

Java面试题:多线程3

CAS Compare and Swap(比较再交换) 体现了一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性. 线程A和线程B对主内存中的变量c同时进行修改 在线程A中存在预期值a,修改后的更新值a1 在线程B中存在预期值b,修改后的更新值b1 当且仅当预期值和主内存中的变量值相等…

Llama3-Tutorial之XTuner微调Llama3个人小助手

Llama3-Tutorial之XTuner微调Llama3个人小助手 使用XTuner微调llama3模型。 参考: https://github.com/SmartFlowAI/Llama3-Tutorial 1. web demo部署 参考上一节内容已经完成web demo部署,进行对话测试, 当前回答基于llama3官方发布的模型进行推理生成&…

MySQL基础_5.多表查询

文章目录 一、多表连接1.1、笛卡尔积(或交叉连接) 二、多表查询(SQL99语法)2.1、内连接(INNER JOIN)2.2、内连接(INNER JOIN) 一、多表连接 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 …

利用matplotlib和networkx绘制有向图[显示边的权重]

使用Python中的matplotlib和networkx库来绘制一个有向图,并显示边的权重标签。 1. 定义了节点和边:节点是一个包含5个节点的列表,边是一个包含各个边以及它们的权重的列表。 2. 创建了一个有向图对象 G。 3. 向图中添加节点和边。 4. 设置了…

Sarcasm detection论文解析 |基于情感背景和个人表达习惯的有效讽刺检测方法

论文地址 论文地址:https://link.springer.com/article/10.1007/s12559-021-09832-x#/ 论文首页 笔记框架 基于情感背景和个人表达习惯的有效讽刺检测方法 📅出版年份:2022 📖出版期刊:Cognitive Computation 📈影响因子:5.4 &…

光检测器——光纤通信学习笔记七

光检测器 光检测器的基本介绍 作用:把接受到的光信号转换成电信号 光接收器的灵敏度、光源的发光功率和光纤的损耗三者决定了光纤通信的传输距离; 光电二极管 光电转换的基本原理 之前提到,PN结由于内部载流子的扩散运动形成了内部电场&…

[Java EE] 多线程(八):CAS问题与JUC包

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (90平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

华为 二层交换机与防火墙连通上网实验

防火墙是一种网络安全设备,用于监控和控制网络流量。它可以帮助防止未经授权的访问,保护网络免受攻击和恶意软件感染。防火墙可以根据预定义的规则过滤流量,例如允许或阻止特定IP地址或端口的流量。它也可以检测和阻止恶意软件、病毒和其他威…

git与gitlab

目录 gitlab 下载与安装 重置管理员密码 gitlab命令 git远程gitlab相关命令 认证 补充 git git 分布式版本控制 安装 git的四个区域与文件的四个状态 使用git 常用命令 git 分布式管理系统 gitlab 企业私有库 github 公网共享库,全球…

hinge loss(损失函数)

Devise模型中用到hinge loss和相似性度量相结合计算损失,其损失如下: 举例说明该损失如何计算 运用公式2:(常用公式2)Devise模型用到的是公式2 参考:https://blog.csdn.net/weixin_43055882/article/det…