To allow the BIOS to boot from a CDROM, an extension to the ISO-9660 specification called El Torito was written in 1995 by Phoenix Technologies and IBM. This specification uses the existing ISO-9660 definitions and will cause the BIOS to boot a disk image using a floppy or hard disk emulation.
The ISO-9660 standard specifies that a CDROM should contain any number of Volume Descriptors. The El Torito specification adds such a descriptor called a Boot Record.
The Boot Record points to a Boot Catalog which can contain a list of boot entries. The boot catalog contains a default entry which points to a floppy or hard disk boot image.

The mkisofs tool can take a boot image
(floppy or hard disk) and add the image in the root directory of the
CDROM (usually boot/).
Assuming we are creating the CD in a directory called
CD-root, we can create the bootable disk image with
dd.
dd if=/path/to/boot/image of=CD-root/boot/boot.img
The iso-image is then created with the following command:
mkisofs -b boot/boot.img -c boot/boot.catalog -o boot-cd.iso .
It is possible to make a bootable CD using the ISOLINUX bootloader.
ISOLINUX is a boot loader for Linux/i386 that operates off ISO 9660/El Torito CD-ROMs in "no emulation" mode. This avoids the need to create an "emulation disk image" with limited space (for "floppy emulation") or compatibility problems (for "hard disk emulation".)
The syslinux package will install the
isolinux.bin bootloader. Depending on
the distribution this can be found in /usr/lib/syslinux/
or /usr/share/syslinux/.
You next need to create a bootable CD.
Make a directory in /tmp
mkdir /tmp/boot-cd
Copy the files needed
cp /usr/share/syslinux/isolinux.bin /tmp/boot-cd cp /boot/vmlinuz-full-version/tmp/boot-cd/vmlinuz cp /boot/initrd-full-version.img /tmp/boot-cd/initrd
Edit the /tmp/boot-cd/isolinux.cfg file with
the following content:
DEFAULT linux LABEL linux KERNEL vmlinuz APPEND initrd=initrd root=/dev/???
Create the isoimage with the -no-emul-boot option
cd /tmp/boot-cd/ mkisofs -o ../boot-cd.iso -b isolinux.bin -c boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table ./
In this section we assume that we already have a bootable CDROM. For example the first disk of a boxed Linux distribution.
Put the bootable CD into the CDROM tray. Do not mount the disk!
Then simply type:
dd if=/dev/cdrom of=distro-inst1.iso
This will create an iso-image of the disk called
distro-inst1.iso and
can be written to a blank disk with cdrecord.