Linux Fedora 32 编译内核详细步骤(避坑指南)
Linux Fedora 32 编译内核详细步骤(避坑指南)VirtualBox安装Linux安装编译内核一、安装一些必要的软件包二、下载内核源代码三、配置四、执行编译五、安装模块与内核 本人TaoistBoy,小白一枚。最近在进行 Linux 内核编译时遇到了许多问题,拜读了前辈相关博客的文章,决定记录一下内核编译的步骤以及一些需要格外注意的地方,希望对有需要的
Linux Fedora 32 编译内核详细步骤(避坑指南)
本人TaoistBoy,小白一枚。最近在进行 Linux 内核编译时遇到了许多问题,拜读了前辈相关博客的文章,决定记录一下内核编译的步骤以及一些需要格外注意的地方,希望对有需要的人提供一些参考,文中不够准确的地方请大家多多批评。
VirtualBox安装
VirtualBox是免费的虚拟机平台,可以搭载操作系统。可以直接到VirtualBox官网下载你需要的版本。安装过程非常简单,中间只需要选定一个安装目录即可,其他直接next,安装完成
Linux安装
我选择的是Fedora 32发行版(Fedora-Workstation-Live-x86_64-32-1.6),可以到 linix kernel 官网 下载所需iso镜像
- 打开VirtualBox,新建虚拟机,名称自定义,类型选择 Linux,版本选择 Fedora(64bit)(按自己需要选择)
- 配置内存大小,默认就好,基本够用
- 创建虚拟硬盘,选择现在创建虚拟硬盘,点击创建
- 选择VDI,点击下一步
- 选择动态分配,点击下一步
- 设置文件位置和大小
大小不要默认8GB,在后面编译内核时根本不够用,我就是初始选太小导致在后面不得不进行磁盘扩展操作。建议最小设50GB,并且手动更改 Fedora-root 挂载点下的磁盘空间为40GB以上
位置要设置在非系统盘,建议新建自己的文件夹,把文件都放里面,完成后点击创建 - 添加虚拟光盘
假设你新建的虚拟机叫fedora,右键点击fedora->设置->存储->没有盘片,点击最右边的光盘标志,选择一个虚拟光盘,即你的操作系统镜像(.iso)文件(我的是Fedora-Workstation-Live-x86_64-32-1.6),完成后右键fedora->启动 - 打开 Fedora
在setting中设置语言为‘简体中文’,设置 root 用户和密码,可以添加用户及密码
之后设置安装到硬盘,一路向下,完成 Linux 安装 - 分离镜像
最后一定要分离镜像(.iso)文件,不然你每次打开 Fedora 都提示你进行安装(即使你已经安装过了……)
分离可以右键点击 Fedora->设置->存储->没有盘片,点击最右边的光盘标志,删除你的操作系统镜像(.iso)文件即可
编译内核
编译内核很耗时间,新手可能要编译好几次才能得到满意的内核,提前注意一些坑可以提高效率。由于我选择的是 Linux Fedora 32 发行版,下面的一些指令针对于 Fedora 版本,对于 Linux 其他版本如 Ubuntu ,指令要做调整
一、安装一些必要的软件包
启动虚拟机Fedora,打开终端,输入su root 与自己设置的密码,取得root权限:
[TaoistBoy@localhost ~]$ su root
密码:
在实验前需要安装一些必要的软件包,包括gcc make 和 执行make menuconfig 所需的工具:
$ yum install gcc
$ yum install gcc-c++
$ yum -y install ncurses
$ yum install ncurses-devel //安装图形依赖包
至此,你可以进行下一步了。但是我在后面遇到许多errors,都是因为库文件缺失,下面的是我解决各种错误时增加的库,可以安装一下规避后续风险:
$ yum install *curses* -y
$ yum install elfutils-libelf-devel
$ yum install openssl-devel //error:scripts/sign.file.c:25:10:致命错误:openssl/opensslv.h
$ yum install dwarves //error:BTF:.tmp_vmlinux.btf:pahole(pahole) is not available
二、下载内核源代码
所有版本的内核源代码都能在官方网站里下载得到,我选择的内核版本是 linux-5.7.2.tar.xz
进入虚拟机cd /usr/src目录,进行内核下载与解压(也可以用Firefox下载)
//进入相应目录
$ cd /usr/src
//下载linux-5.7.2.tar.xz
$ wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.7.2.tar.xz
//解压linux-5.7.2.tar.xz
$ tar xvf linux-5.7.2.tar.xz -C /usr/src
//转到内核解压目录下
$ cd /usr/src/linux-5.7.2
三、配置
1. 如果以前编译过,那么用make mrproper删除以前垃圾文件
2. 用make menuconfig启动配置的图形界面。因为配置选项很多,短时间根本搞不懂哪些选项是必须的,哪些是可以不要的,所以,最佳的办法是在一个已经存在的配置文件上面修改
3. 很显然,Fedora 就有现成的一个。把 /boot目录里面 config-4.6.3-fc32.x86_64(不一定是这个名称,要进入 /boot 目录用 ls -l 命令找自己的版本名称)复制到/usr/src/linux-5.7.2里面并命名为.config。当执行make menuconfig时,首先寻找.config,如果找到就读取。否则进入arch目录里面寻找相应体系结构默认的配置文件
$ make mrproper
$ cp /boot/config-4.6.3-fc32.x86_64 /usr/src/linux-5.7.2/.config
//从 /boot 目录回到 linux-5.7.2 解压目录
$ cd /usr/src/linux-5.7.2
$ make menuconfig
4. 配置成功出现下面界面,直接 [ESC] 退出即可:
四、执行编译
这是个漫长的过程,我的 4 核 CPU 跑了3个多小时(……),中途缺少库文件就会导致失败,我编译了两次才完成
这一步执行 make all , 就相当于:make dep(建立相依的属性关系),make clean(将旧的资料去除掉),make bzImage(开始编译核心),make modules(开始编译模块)
$ make all
可以用 df -h 命令查看挂载点空间,及时扩展 live-root 空间,防止空间不足导致编译失败。我在编译成功后用了28G空间:
$ df -h
五、安装模块与内核
披荆斩棘,终于到了最后一步。分别安装模块与内核,最后重启 Fedora
$ make modules_install //安装模块
$ make install //安装内核
$ reboot //重启
重启 Fedora后,可以使用 uname -srm 命令查看当前内核版本
$ uname -srm
输出 Linux 5.7.2 x86_32 , 恭喜你,安装成功!
更多推荐
所有评论(0)