【linux系列】内核编译最新教程+常见问题总结
【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.0
、gmodule-2.0
和libglade-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中图形化进行设置,在这里需要注意,配置选项有时分为三类,分别对应
N
、M
和Y
N
未选中,即编译时不加入,gconfig中为不选中M
编译成模块,gconfig中选中时为-
表示Y
编译入内核,gconfig中选中时为√
表示
- 配置好后点击
Save
即可保存配置,生成.config
文件 - 通常源码所带的默认配置所需编译的内核和模块很多,编译一次时间大约在 2-3小时左右(与虚拟机的配置和电脑的性能有关)
- 因此在开发中遇到需要编译内核的情况,往往对内核进行裁剪,这里我准备了一份裁剪过的内核配置(裁剪的较多,很多模块缺失,谨慎使用)
- 使用方式:
- 【建议】先使用 gconfig 生成
.config
文件,并做好备份 - 下载 .config(Google 云端硬盘) 或者.config(百度网盘 提取码 2022 )后替换原本内核中的
.config
- 执行
sudo make gconfig
检查是否替换成功,点击Save
保存
- 【建议】先使用 gconfig 生成
编译内核
- 安装
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.0
、gmodule-2.0
和 libglade-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 support下 SCSI low-level drivers 下 LSI MPT Fusion SAS 3.0 & SAS 2.0 Device Driver加入
【linux系列】内核编译最新教程+常见问题总结相关推荐
- linux内核编译最详细,Linux内核编译详细教程,linux内核编译
Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...
- linux nginx编译详解,Linux下nginx编译安装教程和编译参数详解
这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备 1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码 代码如下:# ...
- 嵌入式Linux的内核编译
实验环境 VMware Workstation Player Ubuntu16.04 kernel-3.2.tar.bz2 Linux内核编译 在ubuntu上编译嵌入式Linux内核,需要大家提前安 ...
- LINUX操作系统的内核编译内幕详解一
内核简介 内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性. Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/u ...
- linux 3 内核编译环境,Linux编译内核记
前段时间学校某课程(你猜啥课程~)要求进行简单的linux内核编译,并添加自己的系统调用,对于Linux小白来说这可不是件简单的事,的确话费不少时间和精力.趁此博客终于过了之际,来记录一下~ 0x01 ...
- linux ipv6内核编译,linux ipv6内核设置
linux ipv6内核设置,进入/proc/sys/net/ipv6: conf/all/forwarding Type: BOOLEAN 在两个接口之间进行global IPv6 forwardi ...
- Linux kernel内核编译配置选项详解
转载于:http://lamp.linux.gov.cn/Linux/kernel_options.html 作者:金步国 Code maturity level options 代码成熟度选项 Pr ...
- linux ubuntu16.04 编译opencv教程(没编过,有时间再弄,推流不用opencv也行的)
文章目录 下源码 编译 配置opencv环境 下源码 https://github.com/opencv/opencv/releases/tag/4.4.0 然后在ubuntu里建个文件夹把它扔进去, ...
- centos linux内核编译环境,CENTOS linux kernel 内核编译
题记:今天装docker,提示我最好用3.10以上的内核 一.环境 1.1 系统环境 [root@test kernels]# lsb lsblk lsb_release [root@t ...
最新文章
- 网媒亟待建立广告价值衡量体系
- ssh vim中不小心按下ctrl+s
- cmd看excel有多少个子表_快看!杭州各区5月房价表出炉!现在买套房要多少钱?...
- Elasticsearch系列「二」如何物理删除给定期限的历史数据?
- postgis启动_postgresql的安装和启动方法
- Redis之java操作篇(数据对象的存取)
- C#解决Webservice第一次访问特别慢的问题
- docker 容器内部获取自身id_crontab入门二:定时启动docker容器并启动容器内部脚本...
- QT:创建一个widget,包含源文件,头文件,以及ui文件
- python汇总json数据_python的json包位置及用法总结
- 麦克纳姆轮全向移动机器人纵向直线运动分析
- 老罗Android开发视频教程 15集
- 第一二三章 PMP第六版读书笔记
- 网易云音乐 网络错误 linux,在Linux下网易云音乐打不开的另一种解决方法
- 知识点二十五:启发式搜索算法——A*算法
- PS 批处理切图去空白
- 图模型在欺诈检测应用一点看法
- php网站403 forbidden,403 forbidden怎么解决
- android lcd工作原理,Android display架构分析(二)
- 使用a标签下载文件而不是直接打开