记🐒也能学会的补丁内核

Debian 打补丁记录

Debian 下有个非常优秀的 Xanmod 内核,提供了诸如 Optimizing TCP for high WAN throughput while preserving low latency 此文提到的补丁 和 BBR3 补丁;但是也累带了很多对服务器运行没有太多帮助的补丁,比如 steam deask 补丁之类的,会降低服务器运行的稳定性。

可喜可贺的是,Xanmod 把每一个补丁都分享了出来,所以我们可以只打上自己需要的补丁去编译内核。

配置环境

# 安装工具链
apt-get install dpkg-dev build-essential devscripts
apt-get build-dep linux

# 准备内核源码
apt-get source linux=6.18.5-1

# 准备补丁
git clone https://gitlab.com/xanmod/linux-patches

补丁内核

# 进入内核目录
cd linux-6.18.5-1

# 打上补丁
patch -p1 < ../linux-patches/.../.../xxx.patch

# 复制内核配置
cp /boot/config-xxx .config

编译内核

make -j$(nproc) LOCALVERSION="" bindeb-pkg

需要注意的是,若 patch 加入了 /boot/config-xxx 里面没有覆盖的参数时,编译的时候会要求指定选项(m 是以模块编入,y 是直接编入内核,n 是不编译)

使用 llvm 编译

警告:llvm 编译出来的内核会有概率无法启动,请做好自救处理

使用 llvm 编译出来的内核相比于 gcc 编译出的内核会占用更小的一点内存,同时还可以开启一些 llvm 才提供的新特性(虽然大部分都用不到)

# 安装 llvm 工具链
apt install clang lld llvm

# 使用 llvm 编译内核
make LLVM=1 -j$(nproc) bindeb-pkg

跨平台编译 arm 内核

# 准备环境(前面是 64 位,后面是 32 位)
apt-get install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf

dpkg --add-architecture arm64 && apt-get install libssl-dev:arm64

# 拷贝 arm 服务器上的 .confg
cp ~/oracle.confg .config

# 编译内核
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) bindeb-pkg

一些辅助参数

# ccache 开启,可以减少缓存编译结果,提高下一次的编译速度
apt install ccache
mkae CC="ccache clang" -j$(nproc) bindeb-pkg

# 自定义内核名称(必须全小写字母)
LOCALVERSION="-name"
mkae LOCALVERSION="-name" -j$(nproc) bindeb-pkg

# 指定内核压缩方式
mkae KDEB_COMPRESS=zstd -j$(nproc) bindeb-pkg
···

PS: 推荐使用 Debian Cloud 内核 config 参数进行编译