Estoy tratando de ejecutar una impresora USB SNBC en Raspberry Pi2.
Para eso necesito copiar el filtro binario de la impresora USB SNBC /usr/lib/cups/filter
. Pero el filtro binario se compila usando un procesador x86 (el fabricante no tiene interés en apoyar el brazo) donde lo uso armv7
. Sé que no funcionará, pero por curiosidad lo intenté y dice cups /usr/lib/cups/filter/rasterorp3150 failed
.
Busqué soluciones en Internet y la gente sugiere usar Qemu. Pero es para una plataforma x86 completa para armar. ¿Hay alguna manera de convertir el binario x86 en binario de armado de una manera fácil y sin complicaciones?
Por cierto, ¿es una buena idea convertir el binario x86 usando una hexedit
herramienta a un armv7
binario equivalente ? ( opcode
conversión)
Si es así, ¿alguien puede dar alguna idea sobre cómo hacerlo?
Respuestas:
No puede convertir fácilmente un binario x86 a ARM. Si no puede obtener el código fuente, o un binario ARM del fabricante, y realmente desea utilizar la impresora con su Pi2, entonces el enfoque de Qemu es el correcto en este caso, aunque probablemente sea muy lento . Qemu realiza la emulación completa del sistema, pero también funciona muy bien para la emulación de un solo proceso.
Supongo que tiene algún tipo de derivado de Debian en su Pi2 (aunque no estoy seguro de que esto funcione con Raspbian), y que el binario que tiene es para
i386
(si es de 64 bits, useamd64
en su lugar). Comience agregandoi386
como arquitectura extranjera:Luego, ejecute
ldd
en el binario y agregue las bibliotecas necesarias; típicamentey cualquier otra cosa con el
:i386
sufijo agregado. Asegúrese de que esto no elimine ningún paquete instalado; Esperemos que todo lo que necesita esté habilitado para multiarch. (De lo contrario, el resto no funcionará).Una vez que haya hecho eso, instálelo
qemu-user-static
si aún no está instalado (junto con subinfmt-support
recomendación); entonces puedes usarqemu-i386-static
para ejecutar tu programa:De hecho, gracias a
binfmt-support
él debería ejecutarse directamente (como lo señaló Toby Speight ):(
binfmt-support
utilizará Qemu para que esto funcione de manera transparente).Si no quieres usar
binfmt-support
,rasterorp3150
aléjate:e instalar un script que contenga
como
/usr/lib/cups/filter/rasterorp3150
.Si prefieres puedes configurar un chroot para todo esto; see
debootstrap
y su--foreign
opción (el chroot se puede configurar para usar Qemu automáticamente).fuente
apt update
después de agregar i386 arch.i386
binarios. Esto solo funciona con arquitecturas compatibles con la distribución que está utilizando.Gracias por tu repetición detallada.
Uso el sistema operativo Rasbian, y la adición de la arquitectura i386 falla en raspbian durante sudo apt-get update. ¿Puedo descargar el paquete i386 por separado para raspbian e instalarlo? Si es así, ¿puedes compartir algún enlace para descargar?
¿Puedo copiar los archivos .so dependientes de filtros de i386 (Linux mint ejecutándose en x86) y pegarlos en las rutas apropiadas en raspbain y usar Qemu para ejecutar el filtro?
Los siguientes son el eco ldd del filtro:
Respeto, Nash
fuente