
操作系统 实验一 Linux 内核编译
实验一 Linux 内核编译
注意
-
使用 VMware 安装 Ubuntu,进行编译,系统映像下载地址【4.7G】(Ubuntu 官方)
-
内核数和内存可以设置稍微大一些,这个会对后面编译时间造成影响,但不建议设置过大(不建议设置和实际机子相同),会导致外部系统非常卡顿
-
存储空间设置最好 70GB+,使用内核编译出来的文件可能会 20-30GB
-
存在大量的
sudo
操作,如果觉得麻烦可以切换到root
账户-
如果是一台新的机器,可能会存在没设置
root
用户密码的情况,这个时候需要按照以下步骤进行设置;- 输入
sudo passwd root
,这时候会显示New password:
; - 输入新密码(输入不会外显),然后显示
Retype new password:
; - 然后再次输入密码,如果显示
passwd: password unchanged
代表上述步骤有问题,可以重新执行;
- 输入
-
进入
root
用户;- 可以输入
sudo su
,然后输入root
用户的密码,以root
用户登录;
- 可以输入
-
-
出现权限问题请前面加
sudo
前期准备
安装必要的依赖
1 | sudo apt-get upgrade |
可能会遇到网络问题,可以更换国内清华源(自行搜索),或者使用代理,可以查看 Linux 使用 V2ray 代理 ,可以对接 Azure 配置的 V2ray 服务器
下载并解压内核
1 | # 切换目录到 /usr/src |
编译前处理
1 | # 切换到预编译内核目录 |
配置
配置文件
使用当前系统配置(建议使用),可以切换内核后保证驱动没有问题,但是编译出来的内容可能会很大
1 | # 切换到预编译内核目录 |
使用默认配置(不推荐使用),会比较小,但可能会存在兼容性问题
1 | # 切换到预编译内核目录 |
使用当前系统配置,修改部分内容
1 | # 打开.config |
在 vim 中,使用 /debian
来搜索相关两行需要修改的内容
1 | # CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem" |
启动编译配置界面(非必需)
1 | # 启动配置界面 |

进入 General setup
-> ( ) Local version-append to kernel release
,输入新的版本号, 确认 .config
文件中 Local version
功能是否配置成功。
打开 .config
文件,搜索 CONFIG_LOCALVERSION
,发现已含有刚刚修改的版本附加信息。
1 | # 打开.config文件 |
在 vim 中,使用 /CONFIG_LOCALVERSION
来搜索刚才的配置的定位,发现已含有刚刚修改的版本附加信息。
编译安装内核(必须严格按照顺序)
1、编译内核
使用如下命令编译内核
1 | # 查看cpu数量 |
如果显示错误,请确保所有依赖完成安装,这里时间会非常很久
最后显示 Kernel: arch/x86/boot/bzImage is ready (#1)
显示编译成功
2、编译并安装内核模块
1 | #执行编译内核模块命令 |
这里时间也会很久。
3、安装内核
1 | # 将编译内核安装 |
请确保输出的结果没有 Miss
或者 Error
等问题。
添加启动项
查看 boot 目录变化
1 | # 命令执行后检索/boot目录是否包含最新内核 |
1 | # 查看lib/modules下情况 |
比如我的应该是 6.9.6.202406221707
添加启动项
1 | # 进入/boot/grub/ |
出现这个代表添加启动项成功了。
设置启动项加载时间(只需要配置一次)
1 | # 备份配置文件 |
修改其中的几个参数为下面情况:
1 | GRUB_DEFAULT=2 |
1 | # 更新grub |
重启
1 | # 重启 |
选择新内核
启动
10s 内,需要进行操作,不然会跳转到其他界面去,这个时候关机重启即可再次进入这个界面
选择 Advanced options for Ubuntu
选择对应的内核即可,选择不带(recovery mode)
查询内核版本号
1 | # 查询内核版本号 |
切换内核成功!
附录
参考链接
虚拟机 Ubuntu20.04,在 linux-5.4.1 内核下添加一个简单的系统调用并编译该内核
常用编译命令
1 | 1.清理工作目标 |
制作 generic 映像
1 | # 制作新的initrd,注意替换自己的版本号 |
- 感谢您的赞赏。
- 支付宝