iPXE discussion forum

Full Version: ipxe.lkrn does not detect L2 network interface in MBR
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello,

I purpose to set pxe in grub,then MBR boot auto pxe after reboot os.

I have followed online instructions to download latest iPXE from git and run "make" which finished successfuly.

My attempt with undionly.ipxe for PXE was successful and acomplished what I expected.

Next logical step would be to add ipxe.lkrn to my grub configuration file which I did and ipxe.lkrn loads in MBR but it does not detect network interface.

I have two nics to be set pxe in BIOS, set two nics pxe are enable in BIOS. MBR boot from ipxe.lkrn may was successful.But I set one nic pxe is enable in BIOS. It does not detect network interface.

I trace to the code for this problem, I find the code is
Code:
    /* Call loader */
    undi_loader_entry = undirom->loader_entry;
    __asm__ __volatile__ ( REAL_CODE ( "pushl %%ebp\n\t" /* gcc bug */
                       "pushw %%ds\n\t"
                       "pushw %%ax\n\t"
                       "lcall *undi_loader_entry\n\t"
                       "popl %%ebp\n\t" /* discard */
                       "popl %%ebp\n\t" /* gcc bug */ )
                   : "=a" ( exit )
                   : "a" ( __from_data16 ( &undi_loader ) )
                   : "ebx", "ecx", "edx", "esi", "edi" );

    if ( exit != PXENV_EXIT_SUCCESS ) {
        /* Clear entry point */
        memset ( &undi_loader_entry, 0, sizeof ( undi_loader_entry ) );

        rc = -EUNDILOAD ( undi_loader.Status );
        DBGC ( undi, "UNDI %p loader failed: %s\n",
               undi, strerror ( rc ) );
        return rc;
    }

Well it is a strange situation that iPXE on the PXE finds and configures network interface successfully but ipxe.lkrn does not detect network interface.
ipxe.lkrn uses the drivers that is built in to ipxe, while undionly.kpxe chains the nics own undi stack. You can compare the behavior by using ipxe.pxe instead of ipxe.lkrn in your first test.

what is the pciid of the nics that are not found?
(2016-12-17 23:08)NiKiZe Wrote: [ -> ]ipxe.lkrn uses the drivers that is built in to ipxe, while undionly.kpxe chains the nics own undi stack. You can compare the behavior by using ipxe.pxe instead of ipxe.lkrn in your first test.

what is the pciid of the nics that are not found?

I purpose boot from ipxe after rebooting linux. ipxe.pxe is booting from pxe.I want to boot for harddisk. Do you know another way to finish this function? Thank you very much.
Reference URL's