Wie führe ich ausführbare armhf-Dateien auf einem arm64-System aus?

10

Ich habe Ubuntu 16.04.2 LTS auf einem arm64-Server installiert:

# uname -a
Linux test 4.9.23-std-1 #1 SMP Mon Apr 24 13:18:14 UTC 2017 aarch64 aarch64 aarch64 GNU/Linux

Ich habe den folgenden Befehl ausgeführt, um die armhfPaketinstallation zu aktivieren :

# dpkg --add-architecture armhf

Ich habe dann das traceroutePaket installiert :

# apt-get install traceroute:armhf
Reading package lists... Done
Building dependency tree
[...]
Preparing to unpack .../traceroute_1%3a2.0.21-1_armhf.deb ...
Unpacking traceroute:armhf (1:2.0.21-1) ...
Processing triggers for man-db (2.7.5-1) ...

Ich kann die ausführbare Datei jedoch nicht starten:

# traceroute
-bash: /usr/sbin/traceroute: cannot execute binary file: Exec format error

Weitere Informationen:

# file /usr/bin/traceroute.db
/usr/bin/traceroute.db: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV),
    dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux
    2.6.32, BuildID[sha1]=0ebd0553e26b163dd848c131fe8ee0a4a2409109, stripped
# ldd /usr/bin/traceroute.db
        not a dynamic executable

Ich habe auch versucht binfmt-support, das binfmt_miscModul zu installieren und zu bestätigen, dass es geladen wurde.

Ist nicht arm64abwärtskompatibel mit armhf? Wie kann ich armhfausführbare Dateien auf einem arm64Server ausführen ?

Nathan Osman
quelle
Anscheinend müssen alle Abhängigkeiten sowie der Interpreter auch 32-Bit sein
You'reAGitForNotUsingGit
Hast du apt-get update; apt-get upgradedanach gespielt dpkg --add-architecture armhf?
Marcos Silveira
@ MarcosSilveira ja, kein Unterschied.
Nathan Osman

Antworten:

15

Die Arm32-Unterstützung ist bei arm64 optional. In der Praxis gibt es nur eine arm64-CPU, die die Unterstützung älterer Leg32-Befehlssätze auslässt - Cavium ThunderX. Aus der Kernel-Versionszeichenfolge geht hervor, dass Sie Scaleway armv8-Server verwenden. In diesem Fall haben Sie kein Glück - Scaleway armv8-Server basieren auf ThunderX. Verwenden Sie stattdessen den Scaleway C1, der nativer Arm32 ist.

Riku Voipio
quelle
2
Gut, ich benutze Scaleway. Danke für die Klarstellung.
Nathan Osman
1
Der Typ 2A-Server von Packet basiert ebenfalls auf ThunderX und unterliegt ebenfalls dieser Einschränkung.
vielmetti