임베디드(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