[sane-devel] Why cant the Snapscan drv load the firmware automatically ?
Oliver Schwartz
Oliver.Schwartz at gmx.de
Thu Jul 26 22:17:21 BST 2001
Hi,
> Is there a reason why this shall be done "by hand" ?
The driver has little to no means to find out if the firmware has been
downloaded before. To be on the safe side, it would have to be downloaded
before every scan. This is clearly not desirable.
However, there are other, more capable tools that already exist for that
task. Those tools run as a daemon and monitor the USB bus directly.
Since I've been planning to write up some instructions for an automatic
firmware download I might as well do it here and now:
- Get the 'usbmgr' tool (it's allready included in SuSE distributions, don't
know about others). If you don't have it: It's available from
http://www.wondernetworkresources.com/staff/shuu/linux/usbmgr/
The following assumes that you compiled usbmgr for configuration files in
/etc/usbmgr and that usbmgr is up and running (the best idea is to run it at
system startup).
- Write a shell script named 'firmware' and place it in /etc/usbmgr (don't
forget to make it executable with chmod +x):
--- snip ---
#!/bin/sh
if [ "$ACTION" == "add" ]; then
/usr/local/bin/acerfirm /usr/local/etc/acer/u64v120.bin
fi
--- snip ---
You may have to adjust the path to acerfirm and your firmware file. In older
versions of usbmgr you have to test $1 for "start" instead of "add" in
$ACTION - consult the documentation of usbmgr for details.
- Next, find out the vendor and product ID of your scanner. Do a
'cat /proc/bus/usb' - you should find some lines similar to the ones below
P: Vendor=04a5 ProdID=2040 Rev= 1.00
S: Manufacturer=Color
S: Product= FlatbedScanner 13
Now usbmgr has to be configured to execute the script 'firmware' if your
scanner device is plugged onto the USB bus. This is done by creating a file
named 'script' containing the name of the firmware script. The 'script' file
has to be placed in a directory made up from your vendor / product id:
echo "firmware" > /etc/usbmgr/vendor/#VENDOR_ID#/#PRODUCT_ID#/script
You have to replace #VENDOR_ID# and #PRODUCT_ID# by the ids of your scanner -
just use the hex notation as given in /proc/bus/usb/devices (e.g. in my case
it's /etc/usbmgr/vendor/04a5/2040/script).
That's it - usbmgr will now download the firmware as soon as you switch on
your scanner or plug it to the USB port.
If it doesn't work immediately take a look at your syslog files (usally
/var/log/messages)
Additionally you may configure usbmgr to load the 'scanner' kernel module -
it's basically a file with contents 'scanner' at
/etc/usbmgr/vendor/#VENDOR_ID#/#PRODUCT_ID#/module.
Good luck,
Oliver
More information about the sane-devel
mailing list