如何只编译Linux内核的net/ipv4?

如何只编译Linux内核的net/ipv4?

最初,我的方法是从头开始重新编译整个内核,但当我发现它需要大量磁盘空间时,所有希望都破灭了。

现在,我正在尝试弄清楚如何仅编译其中的一部分。

我修改的文件是net/ipv4/tcp_ipv4.c

然后我按照以下步骤操作,但在中间丢失了,

Downloaded kernel source files to /home/linux
ran cp /boot/config-$(uname -r) .config
make oldconfig
make scripts prepare modules_prepare
apt-get install linux-headers-$(uname -r)
make -C . M=net/ipv4
make net/ipv4/tcp_ipv4.c

我不知道下一步该做什么,因为在 Stackoverflow 上找到的答案正在描述如何构建定制模块。

在 Stackoverflow 上找到的答案(关联)描述说这是不可能的,只能编译整个内核。

“这是不可能的。只需编译整个内核即可。第一次编译后,make 将确保仅重新编译更改的文件,因此将来的构建会很快。”

我曾考虑过使用 Google Drive 作为完整编译的 HDD,但看起来也缺乏这样做的选项。

我的最后一个选择是调整整个服务器的大小。

编辑:

我通过 CD 进入 /net/ipv4 目录并尝试

make -C /lib/modules/$(uname -r)/build M=$(pwd)modules_install

它输出

  Building modules, stage 2.
  MODPOST 61 modules
FATAL: parse error in symbol dump file
make[1]: *** [scripts/Makefile.modpost:94: __modpost] Error 1
make: *** [Makefile:1632: modules] Error 2
make: Leaving directory '/usr/src/linux-headers-5.4.0-26-generic'

答案1

如果你看net/ipv4/Makefile,你会看到它tcp_ipv4.o是 的一部分obj-y,这意味着它只能构建为内核的一部分,不能构建为模块。

如果您希望您的更改被考虑在内,则必须重建完整的内核。由于磁盘空间不足,您可以仅构建内核,安装它,然后清理构建树并构建模块,然后安装它们;这将需要更少的磁盘空间。

相关内容