修正する

修正する

Gentooがインストールされています。カーネルをコンパイルするためにUbuntu 14.04カーネル設定を使用しました。

モジュールライブラリのサイズがなぜそんなに違うのか理解するのは難しいです。

Ubuntuでは

oz123@ubuntu $ du -sh /lib/modules/4.2.0-36-generic/
202M    /lib/modules/4.2.0-36-generic/

Gentooから

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

これは私が確認したいくつかのモジュールと一致します。

その場合、Gentooでコンパイルされたモジュールはほぼ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でEmergeを使用して同じバージョンをコンパイルしました。

Ubuntuでは:

$ ls -l /usr/bin/figlet-figlet 
-rwxr-xr-x 1 root root 43504 Nov 26  2012 /usr/bin/figlet-figlet

Gentooから:

# ls -l /usr/bin/figlet
-rwxr-xr-x 1 root root 47384 Jun  8 16:40 /usr/bin/figlet

Gentooでのコンパイルフラグは次のとおりです。

-O2 -pipe -march=haswell

-O1Figletを使用してビルドすると、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

Gentooモジュールを自分で作成したので、デバッグ情報を削除するのを忘れた可能性があります。努力する

strip --strip-unneeded snd-ua101.ko

影響があることを確認してください。

次にシステムのモジュールを再構築するときは、次のコマンドを使用してすべてのモジュールを削除します。

make INSTALL_MOD_STRIP=1 modules_install

関連情報