CDRTOOLS = cdrecord + cdda2wav + mkisofs

Document last updated : 07/19/1999

Prepared by Michael Brinke-Engel (mikebren@sco.com) and Ronald Joe Record (rr@ronrecord.com)


Table of contents

Introduction

What are the CDRTOOLS?
What is available for SCO Operating Systems?

Configuration

CD-Writer Configuration
ATAPI - Writers
Necessary Patches
Known limitations
How to access the cdwriter?
Default values and /etc/default/cdrecord

Usage

To backup data to your CD Recorder
Supported drives for cdrtools

Building

Compilation platforms
Source code changes

Related Links

Introduction

What are the CDRTOOLS ?

The CDRTOOLS are a set of programs which allow the creation of CD images (mkisofs), extraction of digital audio from audio CD's (cdda2wav) and burning of any kind of data to recordable / rewritable CD's (cdrecord), known to work with a wide variety of todays available CD-Writers / CD-Rewritables on allmost 20 different operating systems.

Program Author Copyright
cdrecord Jörg Schilling (schilling@fokus.gmd.de) © Jörg Schilling
cdda2wav Heiko Eißfeldt (heiko@colossus.escape.de) © Heiko Eißfeldt
mkisofs Eric Youngdale (ericy@gnu.ai.mit.edu) © Yggdrasil Computing, Incorporated




Status of CDRTOOLS for SCO Operating Systems

The latest available binary distribution for both SCO OpenServer and UnixWare are the compiled binaries from the "cdrecord-1.8a23.tar.gz" source package consisting of:

For change history please see the AN-1.8a* files at Jörg Schilling's FTP site

Platform SCSI Writer ATAPI Writer
SCO OpenServer 5.0.0 unsupported (no SCSIUSERCMD2) -
SCO OpenServer 5.0.2 unsupported (no SCSIUSERCMD2) -
SCO OpenServer 5.0.4 fully working -
SCO OpenServer 5.0.5 fully working -
SCO UnixWare 2.1.3 fully working, PTF needed -
UnixWare 7.0.1 fully working, PTF needed -
UnixWare 7.1 fully working -

Configuration

CD-Writer Configuration

While on UnixWare your cdwriter will be autodetected/autoconfigured, you need to manually configure your cdwriter on SCO OpenServer, if you have not already used the cdwriter to install your OS.

To add the cdwriter as an additional device on SCO OpenServer you need to run the mkdev cdrom command to add the device just the same way you would normally add any additional cd-rom.

ATAPI - Writers

ATAPI writers are currently unsupported as we need some enhancements in the IDE drivers necessary to handle the SENSE data from the ATAPI writers the same way as with SCSI writers.

Necessary Patches for UnixWare 2.1.X / UnixWare 7.0.X

If you want to use cdrecord/cdda2wav on SCO UnixWare 2.1.X / UnixWare 7.0.X you need to install one of the following PTF's depending on your installed scsi controller which controls your writer:

Driver PTF required
c8xx ptf7047
qlc1020 ptf7048 - only UnixWare 7.0.1
adsl ptf7049
adsb ptf7062
dak ptf7063

These PTF's are necessary to overcome the limit of 512 bytes per logical block in any scsi passthrough command on these controllers. Please make sure that you don't override these PTF's with any vendor supplied hba unless you know that the 512 byte limit is also fixed with the new vendor supplied driver.

The PTF's are freely available via anonymous ftp to ftp.sco.com in ftp://ftp.sco.com/SLS/.

The above controllers are known to have this limitation, but - this does not imply that there is no other hba showing the same limitation.

!!! These PTF's are not necessary when using UnixWare 7.1 !!!

Known limitations

Although cdrecord allows the creation of multisession CD-R's, accessing multisession CD's is not fully supported on both platforms, UnixWare and OpenServer. You will only be able to access the first session.

How to address the cdwriter

The standard LINUX (or Solaris) device addressing method does not work on UnixWare & OpenServer as we don't have a generic scsi driver. That's also the reason why the -scanbus option of cdrecord does not work. The current implementation of the -scanbus option of cdrecord is bound to the existence of the /dev/scg driver.

As OpenServer and UnixWare don't have this /dev/scg generic scsi driver, we use the cdrom target drivers (Srom on OpenServer and SC01 on UnixWare) to access the CD-Writers devices (all cdwriters are in general enhanced cd-rom devices).

This therefore changes the idea of specifying the device parameters from

        dev=bus, id, lun                     (Linux, Solaris etc.)
to be
        dev=number-of-cd-device, id, lun     (OpenServer, UnixWare)

These target drivers (Srom, SC01) allow cd-rom devices to be opened. These devices are:
On OpenServer:

        /dev/rcd0, /etc/rcd1 ... (enumeration starts with 0)
and on UnixWare:
        /dev/rcdrom/cdrom1, /dev/rcdrom/cdrom2 .... (enumeration starts with 1)

This gives us the following two methods to access the cdwriters:

Method 1

     cdrecord dev=X,Y,Z ... with

     X = the number of the cdrom device

         For OpenServer this is:

          0   for /dev/rcd0,
          1   for /dev/rcd1 etc.

         For UnixWare this is:

          1   for /dev/rcdrom/cdrom1,
          2   for /dev/rcdrom/cdrom2 etc.

     Y = the scsi id

           due to the fact of using the special device node for
           the scsi passthru, it does not matter at all what id
           we give to cdrecord, as only the number of the cdrom
           device is used to open the device node

           Remember, we don't have a generic scsi driver interface!


     Z = the lun

           Again, the same applies to the lun as to the id!


     Example for OpenServer:

    	# cdrecord dev=0,6,0 ...

     will use the first cd-rom device as the writer with ID 6, Lun 0

     and for UnixWare:

        # cdrecord dev=1,4,0 ...

     will use the first cd-rom device as the writer with ID 4, Lun 0

Method 2

     cdrecord dev=dev_node:Y,Z ... with

     dev_node = the special device node of the cdrom device

         For OpenServer this is:

          /dev/rcd0,
          /dev/rcd1 etc.

         For UnixWare this is:

          /dev/rcdrom/cdrom1,
          /dev/rcdrom/cdrom2 etc.

     Y = the scsi id

           due to the fact of using the special device node for
           the scsi passthru, it does not matter at all what id
           we give to cdrecord, as only the device node is used
	   to do the open

           Remember, we don't have a generic scsi driver interface!


     Z = the lun

           Again, the same applies to the lun as to the id!


     Example for OpenServer:

    	# cdrecord dev=/dev/rcd1:6,0 ...

     will use the /dev/rcd1 device as the writer

     and for UnixWare:

        # cdrecord dev=/dev/rcdrom/cdrom1:4,0 ...

     will use the /dev/rcdrom/cdrom1 device as the writer

Either of the two methods can be used to specify the device on the command line and in the /etc/default/cdrecord file.


Default values and /etc/default/cdrecord

Default values can be set for the following options in /etc/default/cdrecord.

CDR_DEVICE

This may either hold a device identifier that is suitable to the open call of the SCSI transport library or a label in the file /etc/default/cdrecord that identifies a specific drive on the system.

CDR_SPEED

Sets the default speed value for writing (see also -speed option).

CDR_FIFOSIZE

Sets the default size of the FIFO (see also fs=# option).

IDENTIFIER

Any other label is an identifier for a specific drive on the system. Such an identifier may not contain the characters ',', '/', '@' or ':'. Each line that follows a label contains a TAB separated list of items. Currently, three items are recognized: the SCSI ID of the drive, the default speed that should be used for this drive and the default FIFO size that should be used for this drive. The values for speed and fifosize may be set to -1 to tell cdrecord to use the global defaults. Typical lines on OpenServer may look like this:

	teac1=0,5,0	4	8m
	teac2=1,6,0	-1	-1

This tells cdrecord that a drive named teac1 is configured as device 0 (/dev/rcd0) , target 5, lun 0 and should be used with speed 4 and a FIFO size of 8 MB. A second drive, named teac2, may be found as device 1 (/dev/rcd1), target 6, lun 0 and uses the default speed and the default FIFO size.

Example /etc/default/cdrecord

# ------------------------------------------------------
# default device and speed and fifo size
# ------------------------------------------------------

CDR_DEVICE=/dev/rcd1:4,0
CDR_SPEED=6
CDR_FIFOSIZE=8m

# ------------------------------------------------------
# Identifier for TEAC CDR56S
# ------------------------------------------------------

teac=1,4,0	6	8m

# ------------------------------------------------------
# Identifier for Yamaha CDRW4416S
# ------------------------------------------------------

cdrw=2,6,0	4	8m

Usage

To backup data to your CD Recorder

  1. Load the CDRTOOLS applications from the Open License Software Supplement (SkunkWare) CD or the downloaded package from the Skunkware web site.
  2. You must first create an image that will be burned to the CDR/CDRW.
  3. Make ISO File System listed below takes everything in and below your working directory and creates the image file /tmp/outfile. You can take a look at the mkisofs options to see what these actually do, but they work.
       mkisofs -L -l -v -r -o /tmp/outfile .
    
    note you will have one additional file called rr_moved which is an empty directory. The -r keeps anything from being written into that directory.

  4. To record to the CDR/CDRW run cdrecord like this:
  5.    cdrecord -v dev=/dev/rcdrom/cdrom2:5,0 /tmp/outfile speed=4
    
    To know what device address your writer needs, see the above "How to address the cdwriter"

  6. To mount your newly created CD in the writer you will neet a mount point
  7.    mkdir /cdrw
    
    The CDR/CDRW requires the -r command (and the -F cdfs option on UnixWare).
       mount -r -F cdfs /dev/cdrom/cdrom2 /cdrw
    



Supported drives for cdrtools

As Jörg Schillings list of supported drives is quite impressive, you might look it up directly here

We have tested these drives on SCO platforms:



Porting and Build Notes

Compilation platforms

OpenServer UnixWare

Source code changes

All below changes are necessary for the current version (1.8a23) on UnixWare as Jörg has not yet fully incorporated all SCO changes to compile the standard distribution out of the box.

Jörg wants to check another way of implementing the necessary changes to compile on UnixWare in order to avoid special handling of cdrecord common source (see issue 1).

  1. trouble with #defines on SCO UnixWare 2.1.X / UnixWare 7:
  2. ./libscg/scg/scgcmd.h
    <=      line 254:
            #ifndef UNIXWARE
            #define SC_PARITY
            #endif
    
            line 402:
            #ifndef UNIXWARE
            #define scb  u_scb.Scb
            #endif
    
    ./libscg/scsitransp.c
            <=      global replacement ?
            scb -> u_scb.Scb
    
    ./cdrecord/scsi_cdr.c
            <=      global replacement ?
            scb -> u_scb.Scb
    

  3. New autoconf file:
  4. ./conf/config.guess <= modified (-> UnixWare 7)

    Related Links

    You can find lots of interesting links related to CD and Recording on Jörg Schillings Webserver

    End of Document