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 以上,否则可能编译多个版本内核后,磁盘文件就满了

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

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

相关文章

docker的介绍及使用--解决应用程序的环境配置问题

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言docker的介绍及使用参考资料前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对docker的介绍及使用–解决…

FR在开发组件时的注意事项

FR目前可以在三个地方开发自己的组件,普通报表参数面板上,普通报表填报下,决策系统中。 其中普通报表参数面板,决策系统中开发组件的属性是返回 CRPropertyDescriptor[] supportedDescriptor() 这种方式是提供属性的名字&#x…

Linux字符设备驱动(二) - 与设备驱动模型的关系

一,从/dev目录说起 从事Linux嵌入式驱动开发的人,都很熟悉下面的一些基础知识, 比如,对于一个char类型的设备,我想对其进行read wirte 和ioctl操作,那么: 1)我们通常会在内核驱动中…

分数排序 内存限制: 256 Mb时间限制: 1000 ms

题目描述 给定正整数 n 与 k, 将分母范围在 1 到 n 之间的所有最简真分数排序, 请输出其中第 k 小的分数。 输入格式 两个整数 n 与 k, 保证 k 是一个合理的参数, 即保证分母不超过 n 的最简真分数至少有 k 个。 输出格式 一个分数,形如 A/B, A 与 B 分别表示分…

【数据库原理及应用】期末复习汇总高校期末真题试卷03

试卷 一、选择题 1 数据库中存储的基本对象是_____。 A 数字 B 记录 C 元组 D 数据 2 下列不属于数据库管理系统主要功能的是_____。 A 数据定义 B 数据组织、存储和管理 C 数据模型转化 D 数据操纵 3 下列不属于数据模型要素的是______。 A 数据结构 B 数据字典 C 数据操作 D…

QT开发(四) 制作一个JSON检查小工具

1、JSON概念 1.1 定义 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人类阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript语言的子集,但是独立于编程语言,因此可以被多种…

根据相同的key 取出数组中最后一个值

数组中有很多对象 , 需根据当前页面的值current 和 数组中的key对比 拿到返回值 数据结构如下 之前写法 const clickedItem routeList.find(item > item.key current) // current是当前页 用reduce遍历数组返回最后一个值 const clickedItem routeList.reduce((lastIte…

RocketMQ:高性能、可靠的消息中间件

引言: 在当今的分布式系统中,消息中间件扮演着至关重要的角色。它们作为不同服务之间的桥梁,负责解耦、异步通信和流量削峰等功能。RocketMQ,作为一款高性能、可靠、易扩展的消息中间件,受到了广大开发者的青睐。 一…

音频可视化:原生音频API为前端带来的全新可能!

音频API是一组提供给网页开发者的接口,允许他们直接在浏览器中处理音频内容。这些API使得在不依赖任何外部插件的情况下操作和控制音频成为可能。 Web Audio API 可以进行音频的播放、处理、合成以及分析等操作。借助于这些工具,开发者可以实现自定义的音…

【网络】传输层的特点总结

1传输层协议 传输层主要有两个常见的协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP 提供可靠的、面向连接的通信服务,适用于对数据传输可靠性要求高的场景,如网页浏览、文件传输等。而 UD…

算法学习笔记(最短路——Bellman-Ford)

B e l l m a n — F o r d Bellman—Ford Bellman—Ford是一种单源最短路径算法,可以用于边权为负的图,但是只能用于小图。 大概过程: 枚举每一条边,更新可以更新的节点(起点到自己距离为 0 0 0,从地点开…

IPD-开发流程

2024-5-6记录于PR办公室 在上一家公司做硬件产品经理的时候,Richard Li曾花费“巨资”请了华为前战略专家给我们培训,讲授IPD这门课的模式都很IPD,当时完全没重视,光想着不可能靠这个能把产品做好,这样做产品必定是一批…

wordpress外贸建站公司歪建站新版网站上线

wordpress外贸建站公司 歪猫建站 歪猫WordPress外贸建站,专业从事WordPress多语言外贸小语种网站建设与外贸网站海个推广、Google SEO搜索引擎优化等服务。 https://www.waimaoyes.com/dongguan

一种基于图搜索的全局/局部路径避障策略

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一种基于图搜索的全局/局部路径避障策略前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对一种基于图搜索…

TypeScript 中,泛型和接口之间有什么联系和区别?

在TypeScript中,泛型和接口是两种不同的概念,但它们可以一起使用来增强代码的类型安全性和灵活性。下面我们来探讨它们之间的联系和区别。 联系 类型安全性:泛型和接口都用于提高代码的类型安全性。通过使用泛型和接口,你可以在编…

【driver2】设备读写,同步和互斥,ioctl,进程休眠,时间和延时,延缓

文章目录 1.实现设备读写:write函数中一个进程写没问题,两进程写:第一个进程运行到kzalloc时,第二个进程也执行了kzalloc,只第二个进程地址保存在c中,第一个进程分配内存空间地址丢失造成内存泄漏。第一个进…

题目:排序疑惑

问题描述: 解题思路: 做的时候没想到,其实这是以贪心题。我们可以每次排最大的区间(小于n,即n-1大的区间),再判断是否有序 。因此只需要分别判断排(1~n-1)和(…

我独自升级崛起下载教程 我独自升级崛起一键下载

动作RPG游戏基于广大喜爱的动画和在线漫画《我独自升级崛起》在5月8日,这款新的游戏首次在全球亮相,意在给那些对游戏情有独钟的玩家带来更加丰富和多种多样的游戏体验。这个网络武侠题材的游戏设计非常具有创意,其主要故事围绕着“独孤求败”…

商业银行业务文件归档范围和档案保管期限

商业银行业务文件归档范围和档案保管期限 对公信贷业务文件归档范围和档案保管期限表 序号 归档范围 保管期限 备注 1 借款人、担保人基本资料 1.1 营业执照或事业法人证书 10年 1.2 法人授权委托证明书 10年 1.3 法定代表人身份证明 10年 1.4 特殊…

Dataframe数据类型相关问题汇总及处理方法

1. dataframe结构下有一列数据,有一部分是int类型,另一部分是object类型。当数据是int类型时,返回其本身,当是object类型时,采用其他处理方式; 使用lambda 和isinstance来实现: isinstance(x,…