Posted by khk

USB Interface

Update

The whole page needs some serious rework, unfortunately I don’t have the time right now. By now the stable kernel release is 2.4 and no longer 2.2, the USB drivers in the 2.4 family are pretty good (as long as you have something newer than 2.4.5) and you should not need to modify anything – besides potentially providing the vendor and product IDs in /etc/modules.conf. … and I promise that I will update this page soon …

Solaris and EPSON USB Scanners

Let’s first get this out of the way: There is a USB scanner driver that will allow you to use EPSON USB scanner on Solaris. http://www.bolthole.com/solaris/drivers/usb-epsonscan.html

USB Scanner Installation/Configuration

If you want to use the USB version of one of the supported scanners you have to do a little more work than what’s necessary for the SCSI version.

Getting USB to Work

First of all you need a working USB subsystem – who would have thought that :-) So go and read the USB HOWTO at http://linuxusbguide.sourceforge.net/. Click on the “Linux USB Guide” link, this will bring you to the current version.

All this is based on the USB backport from 2.3.39 to 2.2.14. The newest USB development versions are different and I’m not really familiar with them. The good news is that the bug that was introduced after 2.3.39 is fixed now: If you get the version 2.3.99-pre7 or later the scanner support is working.

Also, if you want to stick with the currently “stable” kernel version, you should upgrade to 2.2.18, which already comes with the backport of the 2.4.0-test kernel.

Update

The kernel versions 2.4.0-test1 (with all ac patches) and 2.4.0-test2 work also.

If you have a scanner that is not yet supported by the USB scanner driver you have two choices: You can either manually patch the file scanner.c or you can specify the device information as modprobe parameters (again two choices, either as command line parameters or in modules.conf).

Getting the Device Information

Display the USB device information. You can do this with the following command after the usbdevfs is mounted:

cat /proc/bus/usb/devices

This will print information about all your USB devices, the hubs, mice, keyboards, cameras, and the scanner. Find the scanner entry and look for the “P” line with the vendor and poduct ID information. Write this information down and move on to the next step. If you have one of the following scanners you can also just take the information from this table:

Model Vendor ID Product ID
Perfection 636U 0x04b8 0×0101
Perfection 610 0x04b8 0×0103
Perfection 1200U 0x04b8 0×0104
Stylus Scan 2500 0x04b8 0×0106
Espression 1600 0x04b8 0×0107
Perfection 1640 0x04b8 0x010a
Perfection 1240U 0x04b8 0x010b
Perfection 640 0x04b8 0x010c
Espression 1680 0x04b8 0x010e
Perfection 1650 0x04b8 0×0110
Perfection 1660 0x04b8 0x011e
Perfection 2400 0x04b8 0x011b
Perfection 2450 0x04b8 0×0112

If your scanner has the same base name as a model in the table, but uses an extension like “Photo”, just use the ID you find in the table. These scanners are identical, the usually come with different attachments like a transparency unit or an automatic document feeder.

Patching the Source Code

For patching the source code I just assume that you know what you are doing… Search for the “Epson” entries that are already in the file linux/drivers/usb/scanner.c and add the information about your scanner. This only works with a newer USB version. If you are using an older backport you have to search for 0×1606 (that’s the VendorID for UMAX) and add the new EPSON vendor ID and your product ID.

Recompile, install and run.

Modprobe Parameters

Command Line Options to Modprobe

The USB scanner driver takes two optional parameters:

  • vendor – User specified USB vendor ID
  • product – User specified USB product ID

You can just add these to the modprobe command:

modprobe scanner vendor=<your vendor ID> product=<your product ID>

Modifying modules.conf

Of course this is very cumbersome if you load the module manually every time you want to use the scanner. It’s much easier to just add the parameters to the /etc/modules.conf file and let modprobe take care of the rest. Add this line to the configuration file:

options scanner vendor=<your vendor ID> product=<your product ID>

Configuring SANE

Create the device file in /dev according to the instructions in the USB Guide. The device name you are using is needed for the next step.

Here is the command I used to create this file:

mknod /dev/usbscanner0 c 180 48
chmod 666 /dev/usbscanner0

To actually use the scanner with SANE the only thing left to do is to configure SANE. The EPSON backend uses a file epson.conf that is either located in /etc/sane.d or in /usr/local/etc/sane.d (or wherever you or your Linux distribution intalled SANE). Edit this file and make sure that the following line is the only information in the file:
usb /dev/usbscanner0

Replace the /dev/usbscanner0 with the actual device name used in the previous step.

SuSE Distribution and EPSON USB Scanners

Unfortunately SuSE has in neither their 6.3 nor the 6.4 version an USB stack that works with EPSON USB scanners. In 6.3 they used an old backport that had not yet scanner support, and in 6.4 they patched their kernel with the 2.3.47 backport, which has the EPSON incompatibility.

I came up with a quick fixe for at least SuSE 6.4: I patched their kernel and created just the module scanner.o that can be installed instead of the original module. This works at least… One serious drawback is the speed. When I scan on my 2.4.0-test2 system the speed with the Perfection610 is acceptable. If I use this modified module then the scanner is really slow. But at least you will be able to use the scanner at all.

So here’s what you do:

  • Download the scanner.o module and try to remember where you put it :-)
  • Log in as root user and go to the directory /lib/modules/2.2.14/misc
  • Stop the usb system by executing:
    /sbin/init.d/usb stop
  • Rename the original scanner.o module
    mv scanner.o scanner.o.SuSE
  • Copy the new module:
    cp /wherever/you/put/the/file/scanner.o ./scanner.o
  • Restart the usb system:
    /sbin/init.d/usb start

If the scanner module does not get loaded edit the file /etc/rc.config.d/usb.rc.config and add “scanner” to the module names in the USB_DRIVERS variable.

The SuSE system also requires that you update the /dev/usbscanner device file according the instructions from above.