젠투가 설치되어 있습니다. 커널을 컴파일하기 위해 Ubuntu 14.04 커널 구성을 사용했습니다.
모듈 라이브러리의 크기가 왜 그렇게 다른지 이해하기 어렵습니다.
우분투에서는
oz123@ubuntu $ du -sh /lib/modules/4.2.0-36-generic/
202M /lib/modules/4.2.0-36-generic/
젠투에서
oz123@gentoo ~ # du -sh /lib/modules/4.2.8-gentoo-1/
1.8G /lib/modules/4.2.8-gentoo-1/
일부 컴파일 타임 옵션 때문인가요? 여기서 뭔가 빠졌나요?
고쳐 쓰다
내가 해냈어
DIR1=/lib/modules/4.2.0-36-generic/
DIR2=/mnt/gentoo/lib/modules/4.2.8-gentoo-1/
diff -r $DIR1 $DIR2 | grep $DIR2
이는 두 라이브러리의 모듈이 바이너리가 다르다는 것을 나타냅니다. 예를 들면 다음과 같습니다.
Binary files /lib/modules/4.2.0-36-generic/kernel/sound/pci/ac97/snd-ac97-codec.ko and /mnt/gentoo/lib/modules/4.2.8-gentoo-1/kernel/sound/pci/ac97/snd-ac97-codec.ko differ
미스터리가 더욱 명확해지기 시작합니다.
$ du -sh /lib/modules/4.2.0-36-generic/kernel/sound/usb/misc/snd-ua101.ko
36K /lib/modules/4.2.0-36-generic/kernel/sound/usb/misc/snd-ua101.ko
$ du -sh /mnt/gentoo/lib/modules/4.2.8-gentoo-1/kernel/sound/usb/misc/snd-ua101.ko
368K /mnt/gentoo/lib/modules/4.2.8-gentoo-1/kernel/sound/usb/misc/snd-ua101.ko
이는 내가 확인한 여러 모듈과 일치합니다.
그렇다면 젠투에서 컴파일된 모듈은 거의 10배 더 큽니다. 이유는 무엇입니까? ? ?
아...답은 옷을 벗는거...
laptop-oz ~ # du -sh /lib/modules/4.2.8-gentoo-1/kernel/sound/usb/snd-usbmidi-lib.ko
368K /lib/modules/4.2.8-gentoo-1/kernel/sound/usb/snd-usbmidi-lib.ko
laptop-oz ~ # strip --strip-unneeded /lib/modules/4.2.8-gentoo-1/kernel/sound/usb/snd-usbmidi-lib.ko
laptop-oz ~ # du -sh /lib/modules/4.2.8-gentoo-1/kernel/sound/usb/snd-usbmidi-lib.ko
44K /lib/modules/4.2.8-gentoo-1/kernel/sound/usb/snd-usbmidi-lib.ko
업데이트 2
스트리핑만이 전부가 아닙니다. 컴파일 플래그도 있는 것 같습니다. 이를 확인하기 위해 Ubuntu에 Figlet(버전 2.2.5)을 설치하고 gentoo에서 이머지를 사용하여 동일한 버전을 컴파일했습니다.
우분투에서는:
$ ls -l /usr/bin/figlet-figlet
-rwxr-xr-x 1 root root 43504 Nov 26 2012 /usr/bin/figlet-figlet
젠투에서:
# ls -l /usr/bin/figlet
-rwxr-xr-x 1 root root 47384 Jun 8 16:40 /usr/bin/figlet
젠투에서의 컴파일 플래그는 다음과 같습니다:
-O2 -pipe -march=haswell
-O1
Figlet을 사용하여 빌드하면 Ubuntu와 더 유사한 결과를 얻는 것 같습니다 .
# ls -l /usr/bin/figlet
-rwxr-xr-x 1 root root 43288 Jun 8 17:10 /usr/bin/figlet
약간의 차이는 실제로 gcc 버전(Ubuntu 4.8.4, Gentoo 4.9.3) 때문일 수 있습니다.
답변1
젠투 모듈을 직접 만들었기 때문에 디버깅 정보를 제거하는 것을 잊었을 가능성이 큽니다. 노력하다
strip --strip-unneeded snd-ua101.ko
영향이 있는지 확인하십시오.
다음에 시스템의 모듈을 다시 빌드할 때 다음 명령을 사용하여 모든 모듈을 제거하십시오.
make INSTALL_MOD_STRIP=1 modules_install