【Linux】编译Linux内核

之所以编译内核,是因为gem5全系统仿真需要vmlinux文件,在此记录一下以备后面需要。
此过程编译之后会获得vmlinux和bzImage两个文件;
主要参考知行大佬的编译内核与gem5官方教程

文章目录

  • 一、Linux源码下载
  • 二、安装编译依赖
  • 三、编译
    • 1. 内核编译前配置
    • 2. 进行编译:
    • 3. 编译失败进行清除重试
  • 四、可能遇到的问题
    • 错误1
    • 错误2
    • 错误3

一、Linux源码下载

注意:内核编译一般需要20GB左右的空间,可以预留相应的空间,之后的源码和编译过程都在那里进行。
Linux Kernel包含了所有Linux内核的版本,可以挑选自己需要的内核版本下载即可,本文以5.4.49为例,可以使用wget下载:

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.49.tar.gz
tar xf linux-5.4.49.tar.gz
cd linux-5.4.49

wget有可能比较慢,此时也可以直接点进上面的Linux Kernel页面手动下载并解压到指定位置。

二、安装编译依赖

一般来说,需要下面的依赖库,直接安装就可以:

sudo apt update
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison vim

三、编译

1. 内核编译前配置

编译内核前需要进行编译配置,选择哪些组件要编译进去,添加调试信息等。内核中包含了大量的驱动代码,很多驱动其实用不到,一般是通过一个图形化界面选择配置。
在linux-5.4.49文件夹下面打开终端输入:

make menuconfig

在这里插入图片描述
在这个界面通过方向键和上边提示的字母选项进行配置,*代表已选择。具体配置可以参考编译内核或者按需选择其他教程。

配置完毕选择Save然后Exit退出,会生成一个.config文件,这个文件里面就包含了编译配置信息,所以,需要再修改配置信息,可以用vscode打开.config文件直接进行修改。

作为普通人的我们,不大清楚哪些需要哪些不需要,我选择使用gem5官方提供的.config文件,将这个文件下载下来替换原本.config内容即可。

注意,.config文件是隐藏文件,需要选择文件夹的显示隐藏文件才能看到。

2. 进行编译:

sudo make -j 24
# 后面的数字是同时进行编译的线程数,可以灵活根据电脑配置选择

编译时间长短不定,取决于配置信息和线程数。使用gem5官方的配置文件我大概编译了几分钟就结束,得到的vmlinux文件只有26MB,但是自己通过图形化界面配置,编译则需要半个小时左右,得到的vmlinux文件有500MB。看来还是包含了很多不必要的东西。

编译得到的文件有:./vmlinux./arch/x86/boot/bzImage,参考知行大佬的解释:
vmlinux和bzImage都是Linux内核编译生成的可执行文件,它们的主要区别在于它们的文件格式和用途。

  • vmlinux是Linux内核编译生成的未压缩的内核镜像文件,它包含了整个内核的代码和数据,可以用来调试内核.它通常比较大,因为它没有被压缩.
  • bzImage是Linux内核编译生成的压缩内核镜像文件,它是用来引导启动Linux操作系统的.它是通过将vmlinux压缩成一个单独的文件,并添加一些引导代码和头部信息来生成的.

当系统引导时,bzImage首先会被加载到内存中,然后被解压缩成vmlinux形式的内核映像.因为vmlinux文件比较大,而且内核启动过程中需要加载和解压缩文件,所以bzImage文件通常比vmlinux文件小很多.

3. 编译失败进行清除重试

如果编译失败,使用下面命令清除重试:

sudo make mrproper
sudo make clean

四、可能遇到的问题

正常流程下来,极有可能遇到下面的问题:

错误1

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

错误2

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

错误3

BTF: .tmp_vmlinux.btf: pahole version v1.15 is too old, need at least v1.16
Failed to generate BTF for vmlinux
Try to disable CONFIG_DEBUG_INFO_BTF
make: *** [Makefile:1199: vmlinux] Error 1

打开.config文件注释CONFIG_DEBUG_INFO_BTF

**注意:**建议遇到之后直接使用上面的清除命令,重新生成.config文件,提前将需要注释和取消的选项进行处理。随后进行编译,会询问你是否需要开启上面注释的选项,全部按Enter默认就可以,不要选择Y或N。

报错参考1
报错参考2

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

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

相关文章

【uniapp】文件授权验真系统(含代码)

文章目录 前言一、框架选用二、数据库设计三、设计上传列表四、上传操作1.前端2.后端 五、修改操作六、访问操作七、二维码生成八、二维码访问九、删除操作总结 前言 吐槽:终于开通了【资源绑定】的功能了,之前还要一个一个的去贴链接 之前的同学联系…

Java12新增特性

前言 前面的文章,我们对Java9、Java10、Java11的特性进行了介绍,对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 今天我们来介绍一下Java12版本的新增特性 版本介绍 Java 12是Java SE的第12个版本,于2019年3月19日发布。这个…

口袋参谋:新品上架如何实现月销1w?

​如今在淘宝天猫上,开新店上新品,想要出单是很不容易的。很多商家在新品上架之后,都是非常焦虑的,总是在担心一直没销量该咋办? 以下这几个方法,大家不妨尝试一下; ①打造店铺和产品人群的一致…

MYSQL5.7和MYSQL8配置主从

1、创建专门主从的账号 #登录 mysql -u root -p #创建用户 我这里用户名为test5,注意这里的ip是从库服务器的ip CREATE USER test5192.168.1.20 IDENTIFIED WITH mysql_native_password BY xxxxx; #给主从复制账号授权 grant replication slave on *.* to test5192…

基于Qt Linux开发板USER-KEY按键实现

介绍如何在 Qt 应用上使用嵌入式 GET6818 Linux 开发板 上的按键。 工具:Qt Creator 5.14.2 平台:windows ## 资源简介 在GET6818 开发板,开发板板载资源上有两个用户按键。如下图原理图(下图开发板的按键原理图)。 ## 应用实例 想要监测这个 KEY0,首先出厂内核已经…

Spring的缓存机制-循环依赖

群公告 Java每日大厂面试题: 1、Spring 是如何解决循环依赖? 答案:三级缓存,简单来说,A创建过程中需要B,于是A将自己放到三级缓存里面,去实例化B,B实例化的时候发现需要…

01 计算机图形学概述

什么是图形学 合成和操作视觉信息。 图形学的应用 游戏 电影 动画 模拟 设计 可视化 虚拟现实VR&增强现实AR 电子绘画 图形化UI 字体 图形学的挑战 思维上的挑战 创建与虚拟世界互动需要了解物理世界的各个方面新的计算方法,显示,技术 技术上…

SpringBoot不同环境加载不同配置文件(dev,sit,uat)

目录 一、springboot的profile配置profile多配置文件 二、maven的profiles策略 我们在使用spring的时候,一般都会有不同的环境需要部署:开发环境、测试环境和验收环境,而不同的环境则会有不同的配置,比如数据库ip。解决这个问题&a…

视频批量剪辑:视频合并技巧全攻略,成为视频剪辑专家

在视频制作的过程中,我们常常会遇到需要将多个视频片段合并的需求。这不仅涉及到视频的排列和组合,还需要考虑过渡效果、音频同步等因素。在视频制作过程中,视频批量剪辑是一个非常关键的环节。它可以大大提高工作效率,减少重复劳…

经典OJ题:奇偶链表

目录 题目: 示例: 解题思路: 方法一:双链表链接法 图例: 代码演示: 解题效果: 方法二:奇偶指针 图例: 代码演示: 题目: 给定单链表…

双H桥直流马达步进电机驱动芯片SS8833E

由工采网代理的率能SS8833E是一款适用于有刷直流或双极步进电机的集成电机驱动芯片;采用eTSSOP16封装;该器件集成了两个PNMOS H桥和电流调节电路;电机输出电流可以由外部脉宽调制器(PWM)或内部PWM电流控制器控制。 工…

【Swagger 】提示 ‘Unable to find specification for group default‘

接口文档用的好好的,突然就开始找不到模块 问题记录 1. 接口文档访问不了 swagger 提示 ‘Unable to find specification for group default’ unable to find specification for group default 找不到组默认值的规范 原因:实体类里面是属性使用public…

补坑:Java的字符串String类(2):一些OJ题目

有关String的方法可以看看我上一篇博客 补坑:Java的字符串String类(1)-CSDN博客 387. 字符串中的第一个唯一字符 - 力扣(LeetCode) 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它…

计算机提示找不到xinput1_3.dll怎么办?6个xinput1_3.dll丢失完美解决方案分享

xinput1_3.dll是Windows操作系统中的一个重要动态链接库文件,它负责处理游戏控制器和其他输入设备的相关功能。当计算机出现xinput1_3.dll缺失的问题时,可能会导致无法正常使用游戏控制器或其他输入设备。下面是针对这个问题的6个解决方法: 方…

物联网AI MicroPython学习之语法 uhashlib哈希算法

学物联网,来万物简单IoT物联网!! uhashlib 介绍 实现二进制数据散列算法,支持sha256,sha1,MD5。 接口介绍 sha256 - 创建一个SHA256哈希对象 参数原型:hash_obj uhashlib.sha256([bytes]) …

时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制)

时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制) 目录 时序预测 | MATLAB实现WOA-CNN-GRU-Attention时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本描述 1.MATLAB实现…

threejs(11)-shader着色器打造漫天飞舞孔明灯

src/main/main.js import * as THREE from "three";import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; import gsap from "gsap"; // 动画库 import vertexShader from "../shaders/flylight/vertex.glsl"…

类和对象(2):构造函数,析构函数

一、构造函数 1.1 概念 构造函数是一种特殊的成员函数,名字与类名相同,创建类类型对象时编译器自动调用——初始化对象,在对象整个生命周期内只调用一次。 PS: 1. 构造函数无返回值;2. 构造函数支持重载。 class Date { public:…

Image透明度点击简述以及Unity2019之后存在无法点击的BUG修复

前言 自Unity2019之后Unity将UGUI模块从内置库修改成了通过PackageManger引入的方式。Image就来源于com.unity.modules.imgui模块。其实代码大体代码跟2018是一致的,但是还是有些细微差别,Image透明度点击不命中就是2019之后才有的问题,2018…

提升中小企业效率的不可或缺的企业云盘网盘

相比之大型企业,中小型企业在挑选企业云盘工具更注重灵活性和成本。那么市面上有哪些企业云盘产品更适合中小企业呢? 说起中小企业不能错过的企业云盘网盘,Zoho Workdrive企业云盘绝对榜上有名! Zoho Workdrive企业云盘为用户提…