【linux系列】内核编译最新教程+常见问题总结

  • 编译环境
  • 环境准备
  • 编译准备
  • 修改配置
    • linux 提供的三种配置命令
    • 使用 gconfig 配置
    • 编译内核
  • 安装内核
  • 载入新内核
  • 检查内核
  • 常见问题

编译环境

  • 虚拟机: VMware workstation pro 16
  • 虚拟机操作系统: ubuntu-20.04.3-desktop-amd64
  • 原系统内核版本:5.11.0-46-generic
  • 内核源码版本:5.11.1

环境准备

  • 安装VMware虚拟机并创建虚拟机
  • 安装Ubuntu系统
  • 下载内核源码
    • 新编译的内核源码版本建议和原系统内核版本相近(大版本一致)
    • 查看系统内核版本命令
      uname -r
      

编译准备

  • 建议将内核源码移动到 /usr/src/
sudo cp linux-5.11.1.tar.xz /usr/src/
  • 切换目录到 /usr/src/
cd /usr/src/
  • 将内核源码解压,这里使用的是 linux-5.11.1.tar.xz.xz为双重压缩,因此先使用 xz命令解压
sudo xz -d linux-5.11.1.tar.xz
  • 然后使用 tar命令 解压
sudo tar -xf linux-5.11.1.tar
  • 切换到 linux-5.11.1 目录下
cd linux-5.11.1

修改配置

linux 提供的三种配置命令


// 不建议使用
sudo make config// 建议使用(图形界面,键盘操作)
sudo make menuconfig// 强烈建议使用(图形界面,鼠标操作)
sudo make gconfig

使用 gconfig 配置

  • 安装 make
sudo apt install make
  • 安装 gcc
sudo apt install gcc
  • 安装 gtk+-2.0gmodule-2.0libglade-2.0
sudo apt install libgtk2.0-dev libglib2.0-dev libglade2-dev
  • 安装 flex
sudo apt install flex
  • 安装 bison
sudo apt install bison
  • 启动 gconfig
sudo make gconfig

  • 如果需要修改配置可以在 gconfig中图形化进行设置,在这里需要注意,配置选项有时分为三类,分别对应 NMY

    • N 未选中,即编译时不加入,gconfig中为不选中
    • M 编译成模块,gconfig中选中时为 - 表示
    • Y 编译入内核,gconfig中选中时为 表示
  • 配置好后点击 Save 即可保存配置,生成 .config 文件
  • 通常源码所带的默认配置所需编译的内核和模块很多,编译一次时间大约在 2-3小时左右(与虚拟机的配置和电脑的性能有关)
  • 因此在开发中遇到需要编译内核的情况,往往对内核进行裁剪,这里我准备了一份裁剪过的内核配置(裁剪的较多,很多模块缺失,谨慎使用)
  • 使用方式
    • 【建议】先使用 gconfig 生成 .config 文件,并做好备份
    • 下载 .config(Google 云端硬盘) 或者.config(百度网盘 提取码 2022 )后替换原本内核中的 .config
    • 执行 sudo make gconfig 检查是否替换成功,点击 Save 保存

编译内核

  • 安装 ssl
sudo apt install libssl-dev
  • 安装 elf
sudo apt install libelf-dev
  • 执行编译命令
sudo make -j4
  • 编译时间大概为半小时,开把游戏,倒杯茶,走几圈。
  • 编译成功如下图

安装内核

  • 安装模块
sudo make modules_install
  • 安装成功如下图
  • 安装内核
sudo make install
  • 安装成功如下图

载入新内核

  • 重启 Ubuntu

    reboot
    
  • 系统会默认将新安装的内核作为 grub 的第一个启动项

  • 如果想要自行切换不同内核,在出现载入进度条时,点击 shift

  • 进入 grub 后选择 ubuntu 高级选项

  • 回车进入后,上下选择自己想要进入的内核,回车进入

检查内核

  • 检查内核版本

    uname -r
    
  • 结果如下

常见问题


sudo: make:找不到命令

解决办法: 安装 make


/bin/sh: 1: gcc: not found
make[1]: *** [scripts/Makefile.host:95:scripts/basic/fixdep] 错误 127
make: *** [Makefile:534:scripts_basic] 错误 2

解决办法: 安装 gcc


*
* Unable to find the GTK+ installation. Please make sure that
* the GTK+ 2.0 development package is correctly installed.
* You need gtk+-2.0 gmodule-2.0 libglade-2.0
*
make[1]: *** [scripts/kconfig/Makefile:204:scripts/kconfig/gconf-cfg] 错误 1
make: *** [Makefile:601:gconfig] 错误 2

解决办法: 安装 gtk+-2.0gmodule-2.0libglade-2.0


/bin/sh: 1: flex: not found
make[1]: *** [scripts/Makefile.host:9:scripts/kconfig/lexer.lex.c] 错误 127
make: *** [Makefile:601:gconfig] 错误 2

解决办法: 安装 flex


/bin/sh: 1: bison: not found
make[1]: *** [scripts/Makefile.host:17:scripts/kconfig/parser.tab.h] 错误 127
make: *** [Makefile:601:gconfig] 错误 2

解决办法: 安装 bison


scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: 没有那个文件或目录21 | #include <openssl/bio.h>|          ^~~~~~~~~~~~~~~
compilation terminated.
make[1]: *** [scripts/Makefile.host:95:scripts/extract-cert] 错误 1
make[1]: *** 正在等待未完成的任务....
make: *** [Makefile:1185:scripts] 错误 2

解决办法: 安装 ssl


error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel
make: *** [Makefile:1222:prepare-objtool] 错误 1

解决办法: 安装 elf


进入initramfs
alert:uuid=xxxxxx does not exist,
ls /dev下没有sda

原因分析: 内核裁剪过度,将 SCSI 模块裁剪,MPT模块裁剪
解决办法: 重新修改内核配置,将 Device Drivers下,

  • Fusion MPT device suppot中所有模块加入
  • SCSI device support下与 SCSI 有关的模块加入
  • SCSI device supportSCSI low-level driversLSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver加入

【linux系列】内核编译最新教程+常见问题总结相关推荐

  1. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  2. linux nginx编译详解,Linux下nginx编译安装教程和编译参数详解

    这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备 1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码 代码如下:# ...

  3. 嵌入式Linux的内核编译

    实验环境 VMware Workstation Player Ubuntu16.04 kernel-3.2.tar.bz2 Linux内核编译 在ubuntu上编译嵌入式Linux内核,需要大家提前安 ...

  4. LINUX操作系统的内核编译内幕详解一

    内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/u ...

  5. linux 3 内核编译环境,Linux编译内核记

    前段时间学校某课程(你猜啥课程~)要求进行简单的linux内核编译,并添加自己的系统调用,对于Linux小白来说这可不是件简单的事,的确话费不少时间和精力.趁此博客终于过了之际,来记录一下~ 0x01 ...

  6. linux ipv6内核编译,linux ipv6内核设置

    linux ipv6内核设置,进入/proc/sys/net/ipv6: conf/all/forwarding Type: BOOLEAN 在两个接口之间进行global IPv6 forwardi ...

  7. Linux kernel内核编译配置选项详解

    转载于:http://lamp.linux.gov.cn/Linux/kernel_options.html 作者:金步国 Code maturity level options 代码成熟度选项 Pr ...

  8. linux ubuntu16.04 编译opencv教程(没编过,有时间再弄,推流不用opencv也行的)

    文章目录 下源码 编译 配置opencv环境 下源码 https://github.com/opencv/opencv/releases/tag/4.4.0 然后在ubuntu里建个文件夹把它扔进去, ...

  9. centos linux内核编译环境,CENTOS linux kernel 内核编译

    题记:今天装docker,提示我最好用3.10以上的内核 一.环境 1.1 系统环境 [root@test kernels]# lsb lsblk        lsb_release [root@t ...

最新文章

  1. 网媒亟待建立广告价值衡量体系
  2. ssh vim中不小心按下ctrl+s
  3. cmd看excel有多少个子表_快看!杭州各区5月房价表出炉!现在买套房要多少钱?...
  4. Elasticsearch系列「二」如何物理删除给定期限的历史数据?
  5. postgis启动_postgresql的安装和启动方法
  6. Redis之java操作篇(数据对象的存取)
  7. C#解决Webservice第一次访问特别慢的问题
  8. docker 容器内部获取自身id_crontab入门二:定时启动docker容器并启动容器内部脚本...
  9. QT:创建一个widget,包含源文件,头文件,以及ui文件
  10. python汇总json数据_python的json包位置及用法总结
  11. 麦克纳姆轮全向移动机器人纵向直线运动分析
  12. 老罗Android开发视频教程 15集
  13. 第一二三章 PMP第六版读书笔记
  14. 网易云音乐 网络错误 linux,在Linux下网易云音乐打不开的另一种解决方法
  15. 知识点二十五:启发式搜索算法——A*算法
  16. PS 批处理切图去空白
  17. 图模型在欺诈检测应用一点看法
  18. php网站403 forbidden,403 forbidden怎么解决
  19. android lcd工作原理,Android display架构分析(二)
  20. 使用a标签下载文件而不是直接打开

热门文章

  1. 麒麟V10双网卡绑定测试
  2. 如何打造一个语音聊天室
  3. Eclipse中new一个对象之后自动补齐快捷键
  4. ueditor富文本编辑器增加默认字体、字号
  5. [前端项目]微信小程序 小商城
  6. textarea 聚焦后边框_如何更改textarea的边框颜色:focus
  7. Maxon将在Siggraph 2019公布下一代Cinema 4D RELEASE 21
  8. 还原计算机系统,图文详解怎么一键还原电脑系统
  9. 使用PowerShell获取Trustedinstaller权限
  10. 解密四参七参工程坐标系,并使用图新地球完成四参七参计算,实现不同投影坐标参数数据融合