iPXE discussion forum

Full Version: iPXE detecting NICs from USB, but not from HDD
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
i'm trying to boot iPXE from grub2, so that i do not have to press F8 everytime i want to start my PC from the network.
I can't get ipxe to detect my NIC, if i start it from grub2. The same version from a usb-stick is working and detecting my NIC.
Whats the differecne? On my Laptop ipxe from grub2 works.

I tried the following setups:
1. installed "grub-ipxe" in Ubuntu 12.10 -> ipxe showed up in grub2
- worked on my laptop
- does not work on my desktop pc (doesn't detect the NIC) - Error EC8 - PXE-Structure not detected

2. tried manual entry in grub
linux16 /boot/ipxe.lkrn
same as above, even with fresh compiled (latest git) ipxe.lkrn or a pxe.lkrn from a new ipxe.iso

3. ipxe.iso on a usb-stick with "unetbootin"
with unetbootin i created a bootable usbstick with ipxe. It worked out of the box and ipxe detected my NIC.
What can I do to have ipxe working from HDD?
Thx in advance

Mainboard: Asus P5K Infos
First of all, what kind of network card does your computer have? Name, linux driver and PCI-ID, please. You can find it with lspci -vv, usually.

Second, if you already have compiled ipxe from git, you should make bin/ipxe.usb followed by dd if=bin/ipxe.usb of=/dev/sdX (where X represents the device number of your usb stick, find it with fdisk -l). Be aware that this will completely wipe your USB stick. This USB stick should then be bootable on your computer. If you can boot it, and get into the iPXE shell and issue a dhcp command and you get an IP (ifstat) then your hardware _should_ work. You can always try to chain to the demo image at boot.ipxe.org, as explained on the front page of http://ipxe.org .

At this point you can start experimenting with other ways of starting the iPXE, like chainloading, booting from grub or syslinux, or others.
I have to dig this thread Wink sorry for the "little delay"
Heres the output of lspci -vv:
02:00.0 Ethernet controller: Atheros Communications Inc. Attansic L1 Gigabit Ethernet (rev b0)
        Subsystem: ASUSTeK Computer Inc. P5KPL-VM Motherboard
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
        Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0, Cache Line Size: 32 bytes
        Interrupt: pin A routed to IRQ 45
        Region 0: Memory at fe9c0000 (64-bit, non-prefetchable) [size=256K]
        Expansion ROM at fe9a0000 [disabled] [size=128K]
        Capabilities: [40] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [48] MSI: Enable+ Count=1/1 Maskable- 64bit+
                Address: 00000000fee0300c  Data: 4199
        Capabilities: [58] Express (v1) Endpoint, MSI 00
                DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
                        ExtTag- AttnBtn+ AttnInd+ PwrInd+ RBE- FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop-
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- UncorrErr+ FatalErr- UnsuppReq+ AuxPwr+ TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s, Latency L0 unlimited, L1 unlimited
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
        Capabilities: [100 v1] Advanced Error Reporting
                UESta:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt+ UnxCmplt- RxOF+ MalfTLP- ECRC- UnsupReq+ ACSViol-
                UEMsk:  DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
                UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
                CESta:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
                CEMsk:  RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
                AERCap: First Error Pointer: 14, GenCap+ CGenEn- ChkCap+ ChkEn-
        Kernel driver in use: atl1
        Kernel modules: atl1

Pics from booting: (newest git -> 747e9eb6f39c4e755b5f3ed0cbc82e1d04b0124a)

With USB

With grub2 (lkrn)
menuentry "iPXE boot 1" {
linux16 /boot/iso/ipxe.lkrn
ifstat does nothing here

iPXE doesn't detect my NIC, if I boot from HDD, with USB-Stick all is fine and it does boot into my TFTP-Server
You might have more luck if you build ipxe.lkrn with debug output for your driver: make bin/ipxe.lkrn DEBUG=atl1e

You should also issue the "dhcp" command before doing ifstat, to see what packets came through.

I'm not experienced with grub, but is linux16 the right way to execute a typical linux kernel? If you look at the USB image that is created by the build process, you might be able to mimic the setup that is used in it in your own setup. I'm not sure if they use syslinux or grub, though. I think they use syslinux (or rather isolinux).
Why bother putting iPXE on the HD, why not just set the computer to do a PXE boot, and chain load iPXE with a menu where the default it to boot from HD

Or am I missing something ?
ArneLovius: That is actually a great observation. Chainloading into a menu with "exit" as the default choice (with a timeout) is probably a better solution. You can find pointers to examples that do this sort of thing at http://ipxe.org/examples.
Debug-Mode doesn't give us anything new, same result. No NIC detected, net0 doesn't show up in ipxe and NO debug messages.
ifstat and dhcp doesn't give any output.
From "config" i get also no net0 device, but if i scroll down, there is a entry with: errno: 0x2e022001
Whatever this means.

And yes: I can boot over PXE with hitting F8 at the right time and all works. But I wanted to be able to boot from ipxe IN the grub2-menu.
My PXE-server isn't running all the time, so chainloading is no option ...
the same ipxe.lkrn/iso works on my laptop and in VirtualBox.

I think linux16 is the right way to boot the ipxe-kernel, because Ubuntu does it the same way, also it is described here: http://hmontoliu.blogspot.de/2010/12/gpx...grub2.html
What can I do to let ipxe recognize my NIC?
Have you actually looked at http://ipxe.org/2e022001 ? From what I can see, that indicates an exec format error, which means you could have a problem with what kind of executable formats your ipxe.lkrn supports. I'd look more closely into that.
(2013-03-24 13:32)Solo0815 Wrote: [ -> ]My PXE-server isn't running all the time, so chainloading is no option ...

if you have network boot set as default, when your there is no network, or no PXE service, it will boot from the next device in the boot sequence...
Reference URL's