Linux

如何只編譯 Linux Kernel 的 net/ipv4?

  • June 28, 2020

最初,我的方法是從頭開始重新編譯整個核心,但當我發現它需要大量磁碟空間時,所有的希望都落空了。

現在,我試圖弄清楚如何只編譯它的一部分。

我修改的文件是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 (LINK)上找到的答案描述了它無法完成,並且只能編譯整個核心。

“這做不到。只需編譯整個核心。第一次編譯後,make 將確保只重新編譯更改的文件,這樣以後的建構會很快。”

我曾考慮使用 Google Drive 作為 HDD 進行完整編譯,但看起來也缺乏這樣做的選項。

我的最後一個選擇是調整整個伺服器的大小。

編輯:

我通過 CD 進入 /net/ipv4 目錄並嘗試了

製作 -C /lib/modules/ $ (uname -r)/build M= $ (密碼)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'

如果您查看net/ipv4/Makefile,您會看到它tcp_ipv4.o是 的一部分obj-y,這意味著它只能作為核心的一部分建構,而不能作為模組建構。

如果您希望將您的更改考慮在內,則必須重建完整的核心。由於磁碟空間不足,您只能建構核心,安裝它,然後清理建構樹並建構模組,然後安裝它們;這將需要更少的磁碟空間。

引用自:https://unix.stackexchange.com/questions/595477