home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Caldera Network Desktop 1.0
/
caldera-network-desktop-1.0.bin
/
doc
/
HOWTO
/
mini
/
CD-Writer
< prev
next >
Wrap
Text File
|
1995-01-18
|
9KB
|
217 lines
CD Writer mini-HOWTO
by Matt Cutts, cutts@ms.uky.edu
v0.2, 17 Dec 1994
1. Introduction
This is how I wrote a CD with Linux kernel v1.1.64, Philips CDD 521
(although outside label was "Kodak PCD Writer 200 PLUS"), and an
Adaptec 1542cf. Your mileage may vary; not responsible if this
causes your computer to explode; all trademarks are trademarks, etc.
In particular, cdwrite supposedly only works with Philips writers,
although to my knowledge no one has tested it on other writers.
The first part is complete reconstruction of the process that I
did to write a CD. After everything is done once, you need only
use mkisofs and cdwrite for each CD you write.
1.1. Feedback
This document describes my experience in getting a CD writer to work.
I may be able to answer some questions or comments about this test.
Please feel free to mail Matt Cutts, at cutts@ms.uky.edu. Let me know
if this document helped, or if some other section would be helpful.
Please point out any mistakes that you find as well.
2. The Process
Here's a chronological recreation of what I did. You may want to skip
the steps that resulted in kernel panics 8-). Note that much of this
process will require you to be super-user on the machine.
2.1. shut down computer; hook CD writer to computer; reboot
---> causes a kernel panic
2.2. upgrade to 1.1.64 kernel
---> still causes a kernel panic
2.3. change 1542CF settings
Mike McKenna (our local hardware guru) and I changed around quite
a few settings, so I'm going to do a complete list of them. One
of them fixed everything. I'm 90% sure that it was changing "Enable
Disconnection" to "no" for the SCSI ID# corresponding to the CD writer,
but I haven't written a CD since I've played with the settings.
Try changing that first; if that doesn't work, try changing some
of the other setting that I mentioned. When you boot, hit <Ctrl><A>
to get into the SCSI-Select utility. Go into "Configure/View Host
Adapter Settings". Here are my working settings when I wrote the CD:
Host Adapter IRQ Channel -> 11
Host Adapter DMA Channel -> 5
Host Adapter SCSI ID -> 7
[BIOS Revision: 2.02; Base Address: DC000h; Firmware: Rev. B.0;
Checksum: A223h]
(these should be irrelevant to you; DO NOT change the settings above)
SCSI Parity Checking Enabled
DMA Transfer Rate 5.0 MB/sec
Host Adapter SCSI Termination Enabled
SCSI Device Configuration
(note hard drive = #0, writer = #1, 1542 = #7)
#0 #1 #2 #3 #4 #5 #6 #7
Enable Sync Negotiation no no no no no no no no
Enable FAST SCSI no no no no no no no no
Enable Disconnection yes no yes yes yes yes yes yes
Send Start Unit Command no yes no no no no no no
*(default is all yes for Enable Disconnection and all no for Send Start
Unit Command)
Advanced Configuration Options
Floppy Controller I/O Port (AHA-1542CF only) 3F0h-3F7h
Reset SCSI Bus at Power-On Enabled
Host Adapter BIOS (Configuration Utility Reserves BIOS Space) Enabled
System Boot (INT 19h) Controlled by Host Adapter BIOS Enabled
Extended BIOS Translation for DOS Drives > 1 GByte Disabled
*Support Removable Disks Under BIOS as Fixed Disks Enabled
Dynamically Scan SCSI Bus for BIOS Devices Disabled
BIOS Support for More Than 2 Drives (MS-DOS(R) 5.0 and above) Disabled
Immediate Return On Seek Command Enabled
Display <Ctrl><A> Message During BIOS Initialization Enabled
*BIOS Support for Floptical Drives Enabled
Items with an asterisk are different from the default. Sorry to
dump this whole options list for those who don't need it, but I
figured a few SCSI novices might appreciate it. REMEMBER: I think
that the only needed change is Enable Disconnection for the ID# of
your CD Writer. Make it "no" instead of "yes".
The result:
no panic; recognizes as CDROM drive (sr0); SCSI generic driver doesn't
say anything either way, so couldn't tell if recognized
2.4. use mkisofs to produce binary image (I used mkisofs v1.00)
e.g. "mkisofs -o /home/cd.image /home/dir_to_archive"
[I used mkisofs1.00, from tsx-11.mit.edu, at
/pub/linux/BETA/cdrom/mkisofs-1.00.tar.gz; version 1.01 is also
available and would probably work even better]. Can also get
iso9660-diagnose.tar.gz from the same directory, which is another
cdrom tool (I haven't tried it). See mkisofs usage in section 3.
2.5. make SCSI generic devices
e.g. "/dev/MAKEDEV sg" (will create sga -> sgh; generic devices
are allocated/assigned at boot time).
2.6. realize that the SCSI generic driver isn't reading things correctly.
Joseph Julicher at Rose-Hulman suggested a kernel hack to
process the SCSI inquiry byte (it needs a bitwise and with 0x1f). I also
changed the TYPE_WORM drive to be writeable; not sure that this is
required for things to function correctly. In fact, I made everything
writable (tacky, but effective!).
The original /usr/src/{linux-1.1.64/}linux/drivers/scsi/scsi.c
(beginning around line 361)
switch (type = scsi_result[0])
{
case TYPE_TAPE :
case TYPE_DISK :
case TYPE_MOD :
SDpnt->writeable = 1;
break;
case TYPE_WORM :
case TYPE_ROM :
SDpnt->writeable = 0;
break;
default :
I changed it to:
switch (type = scsi_result[0] & 0x1f)
{
case TYPE_TAPE :
case TYPE_DISK :
case TYPE_MOD :
case TYPE_WORM :
case TYPE_ROM : /* probably shouldn't be writeable :) */
SDpnt->writeable = 1;
break;
default :
2.7. fix cdwrite (version that I changed was v1.3)
[I obtained cdwrite from tsx-11.mit.edu, at
/pub/linux/BETA/cdrom/private/mkisofs/cdwrite-1.3.tar.gz]
original program had following code (beginning around line 439):
set_timeout(fd, timeout);
/* First make sure we know how to talk to this writer */
inquiry (fd, &reply_len, &reply, &manufacturer[0], &model[0]);
if(strcmp(manufacturer,"PHILLIPS")) {
I changed program to following:
(added the next two lines near the top)
/* new #define from drivers/scsi/scsi.h; orig program had this defined */
#define SG_SET_TIMEOUT 0x2201
(Following code replaced orig. code around line 439)
/* set_timeout(fd, timeout);*/
if (ioctl(fd, SG_SET_TIMEOUT, SG_SET_TIMEOUT, &timeout) < 0) {
perror ("ioctl SG_SET_TIMEOUT");
exit(5);
}
/* First make sure we know how to talk to this writer */
inquiry (fd, &reply_len, &reply, &manufacturer[0], &model[0]);
if(strcmp(manufacturer,"IMS")) {
Note that the Philips CDD 521 returns "IMS" as its manufacturer, and that
I used modified the newer program to set the timeout as the original
program did. When you untar cdwrite, the original program is in the "orig"
directory.
2.8. recompile kernel and reboot for change to take effect
Make sure to say yes to SCSI generic support, or else the generic driver
won't be included in the kernel. You must reboot for the new kernel to
replace the currently running one.
2.9. write a CD!
e.g. "cdwrite /dev/sgb < /home/cd.image"
Note that sgb was the CD writer, i.e. SCSI generic device b (because the
hard drive was generic device a), and that /home/cd.image is an ISO9660
image produced by mkisofs.
3. After the First Time
That should take you through the process of getting ready to write one
CD. After that things are trivially easy. Make sure you have plenty o'
space on your disk. Then just do "mkisofs -o filename path", where path
is the path of the directory tree to be copied into ISO9660 format, and
filename is the name of the resulting binary image. The mkisofs program
has lots of other great options (like Rock Ridge extensions); check out
the man page that Eric Youngdale included for his program. Next, do
"cdwrite scsi_device < cdrom_file", where scsi_device is the generic
SCSI device and cdrom_file is the ISO9660 image. The cdwrite program also
has a few options, like -speed (to write single/double speed) and -dummy
(to test everything without actually writing the disk). Check the cdwrite.c
program to see the options it has.
4. Thank you
Thanks to all the people who wrote with suggestions for my problems; thanks
also to Eric Youngdale for the mkisofs code, Adam Richter for the original
cdwrite program, Joseph Julicher for noticing the SCSI generic problem,
Mike McKenna for figuring out the 1542 settings, and my employers for
paying me to explore with a neat toy.