Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
PXE entry invalid, so PXE boot hangs
I'm trying to PXE boot an x86 box. The setup works fine on all my other
kit, but on the problem one I see:
booting netbsd - starting in 0 seconds.
pxe_init: bad cksum (0xbc) for PXENV+ at 0x900d8
PXE BIOS Version 2.1
*hang*
I'm prepared for a flaky BIOS, but it does boot pxelinux and Citrix
Provisioning Services OK.
Adding a few printfs, I see it found PXENV+ at two locations: 0x900d8
(rejected as bad checksum) and 0x8bb52. PXE+ was found at 0x8baf2. As it's
PXE BIOS 2.1, it ignores the PXENV+ info. The hang is because it never
returns from this call:
pxe_call(PXENV_GET_CACHED_INFO);
http://nxr.netbsd.org/xref/src/sys/arch/i386/stand/pxeboot/pxe.c#380
pxelinux uses 5 methods in priority order to find the pxe structure.
NetBSD only uses a memory scan which is combination of its final 2 (it
calls these plans D and E).
pxelinux prints:
!PXE entry point found (we hope) at 8A44:0100 via plan A
http://git.kernel.org/cgit/boot/syslinux/syslinux.git/tree/core/fs/pxe/bios.c?id=a7f5892c4d85f3685708b8efb237c9c73a8b1ddf#n240
These addresses correspond to bangpxe_seg and bangpxe_off:
http://nxr.netbsd.org/xref/src/sys/arch/i386/stand/pxeboot/pxe.c#360
Printing these shows that bangpxe_reg is 0, not 0x8a44. Hardwiring
bangpxe_reg to 0x8a44 gets the machine booting (well, the kernel panics
later on, but that's a different story).
Therefore, it looks like the structure found by memory scanning is
incorrect and perhaps we should implement Linux's plans A and B (C being
the int 0x1a function 0x5650 that we explicitly choose not to support).
These involve reading points from offsets relative to InitStack. Where
does this correspond to in NetBSD?
--
Stephen
Home |
Main Index |
Thread Index |
Old Index