当前位置: 首页 > news >正文

【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

http://www.lryc.cn/news/227034.html

相关文章:

  • 网页判断版本更新
  • ros1 基础学习08- 实现Server端自定义四 Topic模式控制海龟运动
  • 面试题之TCP粘包现象及其解决方法
  • Word 插入的 Visio 图片显示为{EMBED Visio.Drawing.11} 解决方案
  • Elasticsearch倒排索引、索引操作、映射管理
  • USEFUL PHRASES
  • 【OpenCV】 拟合直线 与 霍夫直线 对比 , fitLine()与 HoughLinesP()对比
  • Python与ArcGIS系列(六)查找和修复数据源
  • 聊聊logback的TimeBasedRollingPolicy
  • numpy 基础使用
  • sqlite3编译脚本
  • 环形链表解析(c语言)c语言版本!自我解析(看了必会)
  • 科技云报道:数智化升级,如何跨越数字世界与实体产业的鸿沟?
  • Rt-Thread 移植6--多线程(KF32)
  • HarmonyOS应用开发-首选项与后台通知管理
  • 通过easyexcel导出数据到excel表格
  • Android---MVP 中 presenter 声明周期的管理
  • Oracle中的索引碎片
  • Java必刷入门递归题×5(内附详细递归解析图)
  • android 闪屏图适配尺寸
  • 正则表达式中(?s)与(?m)的区别
  • Clickhouse学习笔记(11)—— 数据一致性
  • 【uniapp】六格验证码输入框实现
  • 【react hook】在react hook组件中,使用Antd Table组件,columns数据异步获取,list数据更新但没有rerender解决办法
  • ChatGPT的图识别来了
  • java Stream编程笔记
  • 顶顶通语音识别使用说明
  • 重磅发布 OpenAI 推出用户自定义版 ChatGPT
  • Java 幼儿园(20231111)读取 json 文件
  • 云计算、大数据技术的智慧工地,实现对建筑工地实时监测、管理和控制的一种新型建筑管理方式