Difference between revisions of "Comboot/chain.c32"

From Syslinux Wiki
Jump to: navigation, search
(Options: Use the right name for PC-DOS: ibmbio.com instead of io.sys + add MS- and PC- before DOS)
m (Update some available options.)
Line 4: Line 4:
 
'''chain.c32''' is a COM32 module for Syslinux. It can chainload MBRs, partition boot sectors, Windows bootloaders (ntldr, setupldr.bin and bootmgr), MS-DOS and PC-DOS io.sys, Freedos kernel.sys, isolinux.bin (only from ISOLINUX), grldr of grub4dos or a bootsector saved to a file. It can also swap BIOS drive numbers or hide partitions.  
 
'''chain.c32''' is a COM32 module for Syslinux. It can chainload MBRs, partition boot sectors, Windows bootloaders (ntldr, setupldr.bin and bootmgr), MS-DOS and PC-DOS io.sys, Freedos kernel.sys, isolinux.bin (only from ISOLINUX), grldr of grub4dos or a bootsector saved to a file. It can also swap BIOS drive numbers or hide partitions.  
  
All options as available in chain.c32 of Syslinux 3.85:
+
All options as available in chain.c32 of Syslinux 3.85 (with some updates introduced in later versions):
 
<pre>
 
<pre>
Usage:   chain.c32 hd<disk#> [<partition>] [options]
+
Usage:
        chain.c32 fd<disk#> [options]
+
  chain.c32 hd<disk#> [<partition>] [options]
        chain.c32 mbr:<id> [<partition>] [options]
+
  chain.c32 fd<disk#> [options]
        chain.c32 boot [<partition>] [options]
+
  chain.c32 mbr:<id> [<partition>] [options]
        chain.c32 fs [options]
+
  chain.c32 boot [<partition>] [options]
        chain.c32 label=<label> [options]
+
  chain.c32 fs [options]
        chain.c32 guid=<label> [options]
+
  chain.c32 label=<label> [options]
 +
  chain.c32 guid=<label> [options]
  
Options: file=<loader>     load file, instead of boot sector
+
Options:
        isolinux=<loader> load another version of ISOLINUX
+
  file=<loader>       load file, instead of boot sector
        ntldr=<loader>     load Windows NTLDR, SETUPLDR.BIN or BOOTMGR
+
  isolinux=<loader>   load another version of ISOLINUX
        cmldr=<loader>     load Recovery Console of Windows NT/2K/XP
+
  ntldr=<loader>     load Windows' NTLDR, SETUPLDR.BIN or BOOTMGR, or GRLDR
        freedos=<loader>   load FreeDOS kernel.sys
+
  cmldr=<loader>     load Recovery Console of Windows NT/2K/XP
        msdos=<loader>     load MS-DOS io.sys
+
  freedos=<loader>   load FreeDOS kernel.sys
        pcdos=<loader>     load PC-DOS ibmbio.com
+
  msdos=<loader>     load MS-DOS (2.xx to 6.xx) io.sys
        seg=<segment>     jump to <seg>:0000 instead of 0000:7C00
+
  pcdos=<loader>     load PC-DOS ibmbio.com
        swap               swap drive numbers, if bootdisk is not fd0/hd0
+
  reactos=<loader>    load ReactOS freeldr
        hide               hide primary partitions, except selected partition
+
  grub=<loader>     
        sethidden         set the FAT/NTFS hidden sectors field
+
    [grubcfg=<config>] load grub legacy stage2
 +
  seg=<segment>       jump to <seg>:0000 instead of 0000:7C00
 +
  swap               swap drive numbers, if bootdisk is not fd0/hd0
 +
  hide               hide primary partitions, except selected partition
 +
  sethidden           set the FAT/NTFS hidden sectors field
 
</pre>
 
</pre>
  
Line 176: Line 181:
  
 
''' msdos=<loader> '''
 
''' msdos=<loader> '''
:equivalent to seg=0x70 file=<loader> sethidden, used with MS-DOS' io.sys.
+
:equivalent to seg=0x70 file=<loader> sethidden, used with MS-DOS (v.2.xx to 6.xx)' io.sys.
  
 
''' pcdos=<loader> '''
 
''' pcdos=<loader> '''
 
:equivalent to seg=0x70 file=<loader> sethidden, used with PC-DOS' ibmbio.com.
 
:equivalent to seg=0x70 file=<loader> sethidden, used with PC-DOS' ibmbio.com.
 +
 +
''' reactos=<loader> '''
 +
:equivalent to seg=0:0x8000:0x8100 file=<loader> setbpb nohand, used with ReactOS' freeldr. Add 'save' option so to store corrected BPB values. Supported since Syslinux v.4.05.
 +
 +
''' grub=<loader> [grubcfg=<config>] '''
 +
:equivalent to seg=0x800::0x200 file=<loader> nohand nosect grub, used with grub legacy's stage2, performing additional corrections on the file in memory. Optionally, an alternate config file can be specified through the 'grubcfg=' option. Supported since Syslinux v.4.02.
  
 
''' swap '''
 
''' swap '''

Revision as of 07:04, 16 June 2012

chain.c32 is a COM32 module for Syslinux. It can chainload MBRs, partition boot sectors, Windows bootloaders (ntldr, setupldr.bin and bootmgr), MS-DOS and PC-DOS io.sys, Freedos kernel.sys, isolinux.bin (only from ISOLINUX), grldr of grub4dos or a bootsector saved to a file. It can also swap BIOS drive numbers or hide partitions.

All options as available in chain.c32 of Syslinux 3.85 (with some updates introduced in later versions):

Usage:
   chain.c32 hd<disk#> [<partition>] [options]
   chain.c32 fd<disk#> [options]
   chain.c32 mbr:<id> [<partition>] [options]
   chain.c32 boot [<partition>] [options]
   chain.c32 fs [options]
   chain.c32 label=<label> [options]
   chain.c32 guid=<label> [options]

Options:
   file=<loader>       load file, instead of boot sector
   isolinux=<loader>   load another version of ISOLINUX
   ntldr=<loader>      load Windows' NTLDR, SETUPLDR.BIN or BOOTMGR, or GRLDR
   cmldr=<loader>      load Recovery Console of Windows NT/2K/XP
   freedos=<loader>    load FreeDOS kernel.sys
   msdos=<loader>      load MS-DOS (2.xx to 6.xx) io.sys
   pcdos=<loader>      load PC-DOS ibmbio.com
   reactos=<loader>    load ReactOS freeldr
   grub=<loader>       
    [grubcfg=<config>] load grub legacy stage2
   seg=<segment>       jump to <seg>:0000 instead of 0000:7C00
   swap                swap drive numbers, if bootdisk is not fd0/hd0
   hide                hide primary partitions, except selected partition
   sethidden           set the FAT/NTFS hidden sectors field


Numbering of Drives and Partitions

Drive numbering

Hard drive numbering starts at 0:

  • hd0 : first hard drive (as seen by the BIOS)
  • hd1 : second hard drive
  • hd2 : third hard drive
  • ...

Floppy drive numbering starts at 0:

  • fd0 : first floppy drive
  • fd1 : second floppy drive

The drive from which Syslinux is booted can be referred to with the parameter:

  • boot

The drive and partition from which Syslinux is booted can be referred to with the parameter:

  • fs

Find partition by uuid or label in all GPT partitions on all available drives:

  • label=label
  • guid=guid

Note that label and guid works only on GPT partition tables, it is not filesystem but partition label and uuid.


Partition numbering

Partition numbers (short):

  • 0 : MBR (default.)
  • 1-4 : primary partitions
  • 5 and higher : logical partitions


Partition numbers (long):

  • 0 : MBR (default)
  • 1 : first primary partition
  • 2 : second primary partition
  • 3 : third primary partition
  • 4 : fourth primary partition
  • 5 : first logical partition
  • 6 : second logical partition
  • 7 : third logical partition
  • 8 : fourth logical partition
  • 9 : fifth logical partition
  • 10 : sixth logical partition
  • 11 : seventh logical partition
  • 12 : eighths logical partition
  • ...

Examples

UI menu.c32

LABEL boot_hd0
MENU LABEL Boot from first hard drive
COM32 chain.c32
APPEND hd0

LABEL boot_hd1
MENU LABEL Boot from second hard drive
COM32 chain.c32
APPEND hd1

LABEL boot_fd0
MENU LABEL Boot from first floppy drive
COM32 chain.c32
APPEND fd0

LABEL boot_syslinux_drive
MENU LABEL Boot the drive from which Syslinux is booted (hard drive or floppy drive)
COM32 chain.c32
APPEND boot

LABEL boot_syslinux_filesystem
MENU LABEL Boot the filesystem from which Syslinux is booted (partition in hard drive or floppy drive)
COM32 chain.c32
APPEND fs

LABEL boot_hd2_2
MENU LABEL Boot second primary partition from thirth hard drive
COM32 chain.c32
APPEND hd2 2

LABEL boot_hd1_5
MENU LABEL Boot first logical partition from second hard drive
COM32 chain.c32
APPEND hd1 5

LABEL boot_hd3_0
MENU LABEL Boot MBR of fourth hard drive (same as "APPEND hd3")
COM32 chain.c32
APPEND hd3 0

LABEL boot_part_win7fs
MENU LABEL Boot ntld from GPT partition labelled "win7fs"
COM32 chain.c32
APPEND label=win7fs ntldr=/bootmgr

mbr:

The mbr: syntax means search all the hard disks until one with a specific MBR serial number (bytes 440-443) is found.

You can get the MBR serial number, by running the following command (change /dev/sda to the correct device):

$ hexdump -s 440 -n 4 -e '"0x%08x\n"' /dev/sda
0x0ec8694c

Or by running:

$ fdisk -l /dev/sda
...
Disk identifier: 0x0ec8694c

Example:

LABEL mbr_serial
COM32 chain.c32
APPEND mbr:0x0ec8694c


Options

file=<loader>

loads the file <loader> **from the SYSLINUX filesystem** instead of loading the boot sector.

seg=<segment>

loads at and jumps to <seg>:0000 instead of 0000:7C00.

isolinux=<loader>

Chainload another version/build of the ISOLINUX bootloader and patch the loader with appropriate parameters in memory. This avoids the need for the -eltorito-alt-boot parameter of mkisofs, when you want more than one ISOLINUX per CD/DVD.

ntldr=<loader>

equivalent to seg=0x2000 file=<loader> sethidden, used with WinNT's loaders
Example loaders: NTLDR (XP, 2003), BOOTMGR (Vista, 2008, 7), GRLDR (Grub4DOS).
See: HowTos & Linux and Windows deployment

cmldr=<loader>

used with Recovery Console of Windows NT/2K/XP. same as ntldr=<loader> & "cmdcons\0" written to the system name field in the bootsector.

freedos=<loader>

equivalent to seg=0x60 file=<loader> sethidden, used with FreeDOS kernel.sys.

msdos=<loader>

equivalent to seg=0x70 file=<loader> sethidden, used with MS-DOS (v.2.xx to 6.xx)' io.sys.

pcdos=<loader>

equivalent to seg=0x70 file=<loader> sethidden, used with PC-DOS' ibmbio.com.

reactos=<loader>

equivalent to seg=0:0x8000:0x8100 file=<loader> setbpb nohand, used with ReactOS' freeldr. Add 'save' option so to store corrected BPB values. Supported since Syslinux v.4.05.

grub=<loader> [grubcfg=<config>]

equivalent to seg=0x800::0x200 file=<loader> nohand nosect grub, used with grub legacy's stage2, performing additional corrections on the file in memory. Optionally, an alternate config file can be specified through the 'grubcfg=' option. Supported since Syslinux v.4.02.

swap

if the disk is not fd0/hd0, install a BIOS stub which swaps the drive numbers.

hide

change type of primary partitions with IDs 01, 04, 06, 07, 0b, 0c, or 0e to 1x, except for the selected partition, which is converted the other way.

sethidden

update the "hidden sectors" (partition offset) field in a FAT/NTFS boot sector.