最初,我的方法是从头开始重新编译整个内核,但当我发现它需要大量磁盘空间时,所有希望都破灭了。
现在,我正在尝试弄清楚如何仅编译其中的一部分。
我修改的文件是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
,这意味着它只能构建为内核的一部分,不能构建为模块。
如果您希望您的更改被考虑在内,则必须重建完整的内核。由于磁盘空间不足,您可以仅构建内核,安装它,然后清理构建树并构建模块,然后安装它们;这将需要更少的磁盘空间。