Driver de scanner Brother x86 no Raspberry Pi com QEMU e SANE

3

Eu tenho um Brother 7055 Printer / Scanner e um Raspberry Pi, estou tentando transformar ambos em um servidor de impressão e digitalização. Infelizmente, a Brother não fornece nenhum driver ARM. Eu me deparo com esta postagem no blog sobre emulação de QEMU em o Raspberry Pi e de fato eu consegui instalar os drivers da impressora x86 usando essa abordagem, estou compartilhando via CUPS e tudo bem. Agora estou tentando fazer o scanner funcionar e o software da Brother está instalado sem nenhum erro, mas o scanner não aparece quando eu corro scanimage -L

O scanner está conectado:

dporobic@raspberrypi:~ $ lsusb
Bus 001 Device 005: ID 04f9:0248 Brother Industries, Ltd DCP-7055 scanner/printer
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Mas não consigo ver o scanner:

dporobic@raspberrypi:~ $ scanimage -L

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).

sane-find-scanner não vê algo, mas não consegue fazê-lo funcionar, pois o irmão usa seus próprios drivers sãos.

porobic@raspberrypi:~ $ sudo sane-find-scanner 

  # sane-find-scanner will now attempt to detect your scanner. If the
  # result is different from what you expected, first make sure your
  # scanner is powered up and properly connected to your computer.

  # No SCSI scanners found. If you expected something different, make sure that
  # you have loaded a kernel SCSI driver for your SCSI adapter.
  # Also you need support for SCSI Generic (sg) in your operating system.
  # If using Linux, try "modprobe sg".

found USB scanner (vendor=0x04f9, product=0x0248) at libusb:001:005
found USB scanner (vendor=0x0424, product=0xec00) at libusb:001:003
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

  # Not checking for parallel port scanners.

  # Most Scanners connected to the parallel port or other proprietary ports
  # can't be detected by this program.

A varredura de depuração me dá a seguinte saída, parece que o brother4 lib não pode ser carregado:

dporobic@raspberrypi:~ $ sudo SANE_DEBUG_DLL=255 scanimage -L
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.24
[dll] sane_init/read_dlld: attempting to open directory './dll.d'
[dll] sane_init/read_dlld: attempting to open directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: using config directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: considering /etc/sane.d/dll.d/libsane-extras
[dll] sane_init/read_config: reading dll.d/libsane-extras
[dll] sane_init/read_dlld: done.
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend 'brother4'
[dll] sane_get_devices
[dll] load: searching backend 'brother4' in '/usr/lib/arm-linux-gnueabihf/sane:/usr/lib/sane'
[dll] load: trying to load '/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1'
[dll] load: dlopen()ing '/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1'
**[dll] load: dlopen() failed (/usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so.1: cannot open shared object file: No such file or directory)**
[dll] sane_get_devices: found 0 devices

No scanners were identified. If you were expecting something different,
check that the scanner is plugged in, turned on and detected by the
sane-find-scanner tool (if appropriate). Please read the documentation
which came with this software (README, FAQ, manpages).
[dll] sane_exit: exiting
[dll] sane_exit: finished

Os arquivos lib estão lá, mas parece que os arquivos não podem ser abertos ou acessados:

dporobic@raspberrypi:~ $ ls -l /usr/lib/arm-linux-gnueabihf/sane/ | grep brother
-rwxr-xr-x 1 root root 129696 Jan  8 11:08 libsane-brother4.so
-rwxr-xr-x 1 root root 129696 Jan  8 11:08 libsane-brother4.so.1
-rwxr-xr-x 1 root root 129696 Jan  8 11:08 libsane-brother4.so.1.0.7

Talvez algumas dependências da libsane-brother4.so lib estejam faltando, mas rodar objdump -x e procurar na seção dinâmica me dá a seguinte saída (não estou muito familiarizado com o objdump, então espero que eu esteja interpretando corretamente) :

dporobic@raspberrypi:~ $ objdump -x /usr/lib/arm-linux-gnueabihf/sane/libsane-brother4.so | grep NEEDED
  NEEDED               libpthread.so.0
  NEEDED               libnsl.so.1
  NEEDED               libusb-0.1.so.4
  NEEDED               libm.so.6
  NEEDED               libdl.so.2
  NEEDED               libc.so.6

E eu pareço ter essas bibliotecas no meu Pi, apenas uma delas está disponível apenas como versão ARM e não como i386, todas as outras vêm em ambos:

dporobic@raspberrypi:~ $ sudo ldconfig -p | grep -E 'libpthread.so.0|libnsl.so.1|libusb-0.1.so.4|libm.so.6|libdl.so.2|libc.so.6'
        libusb-0.1.so.4 (libc6,hard-float) => /lib/arm-linux-gnueabihf/libusb-0.1.so.4
        libusb-0.1.so.4 (libc6,hard-float) => /usr/lib/arm-linux-gnueabihf/libusb-0.1.so.4
        libpthread.so.0 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libpthread.so.0
        libpthread.so.0 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libpthread.so.0
        libnsl.so.1 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libnsl.so.1
        libnsl.so.1 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libnsl.so.1
        libm.so.6 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libm.so.6
        libm.so.6 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libm.so.6
        libdl.so.2 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libdl.so.2
        libdl.so.2 (libc6, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libdl.so.2
        libc.so.6 (libc6,hard-float, OS ABI: Linux 2.6.32) => /lib/arm-linux-gnueabihf/libc.so.6
        libc.so.6 (ELF, OS ABI: Linux 2.6.32) => /lib/i386-linux-gnu/libc.so.6

Mas a única lib que eu preciso não está listada, provavelmente é por isso que ela não pode ser carregada:

dporobic@raspberrypi:~ $ sudo ldconfig -p | grep libsane-brother4.so
dporobic@raspberrypi:~ $

Originalmente o borther4 lib estava localizado em /usr/lib/sane , eu adicionei este caminho para /etc/ld.so.conf.d/libsane-brother.conf e execute sudo ldconfig , mas eu só recebo este libsane.so.1 lib quando eu faço check in ldconfig -v :

dporobic@raspberrypi:~ $ sudo ldconfig -v 2>/dev/null | grep brother -B1
/usr/lib/sane:
        libsane.so.1 -> libsane-brother4.so.1.0.7

Não é possível fazer com que libsane-brother.so.1 lib apareça no cache do ld ...

Atualizar

Parece não estar relacionado ao dlconfig, na minha máquina opensuse, onde o scanner está funcionando, o libsane-brother.so.1 lib não está aparecendo no cache do ldconfig, assim como no Pi, mas a biblioteca é carregada sem nenhum problema.

dporobic@latitude:~> sudo ldconfig -v 2>/dev/null | grep -E 'sane|brother'
        libksane.so.0 -> libksane.so.0.2.0
        libsane.so.1 -> libsane.so.1.0.24

Carregando corretamente, sem erro:

dporobic@latitude:~> sudo SANE_DEBUG_DLL=255 scanimage -L
[sanei_debug] Setting debug level of dll to 255.
[dll] sane_init: SANE dll backend version 1.0.13 from sane-backends 1.0.24
[dll] sane_init/read_dlld: attempting to open directory './dll.d'
[dll] sane_init/read_dlld: attempting to open directory '/etc/sane.d/dll.d'
[dll] sane_init/read_dlld: opendir failed: No such file or directory
[dll] sane_init/read_config: reading dll.conf
[dll] add_backend: adding backend 'brother4'
[dll] sane_get_devices
[dll] load: searching backend 'brother4' in '/usr/lib64/sane'
[dll] load: trying to load '/usr/lib64/sane/libsane-brother4.so.1'
**[dll] load: dlopen()ing '/usr/lib64/sane/libsane-brother4.so.1'**
[dll] init: initializing backend 'brother4'
[dll] init: backend 'brother4' is version 1.0.1
[dll] sane_get_devices: found 1 devices
device 'brother4:bus2;dev1' is a Brother DCP-7055 USB scanner
[dll] sane_exit: exiting
[dll] sane_exit: calling backend 'brother4's exit function
[dll] sane_exit: finished

Então, a questão é agora porque a Sane não pode abrir libsane-brother.so.1 lib , mesmo que esteja no caminho correto ...

Nota: O mesmo scanner conectado diretamente à minha máquina OpenSuse e com os mesmos drivers instalados aparece quando eu executo scanimage -L , então deve estar funcionando com sã, a questão questionável aqui é o Pi.

    
por Damir Porobic 07.01.2017 / 19:01

3 respostas

1

No ano passado, resolvi um desafio semelhante. No braço (com Armbian, Raspian é o mesmo) eu tive que instalar primeiro com ajuda da impressão qemu nesta máquina (mfc 795cw). O scanner não está funcionando, mas foi necessário instalar o driver de digitalização com falha neste braço linux. Para a digitalização, configurei um ambiente chroot. Você precisa de uma versão do Linux que foi usada no ano relacionado ao Driver Brother Linux. Por isso eu usei Lubuntu 10.04. Tome cuidado para não desinstalar o lpr !. Você tem que executar neste instalador linux brother chroot ambiente. Obras de impressão, em seguida, no braço-Linux, digitalização em chroot i368 Linux. Eu configurei um script para escanear para iniciar o chroot (mount -o bind, qemu, ....,) usando scanimage.

    
por 14.03.2017 / 09:47
0

Isso se deve ao fato de que o usado sane (armhf) não é arquitetura i383. Se você instalar o sane da arquitetura i386, carregue os drivers libsane-brother4.so.1. Mas neste momento eu encontrei um problema que são (i386) não funciona com libusb (armhf). Este é o módulo do kernel, e não o nível do usuário. Eu não entendo como contornar este problema.

    
por 29.01.2017 / 15:00
0

Isso exigiria a emulação do sistema qemu, portanto, provavelmente, executando, e. Convidado DSL com xícaras e compartilhando impressora / scanner USB com o host raspbian compartilhando-o com o resto do mundo (ou com sua rede local). É só uma ideia, não sei se é prático.

    
por 07.02.2017 / 21:03