		HOW TO MAKE A SPARC BOOTABLE CDROM (NEW)

SILO may be used to create a bootable CDROM for sparc. At the moment it will
support booting on sun4c, sun4m, sun4d and sun4u machines only.

INTRO
=====

A CDROM is booted on Sparc by issuing following commands in the PROM
(depending on PROM version - v0 is PROM with major versions 0, found
on sun4c only, v2 is PROM with major versions 2 or 3, found on some newer
sun4c and all sun4m and sun4d machines) and the same applies to P1275 PROMs
found in the 64bit UltraSparc machines:

v0:

b sd(0,6,0)

v2:

boot cdrom

(cdrom is actually alias to /iommu/sbus/espdma/esp/sd@0,6:d or something
similar)

As Solaris has different kernels for each architecture, the PROM boots by
default from different "partitions" on the CD depending on the
architecture of the machine (that's e.g. the :d in the cdrom alias on v2
PROM). That partition table is stored in the first 512 bytes of the CD
(with exactly the same format as partition tables on Sparc disks), so you
can use SparcLinux fdisk program to look into that partition table.
SparcLinux bootable CDROMs have a partition table where all partitions
point to the main iso9660 image, starting from offset 0 to the end of the
image.  The only value PROM looks at is starting offset, so that it will
boot on all machines correctly.  In the boot process PROM finds start of
the boot partition (in SILO's case it is always 0) and loads 7680 bytes
from offset 512 in that partition.  Fortunately iso9660 has the first 32KB
(16 sectors) reserved for OS use, so that the partition table and
bootblock can be safely stored there. As SILO is longer in size than those
32KB (eventhough it is compressed), it puts its first stage loader in
there and puts its second stage loader somewhere in the iso9660
filesystem.

SILO 1.3.0 and up now uses the new isofs.b boot block for CD's. The old
boot block required a patched mkisofs. This new boot block can be passed
to stock mkisofs as the generic boot block. Adding the sparc-boot option
will ensure that mkisofs adds the needed sun partition table.

STEP BY STEP
============

You should first prepare the tree you'd like to have on the CD. The only
requirement is that you put boot/second.b from SILO distribution into
/boot in the tree and edit the appropriate /boot/silo.conf in the tree. The
isofs.b boot block does not need to be in the CD tree.

This is VERY important. The isofs.b boot block is hard wired to look for
second.b in /boot on the iso9660 image. The silo.conf has to be located in
/boot aswell, since isofs.b will tell second.b that is the location.

Note, you also need to make sure that you enable RockRidge extensions so
that normal path lookups work. This has always been true for SILO's usage
of iso9660.

Once the tree is prepared, just do:

mkisofs -G /boot/isofs.b -B ... -r -o IMAGENAME DIRECTORY_TREE

and you're done. The "..." to the -B option tells it to make the generic
isofs.b boot block the only image for all sparc-boot partition pointers.

If you have any problems, mail silo-general@lists.sparc-boot.org
