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. 이는 모듈이 아닌 커널의 일부로만 구축될 수 있음을 의미합니다.

변경 사항을 적용하려면 전체 커널을 다시 빌드해야 합니다. 디스크 공간이 부족하므로 커널을 빌드하고 설치한 다음 빌드 트리를 정리하고 모듈을 빌드한 다음 설치하면 디스크 공간이 덜 필요합니다.

관련 정보