Kim Mik
2009-Jul-19 19:14 UTC
[syslinux] Patch for chain.c32: Set default boot drive to CD drive from which ISOLINUX is booted
chain.c32 of SYSLINUX 3.82 does set the boot drive passed to the DL register to 0x80 and not to the boot drive (CD-drive). This can be a problem if you want to chainload grldr (grub4dos bootloader) from a CD and if you want to let grldr search for its menu.lst file on the CD. For more info: http://www.boot-land.net/forums/index.php?showtopic=8457 This 1 line patch fixes the issue (Thanks to hpa, for pointing to the exact location of the problematic code). Gert Hulselmans $ diff -u ./com32/modules/chain.c.old ./com32/modules/chain.c.new --- ./com32/modules/chain.c.old 2009-07-19 20:33:16.468094540 +0200 +++ ./com32/modules/chain.c.new 2009-07-19 20:26:54.636091513 +0200 @@ -666,8 +666,7 @@ } else if (!strcmp(drivename, "boot")) { const union syslinux_derivative_info *sdi; sdi = syslinux_derivative_info(); - if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX || - sdi->c.filesystem == SYSLINUX_FS_ISOLINUX) + if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX ) drive = 0x80; /* Boot drive not available */ else drive = sdi->disk.drive_number;
Kim Mik
2009-Jul-23 18:51 UTC
[syslinux] Patch for chain.c32: Set default boot drive to CD drive from which ISOLINUX is booted
Not only grub4dos (grldr) needs the patch to boot correctly after being chainloaded by chain.c32 when run from ISOLINUX. If you want to boot Windows 2000/XP/2003 , from a CD/DVD with ISOLINUX, by chainloading SETUPLDR.BIN with chain.c32, chain.c32 needs to pass the CD drive from which ISOLINUX was booted as root drive to SETUPLDR.BIN. If you want to boot Windows Vista/2008/7, from a CD/DVD with ISOLINUX, by chainloading bootmgr with chain.c32, chain.c32 needs to pass the CD drive from which ISOLINUX was booted as root drive to bootmgr. isolinux.cfg: =========================================================================UI menu.c32 LABEL - MENU LABEL Boot Windows XP setup (setupldr.bin) with patched chain.c32 TEXT HELP Boot Windows XP setup (setupldr.bin) with patched chain.c32. Works. ENDTEXT COM32 chain-patched.c32 APPEND ntldr=/I386/SETUPLDR.BIN LABEL - MENU LABEL Boot Windows XP setup (setupldr.bin) with original chain.c32 from 3.82 TEXT HELP Boot Windows XP setup (setupldr.bin) with original chain.c32 Doesn't work. ENDTEXT COM32 chain-ori.c32 APPEND ntldr=/I386/SETUPLDR.BIN LABEL - MENU LABEL Boot Windows XP setup (setupldr.bin) with original chain.c32 from 3.82 (hd96) TEXT HELP Boot Windows XP setup (setupldr.bin) with original chain.c32 and add the bios drive number for the CD drive to the APPEND line. Works. ENDTEXT COM32 chain-ori.c32 APPEND ntldr=/I386/SETUPLDR.BIN hd96 LABEL - MENU LABEL Boot Windows Vista/7 (bootmgr) with patched chain.c32 TEXT HELP Boot Windows Vista/7 (bootmgr) with patched chain.c32 Works ENDTEXT COM32 chain-patched.c32 APPEND ntldr=/bootmgr LABEL - MENU LABEL Boot Windows Vista/7 (bootmgr) with original chain.c32 from 3.82 TEXT HELP Boot Windows Vista/7 (bootmgr) with original chain.c32 from 3.82 Doesn't work ENDTEXT COM32 chain-ori.c32 APPEND ntldr=/bootmgr LABEL - MENU LABEL Boot Windows Vista/7 (bootmgr) with original chain.c32 from 3.82 (hd96) TEXT HELP Boot Windows Vista/7 (bootmgr) with original chain.c32 from 3.82 and add the bios drive number for the CD drive to the APPEND line. ENDTEXT COM32 chain-ori.c32 APPEND ntldr=/bootmgr ==================================================================== Gert Hulselmans ----- Original Message ---- From: Kim Mik <kimmik999999 at yahoo.co.uk> To: syslinux at zytor.com Sent: Sunday, 19 July, 2009 21:14:16 Subject: [syslinux] Patch for chain.c32: Set default boot drive to CD drive from which ISOLINUX is booted chain.c32 of SYSLINUX 3.82 does set the boot drive passed to the DL register to 0x80 and not to the boot drive (CD-drive). This can be a problem if you want to chainload grldr (grub4dos bootloader) from a CD and if you want to let grldr search for its menu.lst file on the CD. For more info: http://www.boot-land.net/forums/index.php?showtopic=8457 This 1 line patch fixes the issue (Thanks to hpa, for pointing to the exact location of the problematic code). Gert Hulselmans $ diff -u ./com32/modules/chain.c.old ./com32/modules/chain.c.new --- ./com32/modules/chain.c.old 2009-07-19 20:33:16.468094540 +0200 +++ ./com32/modules/chain.c.new 2009-07-19 20:26:54.636091513 +0200 @@ -666,8 +666,7 @@ } else if (!strcmp(drivename, "boot")) { const union syslinux_derivative_info *sdi; sdi = syslinux_derivative_info(); - if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX || - sdi->c.filesystem == SYSLINUX_FS_ISOLINUX) + if (sdi->c.filesystem == SYSLINUX_FS_PXELINUX ) drive = 0x80; /* Boot drive not available */ else drive = sdi->disk.drive_number; _______________________________________________ Syslinux mailing list Submissions to Syslinux at zytor.com Unsubscribe or set options at: http://www.zytor.com/mailman/listinfo/syslinux Please do not send private replies to mailing list traffic.
H. Peter Anvin
2009-Jul-24 00:26 UTC
[syslinux] Patch for chain.c32: Set default boot drive to CD drive from which ISOLINUX is booted
Kim Mik wrote:> Not only grub4dos (grldr) needs the patch to boot correctly after being chainloaded by chain.c32 > when run from ISOLINUX. > > If you want to boot Windows 2000/XP/2003 , from a CD/DVD with ISOLINUX, > by chainloading SETUPLDR.BIN with chain.c32, chain.c32 needs to pass the > CD drive from which ISOLINUX was booted as root drive to SETUPLDR.BIN. > > If you want to boot Windows Vista/2008/7, from a CD/DVD with ISOLINUX, > by chainloading bootmgr with chain.c32, chain.c32 needs to pass the > CD drive from which ISOLINUX was booted as root drive to bootmgr.Applied and a build pushed out as 3.83-pre1. -hpa