J'essaie d'exécuter une imprimante SNBC USB sur Raspberry Pi2.
Pour cela, je dois copier le filtre binaire de l'imprimante USB SNBC /usr/lib/cups/filter
. Mais le filtre binaire est compilé à l'aide d'un processeur x86 (le constructeur n'a pas intérêt à supporter le bras) là où j'utilise armv7
. Je sais que ça ne marchera pas mais pour une curiosité j'ai essayé et cups dit /usr/lib/cups/filter/rasterorp3150 failed
.
J'ai cherché des solutions sur Internet et les gens suggèrent d'utiliser Qemu. Mais c'est pour une plate-forme x86 complète à armer. Existe-t-il un moyen de convertir le binaire x86 pour armer le binaire d'une manière simple et simple?
Soit dit en passant, la conversion du binaire x86 à l'aide d'un hexedit
outil en un armv7
binaire équivalent est-elle une bonne idée? ( opcode
conversion)
Si oui, quelqu'un peut-il donner une idée de la façon de procéder?
Réponses:
Vous ne pouvez pas facilement convertir un binaire x86 en ARM. Si vous ne pouvez pas obtenir le code source ou un binaire ARM du fabricant et que vous voulez vraiment utiliser l'imprimante avec votre Pi2, l'approche Qemu est la bonne dans ce cas, bien qu'elle soit probablement très lente. . Qemu fait une émulation complète du système, mais il fonctionne également très bien pour l'émulation de processus unique.
Je suppose que vous avez une sorte de dérivé Debian sur votre Pi2 (je ne suis pas sûr que cela fonctionnera avec Raspbian), et que le binaire que vous avez est destiné
i386
(s'il est 64 bits, utilisez-le à laamd64
place). Commencez par ajouteri386
une architecture étrangère:Exécutez ensuite
ldd
sur le binaire et ajoutez toutes les bibliothèques requises; typiquementet toute autre chose avec le
:i386
suffixe ajouté. Assurez-vous que cela ne supprime aucun package installé; nous espérons que tout ce dont vous avez besoin est compatible multiarchitecture. (Sinon, le reste ne fonctionnera pas.)Une fois que vous avez fait cela, installez-le
qemu-user-static
s'il n'est pas déjà installé (avec sabinfmt-support
recommandation); alors vous pouvez utiliserqemu-i386-static
pour exécuter votre programme:En fait, grâce à
binfmt-support
cela, il devrait fonctionner directement (comme l'a souligné Toby Speight ):(
binfmt-support
utilisera Qemu pour rendre ce travail transparent.)Si vous ne voulez pas utiliser
binfmt-support
,rasterorp3150
éloignez-vous:et installez un script contenant
comme
/usr/lib/cups/filter/rasterorp3150
.Si vous préférez, vous pouvez configurer un chroot pour tout cela; voir
debootstrap
et son--foreign
option (le chroot peut être configuré pour utiliser Qemu automatiquement).la source
apt update
de l'ajout de l'arc i386.i386
binaires. Cela ne fonctionne qu'avec des architectures prises en charge dans la distribution que vous utilisez.Merci pour votre replay détaillé.
J'utilise Rasbian OS et l'ajout de l'architecture i386 échoue dans raspbian lors de la mise à jour sudo apt-get. Puis-je télécharger le package i386 séparément pour raspbian et l'installer?. Si oui, pouvez-vous partager les liens à télécharger.
Puis-je copier les fichiers .so dépendants des filtres à partir d'i386 (Linux mint fonctionnant en x86) et les coller dans les chemins appropriés dans raspbain et utiliser Qemu pour exécuter le filtre?
Voici l'écho ldd du filtre:
Regarde, Nash
la source