[syslinux] "isolinux.bin missing or corrupt" when booting USB flash drive in old PC

Thomas Schmitt
Sun, 19 Mar 2017 15:29:46 -0000

Hi,

i wrote:
> > I ponder whether it would be possible to create a diagnostic MBR
> > [for isohybrid]

MartinS wrote:
> Yes. What exactly should be printed?

All the things which lead to decisions in isohdpfx.S.
I have some problems understanding the details of the program's flow.

- The code inside PARTITION_SUPPORT is supposed to be inactive with
  MBR isohdpfx.bin. It belongs to isohybrid --partok which is equivalent
  to MBRs isohdppx*.bin. Debian uses isohdpfx.bin.

- I am quite clueless what the code between "1:" in line 130 and
"next:"
  in line 150 does.

- Then it tries whether INT 13 AH 41H is supported and if so, patches
  itself to use INT 13 AH 42H for reading rather than AH 6H.

- Unclear why "/* Get (C)HS geometry */" is performed in both cases.

- I assume that
	movw	$0x7c00, %bx
	movw	$4, %cx		/* Sector count */
	movl	(lba_offset), %eax
     2:
	call	read_sector
        ...
        loopw	2b
  shall load the bytes of isolinux.bin to address 0x7c00.
  I know the number 0x7c0 (i.e. with one "0" less) as the default
  "Load Segment" of El Torito.
    http://wiki.osdev.org/Boot_Sequence#Master_Boot_Record
  says "0x0000:0x7c00" and "0x7c0:0x0000 " are the same.
Shrug.

  It would be interesting to see what bytes it reads by the first
  pass of the loop.
  If the block content of a real ISO is inconclusive, one could combine
  the MBR with a disk image that bears the block number at the start of
  each block. So one could see which block was actually read when e.g.
  block 8222 was desired.

- Next is the failing magic number test:
	cmpl	$HYBRID_MAGIC,(isolinux_hybrid_signature)
	jne	bad_signature

  Any problem of the real isohybrid MBR should have shown up until
  this point.


Have a nice day :)

Thomas