home *** CD-ROM | disk | FTP | other *** search
- 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.
-
-