Linux/Kernel/编译内核模块

Linux/Kernel/编译内核模块

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


Last update: 2018-06-28 04:01:59 UTC