Thomas Schmitt
f33df0ef29
iso_image_give_up_mips_boot(). The preliminary ban has been lifted to combine El Torito and MIPS Big Endian boot facilities. The current state of boot record documentation has been added to bzr.
239 lines
9.9 KiB
Plaintext
239 lines
9.9 KiB
Plaintext
|
|
|
|
|
|
Collection of Boot Sector Formats for ISO 9660 Images
|
|
|
|
|
|
by Thomas Schmitt - mailto:scdbackup@gmx.net
|
|
Libburnia project - mailto:libburn-hackers@pykix.org
|
|
|
|
This information is collected from various sources. Some is backed by
|
|
specifications, some is just rumor which happens to work.
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> EL Torito
|
|
|
|
El Torito, Bootable CD-ROM Format Specification, Version 1.0, January 25, 1995
|
|
|
|
>>> El Torito Volume Descriptor
|
|
|
|
>>> Boot Catalog
|
|
|
|
>>> Boot Images
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> MBR
|
|
|
|
http://en.wikipedia.org/wiki/Master_boot_record
|
|
|
|
|
|
>>> iso_write_opts_set_part_offset()
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
SYSLINUX Isohybrid MBR
|
|
|
|
Sources:
|
|
syslinux-3.72/utils/isohybrid , a perl script by H. Peter Anvin = hpa.
|
|
Mailing list conversations with hpa.
|
|
|
|
An isohybrid MBR directs the booting BIOS to an Isolinux boot image which
|
|
is also the target of an El Torito boot catalog entry.
|
|
For that purpose one has to take an MBR template and has to set a few bytes
|
|
to values which sufficiently describe the ISO image and the boot image file.
|
|
|
|
Words are composed little-endian style.
|
|
|
|
Byte Range | Value | Meaning
|
|
---------- | ---------- | ----------------------------------------------------
|
|
0 - 431 | = opaque = | Syslinux machine code provided by MBR template
|
|
| |
|
|
432 - 439 | hd_bootlba | Address of the ISOLINUX boot image file in the
|
|
| | ISO image. Counted in 512 byte blocks.
|
|
440 - 443 | mbr_id | Random number
|
|
444 - 445 | 0 | Padding
|
|
| |
|
|
446 - 509 | ========== | Partition table
|
|
| |
|
|
446 - 461 | part_entry | Partition table entry 1 describing ISO image size
|
|
| |
|
|
462 - 509 | 0 | Unused partition entries 2 to 4
|
|
| |
|
|
510 - 511 | 0xaa55 | MBR signature
|
|
---------- | ---------- | ----------------------------------------------------
|
|
|
|
|
|
hpa about MBR templates and partition table filesystem types:
|
|
-------------------------------------------------------------
|
|
|
|
[MBR templates] are available in the Syslinux build tree under the names:
|
|
|
|
mbr/isohdp[fp]x*.bin
|
|
|
|
The default probably should be mbr/isohdppx.bin, but it's ultimately up
|
|
to the user.
|
|
|
|
Note: the filesystem type is largely arbitrary, in theory it can be any
|
|
value other than 0x00, 0x05, 0x0f, 0x85, 0xee, or 0xef. 0x17 ("Windows
|
|
IFS Hidden") seems safeish, some people believe 0x83 (Linux) is better.
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> GRUB2 MBR
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
|
|
MIPS Volume Header
|
|
for MIPS Big Endian, e.g. SGI Indigo2
|
|
|
|
Sources:
|
|
cdrkit-1.1.10/genisoimage/boot-mips.c
|
|
by Steve McIntyre <steve@einval.com>
|
|
which refers to
|
|
genisovh by Florian Lohoff <flo@rfc822.org>
|
|
and Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
|
|
who seem to have learned parameter settings from IRIX CD media
|
|
There are traces in the web which relate this to specs by
|
|
MIPS Computer Systems, Inc. , 1985
|
|
Silicon Graphics Computer Systems, Inc. , 2000
|
|
|
|
|
|
The first 512 bytes of the media constitute the Volume Header.
|
|
Words are composed big-endian style.
|
|
|
|
Byte Range | Value | Meaning
|
|
---------- | ---------- | ----------------------------------------------------
|
|
0 - 3 | 0x0be5a941 | Magic number
|
|
4 - 5 | 0 | Root partition number
|
|
6 - 7 | 0 | Swap partition number
|
|
8 - 23 | 0 | Name of file to boot (unclear what this means)
|
|
| |
|
|
24 - 71 | ========== | Device Parameters
|
|
| |
|
|
24 - 24 | 0 | Spiral addressing skew (unclear what this means)
|
|
25 - 25 | 0 | Words of 0 before header
|
|
26 - 26 | 0 | Words of 0 between hdr and data
|
|
27 - 27 | 0 | Spare sectors per cylinder
|
|
28 - 29 | num_cyl_l | Number of usable cylinder, lower two bytes
|
|
| | ((iso_size + BYTES_PER_SECTOR - 1) /
|
|
| | (SECTORS_PER_TRACK * BYTES_PER_SECTOR)) & 0xffff
|
|
30 - 31 | 0 | Starting head of volume 0
|
|
32 - 33 | 1 | Number of tracks per cylinder
|
|
34 - 34 | 0 | Depth of CTQ queue (unclear what this means)
|
|
35 - 35 | num_cyl_h | Number of usable cylinders, high byte
|
|
| | ((iso_size + BYTES_PER_SECTOR - 1) /
|
|
| | (SECTORS_PER_TRACK * BYTES_PER_SECTOR)) >> 16
|
|
36 - 37 | 0 | unused
|
|
38 - 39 | 32 | SECTORS_PER_TRACK
|
|
40 - 41 | 512 | BYTES_PER_SECTOR
|
|
42 - 43 | 0 | Sector interleave (unclear what this means)
|
|
44 - 47 | 0x00000034 | Controller characteristics composed from
|
|
| | DP_RESEEK 0x00000020 /* recalibrate as last resort */
|
|
| | DP_IGNOREERRORS 0x00000010
|
|
| | /* transfer data regardless of errors */
|
|
| | DP_TRKFWD 0x00000004
|
|
| | /* forward to replacement track */
|
|
48 - 51 | 0 | Bytes/sec for kernel stats
|
|
52 - 55 | 0 | Max num retries on data error
|
|
56 - 59 | 0 | ms per word to xfer, for iostat
|
|
60 - 71 | 0 | 6 parameter words for xylogics controllers
|
|
| |
|
|
72 - 311 | ========== | Volume Directory with 15 entries of 16 bytes each
|
|
| |
|
|
72 - 87 | ========== | Volume Directory Entry 1
|
|
72 - 79 | boot_name | Boot file basename, eventually padded by 0 to lenght 8
|
|
80 - 83 | boot_block | ISO 9660 LBA of boot file * 4, i.e. in blocks of 512
|
|
84 - 87 | boot_bytes | File length in bytes
|
|
| |
|
|
88 - 311 | see above | Volume Directory Entries 2 to 15
|
|
| |
|
|
312 - 504 | ========== | Partition Table with 16 entries of 12 bytes each
|
|
| |
|
|
312 - 407 | 0 | Unused partition entries 1 to 8
|
|
| |
|
|
408 - 419 | ========== | Partition Table Entry 9 for Volume Header
|
|
408 - 411 | part_blks | Number of 512 byte blocks in partition
|
|
| |(iso_size + (BYTES_PER_SECTOR - 1)) / BYTES_PER_SECTOR
|
|
412 - 415 | 0 | Start block of partition
|
|
416 - 419 | 0 | PTYPE_VOLHDR = Partition is volume header
|
|
| |
|
|
420 - 431 | 0 | Unused partition entry 10
|
|
| |
|
|
432 - 443 | ========== | Partition Table Entry 11 for Volume
|
|
432 - 435 | part_blks | Number of 512 byte blocks in partition
|
|
| |(iso_size + (BYTES_PER_SECTOR - 1)) / BYTES_PER_SECTOR
|
|
436 - 439 | 0 | Start block of partition
|
|
440 - 443 | 6 | PTYPE_VOLUME = Partition is entire volume
|
|
| |
|
|
444 - 503 | 0 | Unused partition entries 12 to 16
|
|
| |
|
|
504 - 507 | head_chk | Volume header checksum
|
|
| | The two's complement of bytes 0 to 503 read as big
|
|
| | endian unsigned 32 bit: sum(words) + head_chk == 0
|
|
| |
|
|
508 - 511 | 0 | Volume header end padding
|
|
| |
|
|
up to 2048 | 0 | ISO 9660 Block end padding
|
|
---------- | ---------- | ----------------------------------------------------
|
|
|
|
Test image produced by
|
|
genisoimage -o /u/test/mips_boot.iso -mips-boot checksum.c jte
|
|
which reports
|
|
Found mips boot image checksum.c, using extent 636 (0x27C), #blocks 14336 (0x3800)
|
|
|
|
xorriso reports as 2048 byte LBA of the boot image dummy file
|
|
File data lba: 0 , 159 , 7 , 14330 , '/CHECKSUM.C'
|
|
|
|
First 512 bytes in hex:
|
|
0 : 0b e5 a9 41 00 00 00 00 00 00 00 00 00 00 00 00
|
|
16 : 00 00 00 00 00 00 00 00 00 00 00 00 00 51 00 00
|
|
32 : 00 01 00 00 00 00 00 20 02 00 00 00 00 00 00 34
|
|
48 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
64 : 00 00 00 00 00 00 00 00 63 68 65 63 6b 73 75 6d
|
|
80 : 00 00 02 7c 00 00 38 00 00 00 00 00 00 00 00 00
|
|
... 0 ...
|
|
400 : 00 00 00 00 00 00 00 00 00 00 0a 28 00 00 00 00
|
|
416 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
|
|
432 : 00 00 0a 28 00 00 00 00 00 00 00 06 00 00 00 00
|
|
... 0 ...
|
|
496 : 00 00 00 00 00 00 00 00 22 ec 2c c9 00 00 00 00
|
|
|
|
The 32 bit two's complement of bytes 0 to 503 is 0x22ec2cc9.
|
|
|
|
In decimal:
|
|
0 : 11 229 169 65 0 0 0 0 0 0 0 0 0 0 0 0
|
|
16 : 0 0 0 0 0 0 0 0 0 0 0 0 0 81 0 0
|
|
32 : 0 1 0 0 0 0 0 32 2 0 0 0 0 0 0 52
|
|
48 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
64 : 0 0 0 0 0 0 0 0 99 104 101 99 107 115 117 109
|
|
80 : 0 0 2 124 0 0 56 0 0 0 0 0 0 0 0 0
|
|
... 0 ...
|
|
400 : 0 0 0 0 0 0 0 0 0 0 10 40 0 0 0 0
|
|
416 : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
|
432 : 0 0 10 40 0 0 0 0 0 0 0 6 0 0 0 0
|
|
... 0 ...
|
|
496 : 0 0 0 0 0 0 0 0 34 236 44 201 0 0 0 0
|
|
|
|
Cleartext part:
|
|
64 : c h e c k s u m
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> MIPSEL Little Endian MIPS , e.g. DECstation
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> ??? HP-PA
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
>>> ??? DEC Alpha
|
|
|
|
------------------------------------------------------------------------------
|
|
|