mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
184 lines
6.4 KiB
184 lines
6.4 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
======================================== |
|
README for the SCSI media changer driver |
|
======================================== |
|
|
|
This is a driver for SCSI Medium Changer devices, which are listed |
|
with "Type: Medium Changer" in /proc/scsi/scsi. |
|
|
|
This is for *real* Jukeboxes. It is *not* supported to work with |
|
common small CD-ROM changers, neither one-lun-per-slot SCSI changers |
|
nor IDE drives. |
|
|
|
Userland tools available from here: |
|
http://linux.bytesex.org/misc/changer.html |
|
|
|
|
|
General Information |
|
------------------- |
|
|
|
First some words about how changers work: A changer has 2 (possibly |
|
more) SCSI ID's. One for the changer device which controls the robot, |
|
and one for the device which actually reads and writes the data. The |
|
later may be anything, a MOD, a CD-ROM, a tape or whatever. For the |
|
changer device this is a "don't care", he *only* shuffles around the |
|
media, nothing else. |
|
|
|
|
|
The SCSI changer model is complex, compared to - for example - IDE-CD |
|
changers. But it allows to handle nearly all possible cases. It knows |
|
4 different types of changer elements: |
|
|
|
=============== ================================================== |
|
media transport this one shuffles around the media, i.e. the |
|
transport arm. Also known as "picker". |
|
storage a slot which can hold a media. |
|
import/export the same as above, but is accessible from outside, |
|
i.e. there the operator (you !) can use this to |
|
fill in and remove media from the changer. |
|
Sometimes named "mailslot". |
|
data transfer this is the device which reads/writes, i.e. the |
|
CD-ROM / Tape / whatever drive. |
|
=============== ================================================== |
|
|
|
None of these is limited to one: A huge Jukebox could have slots for |
|
123 CD-ROM's, 5 CD-ROM readers (and therefore 6 SCSI ID's: the changer |
|
and each CD-ROM) and 2 transport arms. No problem to handle. |
|
|
|
|
|
How it is implemented |
|
--------------------- |
|
|
|
I implemented the driver as character device driver with a NetBSD-like |
|
ioctl interface. Just grabbed NetBSD's header file and one of the |
|
other linux SCSI device drivers as starting point. The interface |
|
should be source code compatible with NetBSD. So if there is any |
|
software (anybody knows ???) which supports a BSDish changer driver, |
|
it should work with this driver too. |
|
|
|
Over time a few more ioctls where added, volume tag support for example |
|
wasn't covered by the NetBSD ioctl API. |
|
|
|
|
|
Current State |
|
------------- |
|
|
|
Support for more than one transport arm is not implemented yet (and |
|
nobody asked for it so far...). |
|
|
|
I test and use the driver myself with a 35 slot cdrom jukebox from |
|
Grundig. I got some reports telling it works ok with tape autoloaders |
|
(Exabyte, HP and DEC). Some People use this driver with amanda. It |
|
works fine with small (11 slots) and a huge (4 MOs, 88 slots) |
|
magneto-optical Jukebox. Probably with lots of other changers too, most |
|
(but not all :-) people mail me only if it does *not* work... |
|
|
|
I don't have any device lists, neither black-list nor white-list. Thus |
|
it is quite useless to ask me whenever a specific device is supported or |
|
not. In theory every changer device which supports the SCSI-2 media |
|
changer command set should work out-of-the-box with this driver. If it |
|
doesn't, it is a bug. Either within the driver or within the firmware |
|
of the changer device. |
|
|
|
|
|
Using it |
|
-------- |
|
|
|
This is a character device with major number is 86, so use |
|
"mknod /dev/sch0 c 86 0" to create the special file for the driver. |
|
|
|
If the module finds the changer, it prints some messages about the |
|
device [ try "dmesg" if you don't see anything ] and should show up in |
|
/proc/devices. If not.... some changers use ID ? / LUN 0 for the |
|
device and ID ? / LUN 1 for the robot mechanism. But Linux does *not* |
|
look for LUNs other than 0 as default, because there are too many |
|
broken devices. So you can try: |
|
|
|
1) echo "scsi add-single-device 0 0 ID 1" > /proc/scsi/scsi |
|
(replace ID with the SCSI-ID of the device) |
|
2) boot the kernel with "max_scsi_luns=1" on the command line |
|
(append="max_scsi_luns=1" in lilo.conf should do the trick) |
|
|
|
|
|
Trouble? |
|
-------- |
|
|
|
If you insmod the driver with "insmod debug=1", it will be verbose and |
|
prints a lot of stuff to the syslog. Compiling the kernel with |
|
CONFIG_SCSI_CONSTANTS=y improves the quality of the error messages a lot |
|
because the kernel will translate the error codes into human-readable |
|
strings then. |
|
|
|
You can display these messages with the dmesg command (or check the |
|
logfiles). If you email me some question because of a problem with the |
|
driver, please include these messages. |
|
|
|
|
|
Insmod options |
|
-------------- |
|
|
|
debug=0/1 |
|
Enable debug messages (see above, default: 0). |
|
|
|
verbose=0/1 |
|
Be verbose (default: 1). |
|
|
|
init=0/1 |
|
Send INITIALIZE ELEMENT STATUS command to the changer |
|
at insmod time (default: 1). |
|
|
|
timeout_init=<seconds> |
|
timeout for the INITIALIZE ELEMENT STATUS command |
|
(default: 3600). |
|
|
|
timeout_move=<seconds> |
|
timeout for all other commands (default: 120). |
|
|
|
dt_id=<id1>,<id2>,... / dt_lun=<lun1>,<lun2>,... |
|
These two allow to specify the SCSI ID and LUN for the data |
|
transfer elements. You likely don't need this as the jukebox |
|
should provide this information. But some devices don't ... |
|
|
|
vendor_firsts=, vendor_counts=, vendor_labels= |
|
These insmod options can be used to tell the driver that there |
|
are some vendor-specific element types. Grundig for example |
|
does this. Some jukeboxes have a printer to label fresh burned |
|
CDs, which is addressed as element 0xc000 (type 5). To tell the |
|
driver about this vendor-specific element, use this:: |
|
|
|
$ insmod ch \ |
|
vendor_firsts=0xc000 \ |
|
vendor_counts=1 \ |
|
vendor_labels=printer |
|
|
|
All three insmod options accept up to four comma-separated |
|
values, this way you can configure the element types 5-8. |
|
You likely need the SCSI specs for the device in question to |
|
find the correct values as they are not covered by the SCSI-2 |
|
standard. |
|
|
|
|
|
Credits |
|
------- |
|
|
|
I wrote this driver using the famous mailing-patches-around-the-world |
|
method. With (more or less) help from: |
|
|
|
- Daniel Moehwald <[email protected]> |
|
- Dane Jasper <[email protected]> |
|
- R. Scott Bailey <[email protected]> |
|
- Jonathan Corbet <[email protected]> |
|
|
|
Special thanks go to |
|
|
|
- Martin Kuehne <[email protected]> |
|
|
|
for a old, second-hand (but full functional) cdrom jukebox which I use |
|
to develop/test driver and tools now. |
|
|
|
Have fun, |
|
|
|
Gerd |
|
|
|
Gerd Knorr <[email protected]>
|
|
|