Warum ist INSTALL_MOD_STRIP nicht standardmäßig aktiviert?

3

Ich habe seit ein paar Jahren keinen Linux-Kernel mehr kompiliert und nun, da ich wieder damit angefangen habe, habe ich festgestellt, dass Module standardmäßig mit Debug-Symbolen installiert werden, sofern dies nicht der Fall ist INSTALL_MOD_STRIP=1 wird übergeben an make modules_installDas macht sie so riesig, dass meine initrd-Images auf Hunderte von Megabyte angewachsen sind.

Ich habe nur die gefunden INSTALL_MOD_STRIP Option nach einigem googeln, und selbst dann nur in Forum-Threads wo Leute fragen, warum ihre Module so groß sind.

Ich frage mich also, warum sich dies geändert hat, während ich vorkompilierte Kernel verwendet habe. Gibt es einen Grund, warum Module jetzt standardmäßig mit Debugsymbolen installiert werden (obwohl Binärdistributionen sie immer noch entfernen)? Die Verwendung von Debug-Symbolen im Kernel erscheint ziemlich esoterisch und hat offensichtlich sehr große Nachteile in Bezug auf die installierte Größe.

Grundsätzlich sollte ich nur überlegen INSTALL_MOD_STRIP als Teil der Standard-Kernel-Kompilierungsformel? Gibt es weitere Änderungen am Erstellungsprozess ab ca. 2.6.25, die ich beachten sollte?

Dolda2000
quelle
Das ist eine ziemlich weit gefasste Frage. Kurz gesagt, wenn Sie einen Kernel-Build von Hand erstellen, sind Sie entweder ein Modul- / Kernel-Entwickler oder Sie wissen, was Sie tun. Die Dokumentation / kbuild / *. Txt sollte Sie über den tatsächlichen Erstellungsprozess auf dem Laufenden halten
hroptatyr

Antworten:

2

Ich poste nur die Protokollnachricht des entsprechenden Patches, um Ihre Frage zu beantworten, wer / warum es geändert wurde:

commit 2ea038917bbdd51a7ae4a898c6a04641324dd033
Author: Sam Ravnborg <[email protected]>
Date:   Wed Jan 14 21:38:20 2009 +0100

Revert "kbuild: strip generated symbols from *.ko"

This reverts commit ad7a953c522ceb496611d127e51e278bfe0ff483.

And commit: ("allow stripping of generated symbols under CONFIG_KALLSYMS_ALL")
            9bb482476c6c9d1ae033306440c51ceac93ea80c

These stripping patches has caused a set of issues:

1) People have reported compatibility issues with binutils due to
   lack of support for `--strip-unneeded-symbols' with objcopy 2.15.92.0.2
   Reported by: Wenji
2) ccache and distcc no longer works as expeced
   Reported by: Ted, Roland, + others
3) The installed modules increased a lot in size
   Reported by: Ted, Davej + others

Reported-by: Wenji Huang <[email protected]>
Reported-by: "Theodore Ts'o" <[email protected]>
Reported-by: Dave Jones <[email protected]>
Reported-by: Roland McGrath <[email protected]>
Signed-off-by: Sam Ravnborg <[email protected]>
hroptatyr
quelle
Vielen Dank für die Idee, den Verlauf der Änderungen zu verfolgen. Ich werde das tun, aber bisher scheint es meine grundlegende Frage nicht zu beantworten; Das ist der Grund, warum Debugsymbole standardmäßig eingeschlossen werden und warum das Entfernen installierter Module nicht das Standardverhalten ist.
Dolda2000
Nun, im Allgemeinen schadet es nicht (abgesehen davon, dass die Binärdatei größer gemacht wird, was zugegebenermaßen im Fall des Kernels ein gültiger Punkt ist), es ist nicht das Standardverhalten, und zwar aus den drei genannten Gründen: Inkompatibilität mit binutils, ccache und distcc-Problemen und Die Module werden trotz des Abisolierens größer
hroptatyr
Das scheint nicht ganz richtig zu sein. Durch das von Ihnen angegebene Commit werden nur die Änderungen am Abisolierverhalten rückgängig gemacht INSTALL_MOD_STRIP existierte lange davor. Soweit ich das beurteilen kann, wurde es in commit eingeführt ac031f26e8, die es nur als Lösung für das Problem der riesigen Module erwähnt.
Dolda2000
Außerdem sollte ich erwähnen, dass ich, zumindest soweit ich mich erinnere (obwohl es schon eine Weile her ist), den Grund dafür suchen musste INSTALL_MOD_STRIP Am Anfang war, dass meine initrd-Bilder ohne sie so groß wurden, dass Grub sie nicht einmal akzeptierte. In diesem Fall ist es nicht ganz richtig, dass das Entfernen von "keinen Schaden anrichtet".
Dolda2000
Nun, ich meinte, es schadet im Allgemeinen nicht, ich habe gesagt, dass Kernel-Binärdateien hier fragwürdig sind, da die Größe eine Rolle spielt. Meiner Erfahrung nach ist der Overhead, zumindest bei den neuesten initrd-Formaten (die mindestens seit April 2000 komprimiert werden können, weit bevor INSTALL_MOD_STIP eingeführt wurde), nicht so problematisch, da die sym-Tabelle ziemlich redundant ist .
hroptatyr