Follow the manufacturer's instructions for installing the hardware or have your dealer perform the installation. The details will vary depending on whether the drive is internal or external and on the type of interface used. There are no special installation requirements for Linux. You may need to set jumpers on the drive and/or interface card for correct operation; some of the kernel drivers include documentation files that include this information.

As explained in the file ide-cd, ATAPI CD-ROMS should be jumpered as "single" or "master", and not "slave" when only one IDE device is attached to an interface (although this restriction is no longer enforced with recent kernels).

When initially installing Linux from CD-ROM you will likely be using a boot and/or root disk provided as part of a Linux distribution. If possible, you should choose a boot disk with the kernel driver for your CD-ROM device type. If you cannot find a boot disk with the necessary CD-ROM driver, you have several options:

Find someone who can build you a boot disk with the needed CD-ROM driver

The Linux Installation HOWTO has more information on installing Linux. If you purchased Linux on CD-ROM, it likely also came with some installation instructions (that little booklet inside the jewel case, and/or files on the CD).

Once Linux has initially been installed, most users will want to compile their own kernel, usually for one of these reasons:

to support a CD-ROM drive or other hardware

to upgrade to a newer kernel release

to free up memory resources by minimizing the size of the kernel

The Linux Kernel HOWTO should be consulted for the details of building a kernel. I will just mention here some issues that are specific to CD-ROM drives.

Obviously, you need to compile in support for your CD-ROM drive when you configure the kernel.

If you have an ATAPI CD-ROM drive, you need to enable Enhanced IDE/MFM/RLL disk/cdrom/tape support and Include IDE/ATAPI CDROM support.

For proprietary interface CD-ROM drives, enable the appropriate driver. You can use the table listed previously to determine the driver to use for your model.

Virtually all CD-ROMs use the ISO-9660 file system, so you must also enable ISO 9660 CDROM filesystem support.

Although not needed for CD-ROM operation, if you have a sound card that is supported under Linux you might want to enable and configure the kernel sound driver at this time as well. The Sound HOWTO can be a useful reference here.

You should then follow the usual procedure for building the kernel and installing it. Don't boot with the new kernel until you create the device files and set up any boot time parameters as described in the next section.

The ISO-9660 filesystem and almost all of the CD-ROM drivers can be built as loadable kernel modules. This scheme allows the kernel drivers to be loaded and unloaded without rebooting the kernel, freeing up memory. I recommend you get your CD-ROM installation running using compiled-in drivers first. How to use modules is described in the modules documentation and the Kernel HOWTO.

If a drive type listed here is not supported by your kernel, you likely need to upgrade to a newer version.

It is possible that you need to use a driver that is distributed separately from the kernel source code. This usually involves patching the kernel. Again, the Kernel HOWTO explains how to do this.

Note that you can configure the kernel using the text-based program using "make config", a menu-based kernel configuration program invoked by "make menuconfig" and an X11-based graphical configuration invoked as "make xconfig". All three configuration methods offer on-line help.

The kernel uses device files to identify which device driver to use. If you are running a standard Linux distribution you may have created the necessary device files during installation. Under Slackware Linux, for example, there is a menu-based setup tool that includes CD-ROM setup, and most systems have a /dev/MAKEDEV script. If you don't use these methods, you can use the more manual procedure listed in this section. Even if you use either of these methods, it is recommended that you at least verify the device files against the information in this section.

If you are using the new devfs file system in the 2.4 kernels, the device files are created dynamically by the kernel rather than residing on disk, and follow a different naming convention. The examples in this document assume that devfs is not being used, and may need to be adjusted accordingly if you are.

You create the device file by running the shell commands indicated for your drive type. This should be done as user root. Note that some Linux distributions may use slightly different CD-ROM device names from those listed here.

I recommended that you also create a symbolic link to the CD-ROM device to make it easier to remember. For example, for an IDE CD-ROM drive that is the second device on the secondary interface, the link would be created using

# ln -s /dev/hdd /dev/cdrom

If you want to play audio CDs, you will need to set the protection on the device file (the real file, not the symbolic link to it) to allow all users to read, e.g.

Some Linux distributions use group permissions to control access to devices such as CD-ROMs. A common convention is to only allow members of a group called cdrom to have access. In this case you should add the appropriate users to the group rather than changing file permissions on the device file.

When booting Linux, the device drivers attempt to determine whether the appropriate devices are present, typically by probing specific addresses. Many of the drivers auto-probe at several addresses, but because of differences in configuration, possible device conflicts, and hardware limitations, the drivers sometimes need help identifying the addresses and other parameters. Most drivers support an option on the kernel command line to pass this information to the device driver. This can be done interactively, or more commonly, configured into your boot loader. With LILO, for example, you would add an append command such as the following to your /etc/lilo.conf file:

append = "sbpcd=0x230,SoundBlaster"

See the LILO documentation for more information.

In the next section I discuss issues specific to individual device drivers, including device files, boot parameters, and the capabilities of the different drivers. You probably only need to read the section relevant to your drive type. The documentation files are usually found in the directory /usr/src/linux/Documentation/cdrom.

where the first parameter is the base address of the device (e.g. 0x230), and <interface-type> is one of "SoundBlaster", "LaserMate", or "SPEA". See the file sbpcd.h for hints on what interface type to use. Using sbpcd=0 disables auto-probing, disabling the driver.

The device file can be created using:

# mknod /dev/sbpcd b 25 0

Up to four drives per controller are supported. The next three drives on the first controller would use minor device numbers 1 through 3. If you have more than one controller, create devices with major numbers 26, 27, and 28, up to a maximum of 4 controllers (this is 16 CD-ROM drives in total; hopefully enough for most users :-).

See the file sbpcd for more information on this driver.

If you recently bought a CD-ROM drive, don't assume that if it connects to a SoundBlaster card it should use this kernel driver. Most CD-ROM drives being sold by Creative Labs are now EIDE/ATAPI drives.

The first number is the I/O base address of the card (e.g. 0x340). The second is the interrupt number to use (0 means to use polled i/o). The optional third parameter should be "PAS" if the drive is connected to a Pro-Audio Spectrum 16 sound card, otherwise left blank.

If the driver is loaded as a module, it uses a slightly different format. When loading the driver using the modprobe or insmod command, the parameters take the form:

cdu31a_port=<io-address> cdu31a_irq=<interrupt>

The base io-address is required while the interrupt number is optional.

This is the driver for various types of storage devices that attach to a parallel port. Normally the driver will auto-detect the parallel port device. The documentation describes parameters that can be used to specify the device parameters if auto-detection does not work.

The device file for the first drive can be created using:

# mknod /dev/pcd0 b 46 0

See the file /usr/src/linux/Documentation/paride.xt for more information on this driver. Note that this replaces the bpcd driver that was present in older kernels.

There are kernel command line option specific to each type of SCSI controller. See the SCSI HOWTO for more information.

Multiple drives are supported (up to the limit of the maximum number of devices on the SCSI bus). Create device files with major number 11 and minor numbers starting at zero:

# mknod /dev/scd0 b 11 0
# mknod /dev/scd1 b 11 1

While the kernel driver itself does not support reading digital audio frames, some SCSI drives have the capability and will work with the cdda2wav program (which uses the generic SCSI kernel interface).

Also see the discussion of the IDE SCSI emulation driver earlier in this document.

This is the driver for ATAPI CD-ROMS. The driver accepts a kernel command line of the form

hdx=cyls,heads,sects,wpcom,irq
or
hdx=cdrom

where hdx can be any of {hda,hdb,hdc,hdd}, or simply hd, for the "next" drive in sequence. Only the first three parameters are required (cyls,heads,sects). For example hdc=1050,32,64 hdd=cdrom.

Getting the IDE driver to recognize your CD-ROM drive can be tricky, especially if you have more than 2 devices or more than one IDE controller. Usually all that is required is to pass the right command line options from LILO. The file /usr/src/linux/Documentation/cdrom/ide-cd explains how to do this. Read it carefully.

Recent Linux kernels have better support for multiple IDE devices. If you have problems with an older kernel, upgrading may help.

Some IDE controllers have hardware problems which the kernel driver can work around. You may need to pass additional parameters to the driver to enable this. See the documentation for details.

To mount a CD-ROM, insert a disc in the drive, and run the mount command as root (this assumes you created a symbolic link to your device file as recommended above and that an empty directory /mnt/cdrom exists):

# mount -t iso9660 -r /dev/cdrom /mnt/cdrom

The CD can now be accessed under the directory /mnt/cdrom.

There are other options to the mount command that you may wish to use; see the mount(8) man page for details.

You can add an entry to /etc/fstab to automatically mount a CD-ROM when Linux boots or to specify parameters to use when it is mounted; see the fstab(5) man page.

Note that to play audio CDs you should not try to mount them.

To unmount a CD-ROM, use the umount command as root:

# umount /mnt/cdrom

The disc can only be unmounted if no processes are currently accessing the drive (including having their default directory set to the mounted drive). You can then eject the disc. Most drives have an eject button; there is also a standalone eject program that allows ejecting CD-ROMs under software control.

Note that you should not eject a disc while it is mounted (this may or may not be possible depending on the type of drive). Some CD-ROM drivers can automatically eject a CD-ROM when it is unmounted and insert the CD tray when a disc is mounted (you can turn this feature off when compiling the kernel or by using a software command).

Its possible that after playing an audio CD you may not be able to mount a CD-ROM. You need to send a CD audio "stop" command (using a CD player program) before trying the mount. This problem only appears to occur with the SBPCD driver.

If you still encounter problems after following the instructions in the HOWTO, here are some things to check. The checks are listed in increasing order of complexity. If a check fails, solve the problem before moving to the next stage.

If the date stamp doesn't match when you compiled the kernel, then you are running an old kernel. Did you remember to reboot? If you use LILO, did you re-install it (typically by running /sbin/lilo)? If booting from floppy, did you create a new boot floppy and use it when booting?

First look for your CD-ROM device driver. These are all block devices, in this case we can see that the idecd driver with major number 22 was present.

Also make sure that ISO-9660 filesystem support was compiled in, by looking at /proc/filesystems:

% cat /proc/filesystems
ext2
nodev proc
nodev devpts
vfat
iso9660

You can also see what i/o port addresses are being used by a driver with the file /proc/ioports:

howto % cat /proc/ioports
...
0230-0233 : sbpcd
...

If any of the drivers you thought you compiled in are not displayed, then something went wrong with the kernel configuration or build. Start the installation process again, beginning with configuration and building of the kernel.

Make sure that the CD-ROM device was detected when the kernel booted. You should have seen a message on bootup. If the messages scrolled off the screen, you can usually recall them using the dmesg command:

% dmesg

or

% tail /var/log/messages

If your drive was not found then something is wrong. Make sure it is powered on and all cables are connected. If your drive has hardware jumpers for addressing, check that they are set correctly (e.g. drive 0 if you have only one drive). ATAPI CD-ROMS must be jumpered as "single" or "master", and not "slave" when only one IDE device is attached to an interface. If the drive works under DOS then you can be reasonably confident that the hardware is working.

Many kernel drivers using auto-probing, but some do not, and in any case the probing is not always reliable. Use the kernel command line option listed for your kernel driver type. You may want to try several different values if you are not sure of the i/o address or other parameters. LILO can be (and usually is) configured to allow you to enter the parameters manually when booting.

Another possibility is that you used the wrong kernel driver for your CD-ROM driver. Some documentation may refer to proprietary interfaces as IDE, leading some to mistakenly believe they are ATAPI drives.

Another possibility is that your drive (or interface card) is one of the "compatible" type that requires initialization by the DOS driver. Try booting DOS and loading the vendor supplied DOS device driver. Then soft boot Linux using Control-Alt-Delete.

If your drive is not listed in this document, it is possible that there are no drivers for it available under Linux. You can check with some of the references listed at the end of this document for assistance.

Try reading from the CD-ROM drive. Typing the following command should cause the drive activity light (if present) to come on and no errors should be reported. Use whatever device file is appropriate for your drive and make sure a CD-ROM is inserted; use Control-C to exit.

If this works, then the kernel is communicating with the drive and you can move on to step 5.

If not, then a possible cause is the device file. Make sure than the device file in the /dev directory has the correct major and minor numbers as listed previously for your drive type. Check that the permissions on the device file allow reading and writing.

A remote possibility is a hardware problem. Try testing the drive under another operating system, if possible, to determine if this could be the case.

If the drive works with CD-ROMs, but not for playing audio CDs, here are some possible solutions.

You need an application program to play audio CDs. Some applications may be broken or may not be compatible with your drive. Try other applications and/or try recompiling them yourself. A good place to look for software is ftp://www.ibiblio.org/pub/Linux/apps/sound/cdrom/.

A few of the CD-ROM drivers do not support playing Audio CDs. Check the documentation file or source code to see if that is the case.

Check if the audio can be played through the headphone jack. If so, then the problem is likely related to your sound card. Use a mixer program to set the input device and volume levels. Make sure you have installed an audio cable from the CD-ROM drive to the sound card. Make sure that the kernel sound card driver is installed and working (see the Sound HOWTO).