Compile kernel
编译内核以及内核模块
1. Download
用 uname -a 查看当前内核版本。
然后从 https://www.kernel.org/pub/linux/kernel/ 下载对应版本的内核源代码。
例如:
# uname -a
Linux SERVER 4.15.13-x86_64-linode106 #1 SMP Tue Mar 27 14:42:14 UTC 2018 x86_64 GNU/Linux
#则对应的 4.15.13 版本内核源代码地址:
#https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.15.13.tar.gz
将源代码解压到某个目录。然后进入 kernel 源代码根目录
2. Config
提取当前系统 Kernel 配置
zcat /proc/config.gz > .config
make oldconfig
根据需要修改内核源代码或配置。
3. Compile
make -j4
make modules
Add a module to kernel
在内核中增加一个新的模块并编译。以增加一个魔改版的 BBR "tcp_nanqinlang.c" 模块为例
源代码放在 net/ipv4/tcp_nanqinlang.c
修改 net/ipv4/Makefile, 增加一行:
obj-$(CONFIG_TCP_CONG_NANQINLANG) += tcp_nanqinlang.o
修改 net/ipv4/Kconfig,增加下面代码块:
config TCP_CONG_NANQINLANG
tristate "BBR mod TCP"
default m
修改 .config,加入下面一行:
CONFIG_TCP_CONG_NANQINLANG=m
最后重新载入配置并编译即可。指定增加的内核模块路径可以加快速度(只编译该目录下的模块):
make oldconfig
make -j4
make modules SUBDIRS=net/ipv4
载入内核:
insmod kernel/net/ipv4/tcp_nanqinlang.ko
如果报错,尝试加入 -f 参数(如果要写入启动脚本,一定要在之前先测试一次加了 -f 参数后能否正常加载,因为 -f 强制加载可能造成内核崩溃)
启用魔改版 bbr:
sysctl net.ipv4.tcp_congestion_control=nanqinlang