Estou tentando executar uma impressora SNBC USB no Raspberry Pi2.
Para isso, preciso copiar o filtro binário da impressora USB SNBC para /usr/lib/cups/filter
. Mas o binário do filtro é compilado usando um processador x86 (o fabricante não tem interesse em apoiar o braço) onde eu uso armv7
. Eu sei que não vai funcionar, mas por uma curiosidade eu tentei e diz copos /usr/lib/cups/filter/rasterorp3150 failed
.
Procurei soluções na internet e as pessoas sugerem o uso do Qemu. Mas é para um x86 completo armar a plataforma. Existe uma maneira de converter o binário x86 para armar o binário de uma maneira fácil e sem complicações?
A propósito, converter o binário x86 usando uma hexedit
ferramenta em um armv7
binário equivalente é uma boa idéia? ( opcode
conversão)
Se sim, alguém pode dar uma idéia de como fazê-lo?
Respostas:
Você não pode converter facilmente um binário x86 para ARM. Se você não pode obter o código-fonte ou um binário ARM do fabricante e realmente deseja usar a impressora com o Pi2, a abordagem Qemu é a correta nesse caso, embora provavelmente seja muito lenta . O Qemu faz emulação completa do sistema, mas também funciona muito bem para emulação de processo único.
Estou assumindo que você tenha algum tipo de derivado do Debian no seu Pi2 (embora não tenha certeza de que isso funcione com o Raspbian), e que o binário que você possui é
i386
(se for de 64 bits, useamd64
). Comece adicionandoi386
como uma arquitetura estrangeira:Em seguida, execute
ldd
o binário e adicione as bibliotecas necessárias; tipicamentee qualquer outra coisa com o
:i386
sufixo adicionado. Verifique se isso não remove nenhum pacote instalado; espero que tudo o que você precise seja habilitado para multiarch. (Caso contrário, o resto não funcionará.)Depois de fazer isso, instale
qemu-user-static
se ainda não estiver instalado (junto com suabinfmt-support
recomendação); então você pode usarqemu-i386-static
para executar seu programa:De fato, graças a
binfmt-support
ele deve ser executado diretamente (como apontado por Toby Speight ):(
binfmt-support
usará o Qemu para fazer isso funcionar de forma transparente.)Se você não quiser usar
binfmt-support
, afaste-rasterorp3150
se:e instale um script contendo
como
/usr/lib/cups/filter/rasterorp3150
.Se preferir, você pode configurar um chroot para tudo isso; veja
debootstrap
e sua--foreign
opção (o chroot pode ser configurado para usar o Qemu automaticamente).fonte
apt update
depois de adicionar o arco i386.i386
binários. Isso funciona apenas com arquiteturas suportadas na distribuição que você está usando.Obrigado pelo seu replay detalhado.
Eu uso o Rasbian OS e a adição da arquitetura i386 falha no raspbian durante a atualização do sudo apt-get. Posso baixar o pacote i386 separadamente para raspbian e instalar? Se assim for, você pode compartilhar todos os links para download.
Posso copiar os arquivos .so dependentes de filtros do i386 (Linux mint executando em x86) e colar nos caminhos apropriados no raspbain e usar o Qemu para executar o filtro?
A seguir, o eco ldd do filtro:
Regard, Nash
fonte