实验三 Linux内核编译
原来的系统是Ubuntu22.04,内核5.15.0-122-generic,编译的新内核是5.15.5。
共分为四部分:编译前准备->编译新内核->运行新内核
编译报错可以看我的文章,连接如下:
基于Ubuntu的Linux内核编译报错及解决办法
3.1 编译前准备
- 首先安装编译内核之间所需要的依赖,命令如下:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison dwarves
如图所示:
下载一份内核源代码,例如linux-5.15.5.tar.xz,在Electerm控制台中使用如下命令下载这份内核源码:
wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.15.5.tar.xz,下载好了之后,使用如下命令解压下载好的内核:
tar xavf linux-5.15.5.tar.xz,解压完成之后,如图所示:
- 运行下述命令进入下载好并解压好的内核里面:
cd linux-5.15.5/
3.2 编译新内核
- 配置内核:
使用系统环境的配置作为预编译内核的配置,在进入了内核目录之后,使用命令如下:
cp /boot/config-$(uname -r) .config
make menuconfig
进入图形化配置界面,使用刚刚生成的config,如图所示:
按照如下步骤进行操作:
-
Load -> OK 加载配置
-
Save -> OK -> Exit 保存配置
-
Exit 退出完成配置
- 编译生成新内核(操作都是在内核目录下进行的):
完成配置操作之后,禁用部分可能会影响编译的选项,使用命令如下:
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS
开始使用make指令进行编译,执行完如图所示:
执行sudo make modules_install安装模块,执行完如图
执行sudo make install安装内核,执行完如图
创建一个新的 initramfs,并将其指定版本号为 5.15.5,即新编译的内核的版本号。initramfs 是一种用来启动内核的根文件系统 (The basic initramfs is the root filesystem image used for booting the kernel provided as a compressed cpio archive.)。
执行如下命令:sudo update-initramfs -c -k 5.15.5,执行完如图
更新引导程序 grub,命令:sudo update-grub,如图
然后重启,指令:shutdown -r now
重启之后,使用uname -r指令查看新编译的内核版本,出现5.15.5即编译内核成功,如图所示
3.3 实验总结
在本次Linux内核编译实验中,我深入了解了内核的构建过程和配置选项。首先,我获取了最新的内核源代码,并安装了必要的编译工具和依赖库。通过执行 make menuconfig
,我学习了如何根据硬件需求和功能需求自定义内核配置,选择了适合我系统的驱动和模块。
编译过程使用 make
命令,虽然耗时较长,但我观察到了编译过程中的各个阶段,了解了如何生成内核映像和模块。完成编译后,我使用 make install
安装了新内核,并更新了引导加载器配置。
重启系统后,我成功进入了新编译的内核,验证了配置的正确性。这次实验让我认识到内核编译的复杂性与灵活性,增强了我对Linux系统底层的理解。未来,我希望能在内核开发和优化方面进行更深入的探索,以提升系统性能和稳定性。