写在前面
最近一直想找一些linux内核调试教程,在网上找了一下,有基于qemu的,但是需要自己制作文件系统,而且用的是busybox,很不方便;然后有看到基于vmware的,但是这些教程又有些晦涩难懂,耽误了很多时间,因此在这里总结一下,最起码在我自己的机器上是跑起来了,希望对大家有所帮助。部分操作采纳以下两位大佬的主页:
如何修改Linux源码并重新编译? - 知乎 (zhihu.com)
(9条消息) 001 如何获取、编译、安装Linux内核源代码_tiandh987的博客-CSDN博客
一、 设备信息
Vmware版本:16.0
linux操作系统版本:ubuntu20.04
想要安装的内核版本:linux-5.15.69
二、操作步骤
-
下载想要的linux源码,解压后进入内核文件目录
(1)下载地址:
https://mirrors.edge.kernel.org/pub/linux/kernel/ -
安装依赖文件
由于我是在全新的系统上配置的内核,有很多依赖文件我没有安装,在配置过程中发现如下依赖是需要自己安装的:
sudo apt-get install libncurses5-dev libelf-dev openssl libssl-dev flex bison dwarves zstd -
保持源码干净
make mrproper(此操作会将历史编译过程中配置的内核功能配置文件清除掉,只有第一次执行内核编译前才进行此操作)
make clean((仅删除编译过程产生的中间文件和目标文件,而不会删除历史配置)) -
指定硬件体系结构
export ARCH=x86 -
配置内核
这里我想说一下,按照网络上一些博主的说法,需要自己配置内核,即执行make menuconfig,然后保存默认配置直接退出,但是我这么操作后发现编译完内核后我无法进入桌面系统,只能进去busybox里进行操作,很不方便,因此在这里我直接采用vmware上运行的内核的配置文件,运行以下代码:
(1)cp /boot/config-(你已有的配置文件版本,通常情况下按一下tab就会自动补全) ./config
(2)执行 make menuconfig,然后直接退出就好 -
编译内核
scripts/config --set-str SYSTEM_TRUSTED_KEYS ‘’
scripts/config --set-str SYSTEM_REVOCATION_KEYS ‘’
sudo make CC=‘ccache gcc’ -j8(8指的是用8个核来跑,快一点,我自己测编译大概需要半个小时) -
安装内核
sudo make INSTALL_MOD_STRIP=1 modules_install -j8(安装内核模块,INSTALL_MOD_STRIP=1保证生成的initrd.img较小)
sudo make install -j8(安装整个内核)
依次执行上述两个命令 -
修改默认启动菜单的配置文件
sudo vim /etc/default/grub
(1)注释 GRUP_TIMEOUT_STYLE=hidden 列。
(2)修改 GRUB_TIMEOUT 的值为10 。(可修改为其它数值)
(3)GTUB_DEFAULT=0,表示从第一个内核启动。 -
更新启动项列表
sudo update-grub2
-
保存系统,重新启动,可看到菜单项,选择advance,进入刚刚编译好的内核就好
-
执行uname -r,即可显示最新版本:
写在最后
作为非计算机专业出身的人,这是我能够给大家提供的一种比较简略的解决方案,其中若干原理我也还没有搞懂,期望能给大家带来一点便利