Compileroptionen für Kernelbau
Hallo Liste, wenn ich rpm's baue, mache ich das mit der Option --target=i686, fürs händische Übersetzen von Sourcen gibt es die Compilerflags "-march=i686 -mtune=i686". Aber wie kann ich beim Kernelbau mit "make rpm" ein i686-optimiertes rpm bauen? Egal wie ich es anstelle, der Kernel landet immer unter ./RPMS/i386... Die gesetzen Umgebungvariablen $RPM_OPT_FLAGS und $CFLAGS werden einfach ignoriert. Wie gross ist der Unterschied in der Ausführungsgeschwindigkeit zwischen i386 und i686? Gruss Mario
Mario van der Linde wrote:
wenn ich rpm's baue, mache ich das mit der Option --target=i686, fürs händische Übersetzen von Sourcen gibt es die Compilerflags "-march=i686 -mtune=i686". Aber wie kann ich beim Kernelbau mit "make rpm" ein i686-optimiertes rpm bauen? Egal wie ich es anstelle, der Kernel landet immer unter ./RPMS/i386...
Er landet dort, weil die Architektur des Systems, auf dem Du momentan versuchst das RPM zu bauen, i386 ist und Du keine Cross-Compilierung des Kernels fuer eine andere Architektur vornehmen moechtest. Bei der Architektur wird nicht zwischen i386 und i686 unterschieden: das Kernel-Makefile ersetzt alle i?86 durch ein i386. In diesem Zusammenhang geht es wirklich nur um die generelle Architektur des Systems, nicht um die optimalen Compilerflags. Wenn Du ein "make V=1 rpm" ausfuehrst, duerftest Du aber bemerken, dass dennoch nicht "-march=i386" beim Compilieren verwendet wird, sondern eine hoehere Optimierung. Das liegt an arch/i386/Makefile, dem architekturabhaengigen Teil des Kernel-Makefiles, was wiederum anhand der Prozessorwahl Deiner Kernel-Konfiguration optimale Compilerflags ermittelt. Wenn Du zum Beispiel bei der Kernel-Konfiguration einen Pentium-M (meine Notebook-CPU) auswaehlst, dann wird beim Compilieren des Kernels auch "-march=i686" verwendet. Dennoch wird das fertige RPM Paket in RPMS/i386 landen aus dem oben genannten Grund. Ich hoffe, das beantwortet Deine Frage. Cheers, Thomas -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Sonntag, 30. Juli 2006 13:58 schrieb Thomas Hertweck: [...]
Wenn Du ein "make V=1 rpm" ausfuehrst, duerftest Du aber bemerken, dass dennoch nicht "-march=i386" beim Compilieren verwendet wird, sondern eine hoehere Optimierung. Das liegt an arch/i386/Makefile, dem architekturabhaengigen Teil des Kernel-Makefiles, was wiederum anhand der Prozessorwahl Deiner Kernel-Konfiguration optimale Compilerflags ermittelt. Wenn Du zum Beispiel bei der Kernel-Konfiguration einen Pentium-M (meine Notebook-CPU) auswaehlst, dann wird beim Compilieren des Kernels auch "-march=i686" verwendet. Dennoch wird das fertige RPM Paket in RPMS/i386 landen aus dem oben genannten Grund.
Ich hoffe, das beantwortet Deine Frage.
Ja, perfekt. D.h. ein anschliessendes "rpmbuild --rebuild --target" mit dem kernel-*-src.rpm ist gar nicht nötig...
Cheers,
Thomas
Danke, Gruss Mario
Mario van der Linde wrote:
[...] Ja, perfekt. D.h. ein anschliessendes "rpmbuild --rebuild --target" mit dem kernel-*-src.rpm ist gar nicht nötig...
AFAIK wuerde es gar nichts aendern. Wenn Du bei der Kernel-Konfig z.B. wirklich eine alte i386 CPU auswaehlst, dann macht es keinen Sinn mit "-march=i686" zu compilieren, selbst wenn Du das rpmbuild als target angibst, weil der Kernel dann auf dem angestrebten Zielsystem gar nicht laufen wuerde. Der Kernel ermittelt optimale Compiler-Flags anhand des Zielsystems normalerweise selbst, was auch gut so ist. Und wirklich kritische Bereiche sind beim Kernel hand-optimiert. Cheers, Th. -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
participants (2)
-
Mario van der Linde
-
Thomas Hertweck