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.hqwc.cn/news/671516.html

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

相关文章

Java二维码、条码生成及解码工具类

功能描述 生成二维码、条码解码使用谷歌的zxing依赖 引入依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version> </dependency><dependency><groupId>…

帆软报表9.0连接达梦数据库

一、将驱动复制到帆软安装目录下 二、配置数据库连接 注意&#xff1a;dm.jdbc.driver.DmDriver是直接在文本框输入的 进行以上两部就能连接达梦数据库了

接口自动化测试之-requests模块详解

一、requests背景 Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 二、requests安装 利用p…

(二)JSP教程——taglib指令

创建标签文件 首先创建一个Web项目&#xff0c;在webapp/WEB-INF目录下创建一个tags文件夹 在tags文件夹中创建一个oddNumberSum.tag文件&#xff0c;Tag文件时扩展名为.tag的文本文件&#xff0c;其结构和JSP文件非常相似&#xff0c;该文件的目录结构如图所示 创建Tag文件的…

SOLIDWORKS Electrical电气智能零部件的运用

电气2D向电气3D转型&#xff0c;3D模型无疑是重中之重&#xff0c;精准、正确的3D模型有利于电线长度、空间大小、耗材的计算。而线槽、导轨因为要根据实际情况裁剪&#xff0c;所以即使同一规格的线槽、导轨&#xff0c;在装配时也得根据实际情况&#xff0c;修改长度&#xf…

Adobe Illustrator 2024 for Mac:矢量图形设计软件

Adobe Illustrator 2024 for Mac是一款专为Mac用户设计的行业标准矢量图形设计软件。该软件以其卓越的性能和丰富的功能&#xff0c;为设计师和艺术家们提供了一个全新的创意空间。 作为一款矢量图形软件&#xff0c;Adobe Illustrator 2024 for Mac支持创建高质量的矢量图形&a…

视频改字祝福 豪车装X系统源码uniapp前端小程序源码

视频改字祝福 豪车装X系统源码uniapp前端小程序源码&#xff0c;创意无限&#xff01;AI视频改字祝福&#xff0c;豪车装X系统源码开源&#xff0c;打造个性化祝 福视频不再难&#xff01; 想要为你的朋友或家人送上一份特别的祝福&#xff0c;让他们感受到你的真诚与关怀吗&am…

虚拟键代码

虚拟键代码 虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn 在Windows操作系统中&#xff0c;虚拟键代码&#xff08;Virtual-Key Codes&#xff09;是一组用来表示键盘上按键的数值。这些代码通常用于Windows API函数&#xff0c;以便程序能够识别和处理键盘输入。 虚拟…

【C语言刷题系列】移除元素

目录 一、问题描述 二、解题思路 三、源代码 个人主页&#xff1a; 倔强的石头的博客 系列专栏 &#xff1a;C语言指南 C语言刷题系列 一、问题描述 二、解题思路 在C语言中&#xff0c;原地移除数组中所有等于特定值的元素并返回新长度的问题可以通过双指针法…

SpringCloud——consul

SpringCloud——consul 一、consul安装与运行二、consul 实现服务注册与发现1.引入2.服务注册3.服务发现 三、consul 分布式配置1.基础配置2.动态刷新3.配置持久化 四、参考 Eureka已经停止更新了&#xff0c;consul是独立且和微服务功能解耦的注册中心&#xff0c;而不是单独作…

计算机组成结构—高速缓冲存储器(Cache)

目录 一、Cache的基本工作原理 1.Cache工作原理 2.命中率 3.Cache的基本结构 4.Cache的改进 二、Cache和主存之间的映射方式 1.直接映射 2.全相联映射 3.组相联映射 三、Cache中主存块的替换算法 四、Cache的写策略 概为了解决 CPU 和主存之间速度不匹配的问题&#x…

复写零(双指针)

下面的解法需要手动画图&#xff0c;举例去体会&#xff0c;只有自己手动去做了&#xff0c;才会有所收获。 class Solution {public void duplicateZeros(int[] arr) {int n arr.length;//先找到最后一个元素的位置;//至于为什么要直接先设dest 为-1&#xff0c;这是经过研究…