[syslinux] Updating BIOS with pxe syslinux memdisk & DOS problems
James Courtier-Dutton
James at superbug.demon.co.uk
Fri Sep 12 11:06:42 PDT 2003
Alex Ninaber wrote:
> Hi all,
>
>
> We are hoping to update our BIOSes remotely with pxelinux and memdisk (it is
> for a 600 node Beowulf cluster with no floppy access). The DOS floppy loads
> and starts, however somehow the flash utility 'phlash.exe' or 'phlash16.exe'
> are both unable to load the provided rom image and just stop doing nothing.
> It looks like it can't access the rom image somehow, which is strange as it
> does acknowledge the fact it can find the image on the drive. Apparently
> some people have got this working with some motherboards (with I assume
> different flash utilities).
>
> So the question is: Is this a problem with phlash.exe that is trying to read
> from a floppy that isn't there or is it a problem with memdisk?
>
> If we can get this working it would be pretty good; far better than walking
> around with usb sticks or usb floppies.
>
> Regards,
>
> Alex Ninaber
>
>
>
There are several reasons why phlash.exe might not be working correctly.
1) One reason might be the DOS version. DOS 6.22 might work, but WIN98
DOS might not. WIN98 DOS handles result codes from DOS calls differently
than DOS 6.22, and this might be confusing phlash.exe.
2) I have not looked at exactly how memdisk works, but I assume it tries
to trick DOS into thinking there is an extra disk present.
Maybe this simulation is not perfect.
E.g. once I wrote a small program to hook the keyboard, so that if a
certain combination of keys were hit, I could get certain jobs done.
During the development of this program, I discovered that if I did not
restore all the registers properly, strange things would happen. One
example was, if I changed the SI register for any reason, any Microsoft
program could not read the keyboard for anything, but any other Software
worked fine.
So, maybe memdisk is not supporting the file/open/close api exactly as
it should, and maybe corrupting a register or two. Normally this should
not matter, because the DOS API informs us that the programmer should
assume that no register's state is preserved during an INT21 call, but
it just so happens, that with some normal DOS calls, some registers are
preserved, so maybe the programmer got lazy, and did not save all the
registers before a call as it worked fine with normal DOS, but of course
might fail with memdisk.
This is all just theory, as I have not looked at the source code, but
maybe worth considering.
Cheers
James
More information about the Syslinux
mailing list