Kann ich Hardfp-Software auf einem Softfp-Kernel ausführen?

Antworten:

7

Nein, für Hardfp kompilierte Software funktioniert auf einem Softfp-System nicht, da die Aufrufkonventionen unterschiedlich sind. Bei den Soft-Float-Konventionen werden Floats durch ganzzahlige Register geleitet (obwohl der Kernel technisch gesehen nicht das eigentliche Problem ist - das Problem ist der Linker und alle Standardbibliotheken). Aus diesem Grund war das Raspbian-Projekt ein so großes Unterfangen, dass alles von Grund auf hart sein muss. Jetzt, da wir ein offizielles Raspbian-Image mit vollständiger Hardfp-Unterstützung haben, scheint es keinen Grund mehr zu geben, für Softfp-Systeme zu entwickeln. Ich würde vorschlagen, Ihre Toolchain zu ändern, um Hardfp zu generieren, indem Sie gcc-Optionen wie:

gcc -O2 -march = armv6 -mfpu = vfp -mfloat-abi = hart

da dies Code generieren sollte, der für die Verwendung mit dem neuen Raspbian-Image geeignet ist. Das March-Flag gibt die Prozessorfamilie an, und die Mfpu- und Mfloat-Flags geben an, dass Hard-Float-Anweisungen und Aufrufkonventionen verwendet werden können und sollten.

Als Alternative zum Flag -march können Sie stattdessen "-mcpu = arm1176jzf-s" verwenden, das den tatsächlich im Pi verwendeten Chip angibt.

Darren Wilkinson
quelle
Oder verwenden Sie die Toolchain, die die Foundation auf GitHub bereitstellt.
Jivings
@Jivings Wenn Sie ihre herunterladen gcc, müssen Sie noch marchetc angeben ?
Alex Chamberlain
@AlexChamberlain Das würde ich nicht glauben.
Jivings
Ist -march = armv6 usw. in jedem gcc eingebaut?
Alex Chamberlain
Führt gcc -march = armv6 eine andere Binärdatei aus? Wie funktioniert es?
Alex Chamberlain