手动编译并升级 linux 内核

Posted by     "Luffyao" on Thursday, August 29, 2024

下载源码

官方网站选择合适版本下载源码 kernel org

并解压

tar -xvf linux-6.10.6.tar.xz
cd linux-6.10.6

安装依赖包

sudo apt-get update
sudo apt-get install build-essential libncurses-dev bison flex libssl-dev libelf-dev

配置内核参数

使用当前系统的默认配置参数:

cp /boot/config-$(uname -r) .config
make oldconfig

交互式配置参数:

make menuconfig

关闭模块签名选项

NOTE: 需要关闭,否则编译内核的时候报错,找不到证书。(可以选择生成证书,或 disable,这里使用第二种方式。但是在后面安装内核的时候,HP Zhan66 有 BIOS 安全保护,可以进入 BIOS 关闭该功能即可。)

./scripts/config --file .config --set-str SYSTEM_TRUSTED_KEYS ''
./scripts/config --file .config --set-str SYSTEM_REVOCATION_KEYS ''

编译内核

在开始构建之前,让我们为自定义内核构建添加一个标签。我将使用字符串 -luffyao 作为标签,并利用 LOCALVERSION 变量来实施。这是个可选操作。LOCALVERSION 选项可用于设置一个“本地”版本,它会被附加到通常的 x.y.z 版本方案之后,并在你运行 uname -r 命令时一并显示。

./scripts/config --file .config --set-str LOCALVERSION "-luffyao"

编译

make -j$(nproc) 2>&1 | tee log

NOTE: 2>&1 会将 STDOUT 和 STDIN 重定向到相同的文件描述符,并通过管道传输给 tee 命令,这会将输出存储在一个名为 log 的文件,并且在控制台打印出完全相同的文本。

安装内核模块

sudo make modules_install -j$(nproc)

安装内核

sudo make install

重启并验证

$ sudo reboot

$ uname -a
Linux luffyao-hp 6.10.6-luffyao #1 SMP PREEMPT_DYNAMIC Thu Aug 29 05:52:36 CST 2024 x86_64 x86_64 x86_64 GNU/Linu

清除构建文件

make clean
make mrproper

卸载

### 删除内核模块
$ rm -rf /lib/modules/<kernel_release>-<localversion>
### 删除设备树二进制文件
$ rm -rf /boot/dtb-<kernel_release>-<localversion>
### 删除 Linux 内核本身
$ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion>
### update grub
sudo update-grub

参考

Linux 内核动手编译实用指南

ChatGPT