[Etherboot-developers] undionly.kpxe suspended in main.c
Brought to you by:
marty_connor,
stefanhajnoczi
From: justhechuang <jus...@16...> - 2008-10-30 05:19:50
|
Hi, I tried the latest gPXE bootloader gpxe-0.9.5 and encounted a problem: The bininary file undionly.kpxe works OK, but I am a little dispointed about the startup() process in main() of core/main.c, which takes 4 seconds or so to complete on a physical machine. Yet this time delay is milliseconds only on a VMWare virtual machine. So I tracked down startup() and eventually found out that this time delay is in undinet_call() of arch/i386/drivers/net/undinet.c. Exactly speaking, this cause belongs to the following code when the parameter function is specified as PXENV_UNDI_INITIALIZE: __asm__ __volatile__ ( REAL_CODE ( "pushw %%es\n\t" "pushw %%di\n\t" "pushw %%bx\n\t" "lcall *%c3\n\t" "addw $6, %%sp\n\t" ) : "=a" ( exit ), "=b" ( discard_b ), "=D" ( discard_D ) : "p" ( __from_data16 ( &undinet_entry_point )), "b" ( function ), "D" ( __from_data16 ( &undinet_params ) ) : "ecx", "edx", "esi", "ebp" ); It is a pity that I know little about assemble language, hope that somebody can help me. My questions are: (1)What does these codes do with PXENV_UNDI_INITIALIZE ? (2)Why the time delay of a physical machine is different from VMWare? (4 seconds compared with milliseconds) (3)Is it possible to be correlated to the network devices, such as a switch or a hub? Thanks in advance! soforth. |