Kernel编译和替换(Ubuntu)

注意
本文最后更新于 2024-01-20,文中内容可能已过时。

原文链接:https://ovea-y.cn/kernel_compilation_and_replacement_ubuntu/

Flowchart

下载源代码

apt install linux-source

位置在/usr/src中

也可以直接去kernel.org下载最新的源码

解压后别忘记拷贝依赖。

Bash

cd /usr/src/linux-source-5.19.0/
tar -xvf linux-source-5.19.0.tar.bz2
cp -r debian linux-source-5.19.0/
cp -r debian.master/ linux-source-5.19.0/

安装依赖

C++

apt install build-essential 
apt install gcc 
apt install make 
apt install openssl 
apt install pkg-config 
apt install libssl-dev 
apt install libncurses5-dev 
apt install libc6-dev 
apt install libelf-dev
apt install bison
apt install flex
apt install llvm
apt install clang
apt install lldb

配置构建配置

  1. 进入源码路径

cd /usr/src/linux-xxxx

  1. 拷贝当前kernel的配置信息

cp /boot/config-xxxxx .config

为了提供一个和当前Kernel相同的配置清单

  1. 选择其他功能

此处可以选择开启或关闭Kernel功能

make menuconfig–>load–>save

内核编译

C++

make -j8

编译模块

C++

make modules -j8

安装模块

C++

make INSTALL_MOD_STRIP=1 modules_install -j8

这里的INSTALL_MOD_STRIP=1一定要加上,否则会有initrd.img-xxx文件太大的问题,导致开机一直卡在加载映像到磁盘,无法开机。

安装内核

C++

make install

检查以下/boot/initrd.img-xxx大小是否太大,正常一般不超过100M,如果太大就执行[安装模块]的命令,然后在执行:

C++

mkinitramfs /lib/modules/6.19.xxxx/ -o /boot/initrd.img-6.19xxx

更新grub引导

C++

update-grub2

注意这里grub会默认选择最新版本的内核,如果更新内核后需要切换到旧版本的内核,需要在启动的过程中选择ubuntu高级选项里边选择之前的版本,如果开机不显示ubuntu高级选项,可以修改/etc/default/grub文件:

C++

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'
 
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu // 修改为menu
GRUB_TIMEOUT=5  // 修改超时时间为5秒

......

检测是否成功

重启电脑,然后用uname -a检测是否替换成功

比如原来的特征是

Linux ovea1 5.19.0-26-generic #27-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 23 20:49:05 UTC 2022 aarch64 aarch64 aarch64 GNU/Linux

替换后变成了

Linux ovea 5.19.7 #1 SMP PREEMPT_DYNAMIC Sun Jan 1 15:30:43 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

清理构建的产物

make clean

参考

https://blog.csdn.net/mabin2005/article/details/123350651

原文链接:https://ovea-y.cn/kernel_compilation_and_replacement_ubuntu/

相关内容