컴파일된 모듈 크기 차이를 설명하고 제거하는 방법

컴파일된 모듈 크기 차이를 설명하고 제거하는 방법

임베디드(ARM 기반) Linux SBC를 구입했는데 제조업체에서 Ubuntu가 사전 구축된 SD 카드를 제공했습니다.

제조업체에서 제공한 내용을 재현하기 위해 커널과 모듈을 다시 컴파일하려고 합니다. 나는 그것을 사용하고 있다커널 소스 코드그리고 /boot에서 찾은 구성이지만 해당 모듈과 내 모듈 사이에는 큰 크기 차이가 있습니다. 내 모듈 폴더는 컴파일된 147MB이고 해당 폴더의 폴더는 8.9MB입니다.

어떻게든 추가 모듈을 컴파일했을지도 모른다고 생각했지만 .ko 파일을 개별적으로 비교했는데 내 파일이 항상 훨씬 더 컸습니다.

CONFIG_MODULE_COMPRESS_*를 통해 모듈을 압축하는 것이 가능하다고 생각했지만 이것이 /boot 내부 구성에 있는 내용입니다.

CONFIG_MODULE_COMPRESS_NONE=y
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set
# CONFIG_MODULE_COMPRESS_ZSTD is not set

make modules제조업체가 런타임에 압축 설정을 무시할 수 있습니까? 크기 차이를 어떻게 설명할 수 있을까요?

FWIW 다음 명령을 사용하여 x86 Ubuntu 데스크탑에서 ARM으로 크로스 컴파일하고 있습니다.

make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION=-kstr-sama5d27 zImage
make modules -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOCALVERSION=-kstr-sama5d27
make modules_install INSTALL_MOD_PATH=./modules ARCH=arm LOCALVERSION=-kstr-sama5d27

INSTALL_MOD_STRIP=1모듈 크기를 줄이기 위해 install_modules 명령에 추가를 제안하는 가이드를 본 적이 있지만 이로 인해 오류가 발생합니다.

스트립: 입력 파일의 형식을 인식할 수 없습니다.

편집하다:다음 명령을 사용하여 .ko 파일 중 하나를 수동으로 삭제하려고 했습니다.

arm-linux-gnueabihf-objcopy -g aes-arm-bs.ko aes-arm-bs-stripped.ko

특히 이 파일은 이제 원본에 더 가까워졌습니다. 원래 19104바이트와 비교하면 18376바이트입니다.

또한 다음을 사용하여 컴파일된 모듈과 제공된 모듈을 비교했습니다 size.

  • 공급
$ size aes-arm-bs.ko
   text    data     bss     dec     hex filename
   9047    2755      20   11822    2e2e aes-arm-bs.ko
  • 나는 그것을 컴파일했다
$ size aes-arm-bs.ko
   text    data     bss     dec     hex filename
   8893    2755      20   11668    2d94 aes-arm-bs.ko

관련 정보