在 Ubuntu 22.04.3 上构建自定义内核

注意
本文最后更新于 2023-10-23,文中内容可能已过时。

本次内核在 Ubuntu 22.04.3 虚拟机上构建。建议分配尽可能多的内存和处理器,以及容量至少为 60GB 的磁盘。

查看内核版本:

1
uname -r

https://f005.backblazeb2.com/file/img-buckets-oqh/2023/10/image-20231023124801203.png

克隆 6.2 版本的 Linux 内核源代码:

1
git clone --depth 1 -b v6.2 --single-branch https://github.com/torvalds/linux.git

安装依赖项:

1
sudo apt install fakeroot build-essential libncurses-dev xz-utils libssl-dev flex libelf-dev bison

进入源码目录,复制系统当前的内核配置文件:

1
2
cd linux
cp /boot/config-$(uname -r) .config

可使用make menuconfig编辑配置文件,无特殊需求则不必作改动。

关闭启用模块签名,以便进行编译:

1
2
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS

配置 LOCALVERSION 变量,为自定义内核添加一个标签:

1
scripts/config --file .config --set-str LOCALVERSION "-cuefe"

这样,最后的内核版本将会是 6.2.0-cuefe。

开始编译:

1
sudo make -j$(nproc)

-j 参数指定可以并行执行的任务数量,$(nproc) 返回处理器核心数,使用 -j 参数可以加快编译速度。

安装必要的内核模块:

1
sudo make modules_install -j$(nproc)

安装内核:

1
sudo make install

修改 grub 启动项:

1
sudo vim /etc/default/grub
1
2
3
GRUB_DEFAULT=0
# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=50

更新 grub:

1
sudo update-grub

重启:

1
reboot

选择新构建的内核:

https://f005.backblazeb2.com/file/img-buckets-oqh/2023/10/image-20231023175514412.png

查看内核版本:

1
uname -r

https://f005.backblazeb2.com/file/img-buckets-oqh/2023/10/image-20231023180216598.png

成功构建内核并运行。

init/main.cstart_kernel() 函数中,找到 arch_call_rest_init(); ,在其上添加:

1
printk(KERN_INFO "My custom log message\n");

printk() 是 Linux 内核中用于打印日志信息的函数。

重新构建内核:

1
2
3
4
sudo make -j$(nproc)
sudo make modules_install -j$(nproc)
sudo make install
reboot

选择新构建的内核:

https://f005.backblazeb2.com/file/img-buckets-oqh/2023/10/image-20231023224151909.png

dmesg 是一个用于查看内核日志信息的命令,可以用来验证上述内核源码修改成功:

1
sudo dmesg | grep "My custom log message"

https://f005.backblazeb2.com/file/img-buckets-oqh/2023/10/image-20231023221532278.png