Ich versuche, einen SNBC-USB-Drucker auf Raspberry Pi2 auszuführen.
Dazu muss ich die Filter-Binärdatei des SNBC-USB-Druckers auf kopieren /usr/lib/cups/filter
. Die Filter-Binärdatei wird jedoch mit einem x86-Prozessor kompiliert (der Hersteller hat kein Interesse daran, den Arm zu unterstützen), wo ich ihn verwende armv7
. Ich weiß, dass es nicht funktionieren wird, aber aus Neugier habe ich es versucht und Tassen sagt /usr/lib/cups/filter/rasterorp3150 failed
.
Ich habe im Internet nach Lösungen gesucht und die Leute schlagen vor, Qemu zu verwenden. Aber es ist für eine komplette x86-Plattform zu bewaffnen. Gibt es eine Möglichkeit, die x86-Binärdatei auf einfache und unkomplizierte Weise in eine Arm-Binärdatei umzuwandeln?
Ist es übrigens eine gute Idee , die x86-Binärdatei mit einem hexedit
Tool in eine äquivalente armv7
Binärdatei zu konvertieren ? ( opcode
Umwandlung)
Wenn ja, kann jemand eine Idee geben, wie es geht?
Antworten:
Sie können eine x86- Binärdatei nicht einfach in ARM konvertieren . Wenn Sie den Quellcode oder eine ARM-Binärdatei vom Hersteller nicht erhalten können und den Drucker wirklich mit Ihrem Pi2 verwenden möchten, ist der Qemu-Ansatz in diesem Fall der richtige, obwohl er wahrscheinlich sehr langsam ist . Qemu führt eine vollständige Systememulation durch, funktioniert aber auch sehr gut für die Einzelprozessemulation.
Ich gehe davon aus, dass Sie eine Art Debian-Derivat auf Ihrem Pi2 haben (ich bin mir nicht sicher, ob dies mit Raspbian funktioniert) und dass die Binärdatei, für die Sie haben
i386
(wenn es 64-Bit ist, verwenden Sieamd64
stattdessen). Beginnen Sie mit dem Hinzufügeni386
als fremde Architektur:Führen Sie dann
ldd
die Binärdatei aus und fügen Sie alle erforderlichen Bibliotheken hinzu. typischerweiseund alles andere mit dem
:i386
hinzugefügten Suffix. Stellen Sie sicher, dass dadurch kein installiertes Paket entfernt wird. Hoffentlich ist alles, was Sie brauchen, Multiarch-fähig. (Sonst funktioniert der Rest nicht.)Sobald Sie dies getan haben, installieren Sie es,
qemu-user-static
falls es noch nicht installiert ist (zusammen mit seinerbinfmt-support
Empfehlung). Dann können Sieqemu-i386-static
Ihr Programm ausführen:In der Tat sollte dank
binfmt-support
ihm direkt laufen (wie von Toby Speight hervorgehoben ):(
binfmt-support
verwendet Qemu, um diese Arbeit transparent zu machen.)Wenn Sie nicht verwenden möchten
binfmt-support
, entfernen Sierasterorp3150
sich:und installieren Sie ein Skript mit
als
/usr/lib/cups/filter/rasterorp3150
.Wenn Sie es vorziehen, können Sie für all dies eine Chroot einrichten. siehe
debootstrap
und seine--foreign
Option (die Chroot kann so eingerichtet werden, dass Qemu automatisch verwendet wird).quelle
apt update
Hinzufügen von i386 arch immer der Fehler 404 angezeigt.i386
Binärdateien. Dies funktioniert nur mit Architekturen, die in der von Ihnen verwendeten Distribution unterstützt werden.Vielen Dank für Ihre ausführliche Wiederholung.
Ich verwende Rasbian OS und das Hinzufügen der i386-Architektur schlägt in raspbian während des sudo apt-get-Updates fehl. Kann ich das i386-Paket separat für raspbian herunterladen und installieren?. Wenn ja, können Sie Links zum Herunterladen freigeben.
Kann ich die filterabhängigen .so-Dateien von i386 (Linux Mint unter x86) kopieren und in Raspbain in die entsprechenden Pfade einfügen und den Filter mit Qemu ausführen?
Es folgt das ldd-Echo des Filters:
Rücksicht, Nash
quelle