Resulta que una de mis aficiones es la fotografía. Otra los ordenadores. Estaba claro que me tenía que comprar un escáner de esos con soporte para escanear negativos y diapositivas. Cuando por fín tengo tiempo me pongo a ello, visito la página de sane y la de los escáneres USB... en fín, que me decido por un EPSON 1660 Photo. Una de las razones es que en la página de los escáner USB recomiendan EPSON por haber ellos colaborado como nadie para programar los drivers, con lo que supongo que estará bien soportado. (Pues si, señores de Epson, por lo menos han conseguido conmigo un cliente por su apoyo a linux).En fin, que como todos mis ordenadores son del año de la polca pues no tienen puertos USB, con lo que hay que buscarse una tarjeta USB para pincharla en un PC para que el escáner pueda trabajar. Sí, hay escáners paralelo y SCSI, pero la diferencia de precio aconseja claramente ir por el camino del USB.
Ya dije que mis ordenadores son del año de la polca, pues bién, yo también, con lo que lo del USB era para mí una tecnología algo así como futurista y desconocida, así que me voy a #escomposlinux (un canal de la red de irc de ecol, véase www.escomposlinux.org para mas detalles), saludo a los amiguetes, charlamos un rato de la vida y de la muerte, y cuando están descuidados y en plan off-topic pregunto: ¿alguien sabe como le pongo una tarjeta USB a un linux?... silencio sepulcral... pero mi amigo linuxete me da un gran consejo: "Está chupado", dice, "compra la mas barata que encuentres y va sola". Como linuxete me inspira cierta confianza, voy a una tienda, miro precios, y me compro una tarjeta Conceptronic, que me da dos puertos USB y cumple con el estándar USB 1.0... efectivamente me salió muy barata, si...
Bueno, pues a compilar otro kernel mas... el manual de la tarjeta jura y perjura que cumple con la norma UCHI. Consulto la ayuda de la configuración del kernel y veo que hay dos posibilidades, UHCI y OHCI, y además indica que el UHCI es la norma en el mundo Intel. Con las ideas claras, elijo UHCI. El siguiente paso es elegir el driver scanner en el soporte USB... y poco mas. Compilo a la primera, instalo el núcleo, arranco... y una pila de errores que da gloria verla... que no encuentra nada que tenga que ver con UHCI. Estupendo, la primera en la frente... ¿estará mal la tarjeta?... después de varias vueltas me da por mirar la tarjeta y veo un estupendo chip que anuncia al mundo un OHCI como una casa... vale, documentación de Conceptronic a la basura. El siguiente paso es compilar con soporte para OHCI y con el escáner encendido pruebo el siguiente núcleo... carga bien el USB (¡¡bien!!) y me sigue diciendo...
19:35:44 hradcany kernel: Manufacturer: EPSON
19:35:44 hradcany kernel: Product: EPSON Scanner
19:35:44 hradcany kernel: usb.c: USB device 4 (vend/prod 0x4b8/0x11e) is not claimed by any active driver.
Otra en la frente... que si... que el escaner habla con el puerto, pero le da unos valores de fabricante y producto que no reconoce el driver del escaner. Vaya, así que como este escáner es muy nuevo aún no está soportado (#@!##).
Aprovecho para mirar en la documentación del kernel todo lo que hay sobre usb y escáners... son un par de ficheros muy claritos donde te enseñan todo, incluso a crear el dispositivo /dev/scanner0 si es que no lo tenías... como la primera parte no va muy bien que digamos, voy adelantando trabajo instalando el sane y xsane, que son necesarios para trabajar con los escáners.
Ya mas relajado, y pensando en los muertos del escáner, me decido a echarle un ojo al código del kernel, para ver como define los escáners y tal... hay un maravilloso scanner.c llenito de funciones... anda, y un scanner.h que promete. Lo abro, busco "epson" y me encuentro con una tabla tan sencilla de leer como esto:
/* Seiko/Epson Corp. */
{ USB_DEVICE(0x04b8, 0x0101) }, /* Perfection 636U and 636Photo */
{ USB_DEVICE(0x04b8, 0x0103) }, /* Perfection 610 */
{ USB_DEVICE(0x04b8, 0x0104) }, /* Perfection 1200U and 1200Photo*/
{ USB_DEVICE(0x04b8, 0x0106) },/* Stylus Scan 2500 */
{ USB_DEVICE(0x04b8, 0x0107) }, /* Expression 1600 */
{ USB_DEVICE(0x04b8, 0x010a) }, /* Perfection 1640SU and 1640SU Photo */
{ USB_DEVICE(0x04b8, 0x010b) }, /* Perfection 1240U */
{ USB_DEVICE(0x04b8, 0x010c) }, /* Perfection 640U */
{ USB_DEVICE(0x04b8, 0x010e) }, /* Expression 1680 */
{ USB_DEVICE(0x04b8, 0x0110) }, /* Perfection 1650 */
Ajá, ahí define los valores de fabricante y producto... así que si le añado algo así:
{ USB_DEVICE(0x04b8, 0x011e) }, /* Perfection 1660 */
pues a lo mejor traga...compilo, instalo y...
Pues si que traga, y el xsane, que es el programa para capturar las imágenes del escaner, ya va a la primera y sin problemas.
Otra cosa...como mas de uno se habrá dado cuenta, si es que alguien está a estas alturas leyendo, todo este rollo se reduce a una sola línea en el /etc/modules.conf, la línea sería
options scanner vendor=0x04b8 product=0x011e
si hubiera compilado el driver del escáner como módulo, pero bueno, así hemos echado un ratillo.