User:Scdbackup: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
Content deleted Content added
No edit summary
New sub section "Hybrid Setup for BIOS and EFI from CD/DVD and USB stick"
Line 134: Line 134:


=== Hybrid Setup for BIOS and EFI from CD/DVD and USB stick ===
=== Hybrid Setup for BIOS and EFI from CD/DVD and USB stick ===
The EL Torito Boot Catalog can offer in the same ISO filesystem
alternative boot images for PC-[[BIOS]] and for [[EFI]].

But El Torito is interpreted by the firmware only if presented on
an optical medium: CD, DVD, BD. For booting PC-BIOS or EFI from
USB stick or other hard-disk-like devices, there is need for an
[[MBR]] and a [[GPT]].
Both can be stored in the System Area of the ISO 9660 filesystem.
Combining them is a matter of slightly tweaking the GPT specs.

The GPT just has to point to the FAT filesystem image that is
also pointed to by the EFI entry in the El Torito Boot Catalog.

The MBR should mark in its partition table the range of the ISO
image. It might be helpful or not, to also mark the FAT image
for EFI in the partition table of the MBR.
The MBR of SYSLINUX can be adjusted to jump with its execution
onto the El Torito boot image of ISOLINUX. This is known as "isohybrid".

Debian used for its installation image debian-7.1.0-amd64-netinst.iso
the following options of xorriso's mkisofs emulation:

<Source lang=bash>
xorriso -as mkisofs \
... \
-c isolinux/boot.cat \
-b isolinux/isolinux.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-isohybrid-mbr ./syslinux/usr/lib/syslinux/isohdpfx.bin \
-eltorito-alt-boot \
-e boot/grub/efi.img \
-no-emul-boot -isohybrid-gpt-basdat \
... \
./boot1 \
...
</Source>

Option -eltorito-alt-boot separates the settings
for the BIOS boot image (-b) from those for the EFI
boot image (-e).

The files isolinux/isolinux.bin and boot/grub/efi.img
get into the ISO image from source directory ./boot1.

File ./syslinux/usr/lib/syslinux/isohdpfx.bin is copied
directly from the SYSLINUX installation into the System
Area of the ISO image. It contains the isohybrid MBR template.
Option -isohybrid-gpt-basdat announces the FAT image
boot/grub/efi.img as GPT partition.

See [http://www.gnu.org/software/xorriso/man_1_xorrisofs.html man 1 xorrisofs]
for details about the options which are in part not
supported by mkisofs from cdrtools.

=== A BareBones Boot Image with Boot Information Table ===

Revision as of 17:06, 18 October 2013

Testing my proposal for a new El-Torito article.

After trying to apply smaller changes i decided to propose a re-write of large parts of the text.




El-Torito is a standard for creating bootable optical media like CD-ROMs, DVD, or BD. It is an add-on to the ISO 9660 filesystem.

El-Torito describes different ways of booting from an optical medium. The starting point can either be an emulated floppy drive, an emulated hard disk, or a plain block address in the ISO filesystem.

Oldfashioned ways of boot preparations are described in the articles about bootable CD emulated as a floppy drive and about bootable CD using no emulation (via GRUB legacy).

More modern ways are no-emulation setups as made by GRUB2 script grub-mkrescue or as described by the ISOLINUX wiki of the Syslinux project.

Document Scope

The intention of this document is to explain what you need to know from the El-Torito standard to create a bootable CD with your own boot image. Details about the options for ISO 9660 image production can be found on the Mkisofs page.

El Torito Structure

El Torito booting begins by the Boot Record of the ISO 9660 filesystem at block address 0x11. See also article ISO 9660. This Boot Record points to a Boot Catalog which is stored in one or more blocks inside the ISO 9660 filesystem.

The content of Boot Record and Boot Catalog is created during filesystem production by the ISO 9660 producing software.

The Boot Catalog lists the available boot images which may be prepared for multiple system architectures, called "platforms". These images are marked either as emulated floppies, or as emulated hard disks, or as no-emulation images. In any case they are the first stage in the boot process where custom code from the ISO filesystem can be executed.

While the emulated boot images are to be interpreted by the firmware as is supposed for floppies and hard disks, the no-emulation boot images are on their own.

PC-BIOS reads from the Boot Catalog the number of blocks to load, loads them (usually to segment 07c0) and then executes them as code. As with a normal floppy or hard disk, the DL register contains the BIOS drive number.

EFI interprets the boot image as FAT filesystem and looks up a standardized file path for further processing.

The original El Torito specification mentions platforms "80x86", "PowerPC", and "Mac". Boot setups based on GRUB2 and ISOLINUX use "80x86" for PC-BIOS, and a platform id 0xef for (U)EFI which is not listed in the old specs.

Creating the Structure in the ISO filesystem

The following text assumes that the ISO 9660 producing software is compatible to Mkisofs. E.g. mkisofs, genisoimage, or xorrisofs.

Mkisofs expects that the boot images are submitted as data files like any other file in the emerging ISO 9660 filesystem. Normally they are part of the directory trees which get copied into the filesystem.

In most cases the Boot Catalog is represented in the filesystem as data file, too. Its content is nevertheless composed by Mkisofs.

The boot images of ISOLINUX and GRUB2 expect to contain some information about the ISO filesystem and their own location and length. This information is called Boot Info Table and gets inserted by Mkisofs, if desired. Boot Info Table is not specified by El Torito, but is rather a convention introduced by boot loader developers.

Example of ISO Filesystem Production Run For BIOS

Put all necessary directories and files underneath directory ./prepared_for_iso . It will be copied as root directory of the ISO filesystem. Especially make the boot image for PC-BIOS available at path ./prepared_for_iso/boot/loader.sys , so that it will appear in the ISO filesystem as /boot/loader.sys .

Choose an ISO 9660 producing program and eventually its mkisofs emulation command:

prog="mkisofs"

or

prog="genisoimage"

or

prog="xorriso -as mkisofs"

Produce ISO 9660 filesystem image ./bootable.iso

$prog -R -J -c boot/bootcat \
      -b boot/loader.sys -no-emul-boot -boot-load-size 4 \
      -o ./bootable.iso ./prepared_for_iso

-c boot/bootcat - Makes the Boot Catalog accessible as data file.

-b boot/loader.sys -no-emul-boot - Causes /boot/loader.sys to be listed in the emerging Boot Catalog as no-emulation boot image for PC-BIOS.

-boot-load-size 4 - Specifies the number of 512-bytes sectors to load. Four 512-byte sectors (2048 bytes) is one CD sector and is the number supported by most BIOS.

If your boot image needs updating of a Boot Info Table, then add option -boot-info-table after -boot-load-size 4.

After this production run, the emerged data file ./bootable.iso can be burned onto optical media.

Hybrid Setup for BIOS and EFI from CD/DVD and USB stick

The EL Torito Boot Catalog can offer in the same ISO filesystem alternative boot images for PC-BIOS and for EFI.

But El Torito is interpreted by the firmware only if presented on an optical medium: CD, DVD, BD. For booting PC-BIOS or EFI from USB stick or other hard-disk-like devices, there is need for an MBR and a GPT. Both can be stored in the System Area of the ISO 9660 filesystem. Combining them is a matter of slightly tweaking the GPT specs.

The GPT just has to point to the FAT filesystem image that is also pointed to by the EFI entry in the El Torito Boot Catalog.

The MBR should mark in its partition table the range of the ISO image. It might be helpful or not, to also mark the FAT image for EFI in the partition table of the MBR. The MBR of SYSLINUX can be adjusted to jump with its execution onto the El Torito boot image of ISOLINUX. This is known as "isohybrid".

Debian used for its installation image debian-7.1.0-amd64-netinst.iso the following options of xorriso's mkisofs emulation:

xorriso -as mkisofs \
  ... \
  -c isolinux/boot.cat \
  -b isolinux/isolinux.bin \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -isohybrid-mbr ./syslinux/usr/lib/syslinux/isohdpfx.bin \
  -eltorito-alt-boot \
  -e boot/grub/efi.img \
  -no-emul-boot -isohybrid-gpt-basdat \
  ... \
  ./boot1 \
  ...

Option -eltorito-alt-boot separates the settings for the BIOS boot image (-b) from those for the EFI boot image (-e).

The files isolinux/isolinux.bin and boot/grub/efi.img get into the ISO image from source directory ./boot1.

File ./syslinux/usr/lib/syslinux/isohdpfx.bin is copied directly from the SYSLINUX installation into the System Area of the ISO image. It contains the isohybrid MBR template. Option -isohybrid-gpt-basdat announces the FAT image boot/grub/efi.img as GPT partition.

See man 1 xorrisofs for details about the options which are in part not supported by mkisofs from cdrtools.

A BareBones Boot Image with Boot Information Table