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ドライブを完全にコンパイルされたHDDとして使用することを検討しましたが、そうすることができるオプションも不足しているようです。

最後のオプションは、サーバー全体のサイズを変更することでした。

編集する:

/net/ipv4ディレクトリにCDを挿入しようとしました。

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/Makefiletcp_ipv4.o、の一部であることがわかりますobj-y。これは、モジュールではなくカーネルの一部としてのみ構築できることを意味します。

変更を適用するには、カーネル全体を再構築する必要があります。ディスク容量が不足しているため、カーネルをビルドしてインストールし、ビルドツリーをクリーンアップし、モジュールをビルドしてインストールすると、ディスク容量が少なくなります。

おすすめ記事