Tablet PC hangs on bzImage

  • Developer

    @george1421 @JJ-Fullmer We have been through a lot of debugging with this and after we have hunted down the kernel it turned out to be a stupid network driver issue. iPXE does not seem to use a native driver for the ASIX AX88179 USB 3.0 adapter but the more general SNP. For whatever reason this ASIX chip does not play by the rules and network connection stalls after it started to transfer the first bytes of the kernel binary (seen in wireshark dumps!). Just to give you a quick heads up on what we’ve been into so far.

    @Zerpie Would it be an option to use a different USB network adapter? I know you’ve tried three different ones. But maybe there are more out there. Other than that it would be a case of getting into the source code and trying to debug either when this NIC doesn’t want to play propery SNP or try to get the AXGE driver to work… For me it’s very hard to tell which way could be the more promising. Not having your hardware here I can’t even do any testing myself.

    EDIT: I just re-read that post in the iPXE forums where I got the information about how to build a binary with native AXGE driver included and saw this:

    When building the ipxe target, drivers for usb devices is not included (due to it disabling all other connected USB devices)

    Sorry for obviously having overlooked this important information. So I guess it does not hang at all but just sits there waiting for input and is not getting any as USB devices are shut off. So instead of the simple shell.txt create a new text file dhcp.txt with the following content:

    ifopen net0
    dhcp net0
    chain tftp://${next-server}/default.ipxe

    Then compile and copy the new binary:

    make bin-i386-efi/ncm--ecm--axge.efi EMBED=dhcp.txt
    cp path_to_ipxe_code/src/bin-i386-efi/ncm–ecm–axge.efi /tftpboot/i386-efi/ipxe.efi

  • Moderator

    @Sebastian-Roth I think I would (instead of messing with the init names) I would just update the Host Init field in the host definition to init_32.xz with the Host Kernel set to bzImage32. That way other hosts will still boot correctly. Technically the 64 bit systems will boot with the 32 bit kernels (as with the older versions of FOG). But the next FOG update will undo you switch around.

    The unclean file system message is because windows was not shutdown properly before you attempted to capture it. Use either sysprep to power off the device or run the command shutdown -s -t 0 command to properly power off the device. The simple Startbutton->Shutdown will not properly power off the device.

  • @Quazz said in Tablet PC hangs on bzImage:

    @Zerpie Did you ever end up trying the has_usb_nic=1 kernel argument?

    I did. Still no luck.

  • Moderator

    There is a couple of points here.

    1. I’ve seen issues with some 32 bit tablets (the models escape me at the moment), in that they have a 64 bit processor, but the processor has been hardware locked in 32 bit mode. iPXE will detect its a 64 bit process (because it really is) and send the wrong iPXE kernel to the target computer. I have not check, but you might be able to bypass this auto detection by specifically calling out bzImage32 in the host configuration properties.
    2. FOG doesn’t currently include refind 32 bit at part of the package. Only refind 64 bit is included. This will cause a problem when exiting from the iPXE menu in that the wrong refind kernel will try to boot and fail.

    I can’t say that either of these are the specific case here, but I have seen issues before with 32 bit tablets.

  • Testers

    @Zerpie You can also try booting from the ipxe shell, which if isn’t built in to the tablet as a boot option (sometimes it is sometimes it isn’t) then you can make a rEFInd usb disk and add all the ipxe efi boot options. Then you can create a startup.nsh script that will switch to the fs#: of the usb drive and then boot to whichever 32 bit ipxe file ends up working. It would be tricky and still involve usb drives but you could in theory make it work.

    Another possibility would be to customize fog’s built in refind for those tablets if that happens to be booted to successfully (i.e. if boot to hard drive from the fog menu is working). You could change the default boot settings, I believe you can add some conditions to it, I know you can do it to have different times of the day have different default boot options. So one possibility would be to add the refind efi shell to the fog refind.conf boot options and make it the default during some time slot you are going to image and just also find a way to link a startup.nsh script. I haven’t actually tested this idea, it’s just another possibility if you want network boot to work. But all of that is nill if none of the ipxe efi boot files get you through bzimage32 boot.

  • Moderator

    @Zerpie Did you ever end up trying the has_usb_nic=1 kernel argument?

  • @Sebastian-Roth That’s a shame. I was hoping we’d be able to find a network boot solution for imaging the tablets as we typically have to image several at once for orders. I haven’t found any imaging or cloning software with network boot/PXE boot that works with this tablets. We’re currently using a USB boot option already which works, but we still have to do one at a time.

  • Developer

    @Zerpie I think we should start looking into other ways of booting this tablet. George posted a great manual on how to build a bootable USB medium:

    Sure this is not perfect but give it a try to see if we can get ahead of iPXE not being able to boot this tablet.

  • @Sebastian-Roth said in Tablet PC hangs on bzImage:

    Try enabling debug make bin-i386-efi/ncm–ecm–axge.efi EMBED=shell.txt DEBUG=ncm,ecm,axge, copy the binary over, try again and see if you get any further output on screen that could help us.

    Same results. It drops me to the ipxe shell and doesn’t accept any input from the keyboard. There’s no firmware upgrade available either.

  • Developer

    @Zerpie Too bad. Not really sure what else we can try. Firmware upgrade for that tablet available by any chance?

    Try enabling debug make bin-i386-efi/ncm--ecm--axge.efi EMBED=shell.txt DEBUG=ncm,ecm,axge, copy the binary over, try again and see if you get any further output on screen that could help us.

  • @Sebastian-Roth Ok so I tried the new binary, but when it drops me to the ipxe shell everything locks up and I’m not able to enter any commands. I can’t even enter a ctrl+alt+del to restart the tablet.

  • Developer

    @Zerpie Yes, you need to copy the new binary over. From my point of view it’s easiest to rename it on copy so you won’t have to change DHCP config as well. But be aware that other clients could boot from this as well and might fail.

    cp path_to_ipxe_code/src/bin-i386-efi/ncm–ecm–axge.efi /tftpboot/i386-efi/ipxe.efi

  • @Sebastian-Roth said in Tablet PC hangs on bzImage:

    Maybe try make bin-i386-efi/ncm–ecm–axge.efi EMBED=shell.txt and on boot:

    Once I run that command do I need to move the file over to /tftpboot/i386-efi as well? Will it know to boot from that file? Sorry, I’ve had to put this project on the back burner for a while and now that I’m coming back to it it’s hard to pick up again where I left off.

  • Moderator

    If it’s recognized as USB you may want to turn on has_usb_nic=1 as a kernel argument.

    Potentially this will get you a bit further already with the default binaries.

  • Developer

    @Zerpie Might be some hope at the horizon. The IDs do match so we just need to figure out why iPXE is not using this native driver but SNP driver stack instead. From my understanding (though I am not an iPXE developer but just have been playing with it for a fair while) iPXE mostly uses native drivers if available.

    Looking through the axge.c driver code I found this:

     * Asix 10/100/1000 USB Ethernet driver
     * Large chunks of functionality are undocumented in the available
     * datasheets.  The gaps are deduced from combinations of the Linux
     * driver, the FreeBSD driver, and experimentation with the hardware.

    Sounds promising, hmm?

    Seems like a different make target needs to be used to enable the native driver for USB network adapters (ref). Maybe try make bin-i386-efi/ncm--ecm--axge.efi EMBED=shell.txt and on boot:

    ipxe> dhcp net0
    ipxe> ifstat

  • @Sebastian-Roth said in Tablet PC hangs on bzImage:

    Maybe we just need to figure out the USB IDs of your adapter to make it work. Can you figure those out in Windows device manager? device manager -> right click the ethernet adapter -> properties -> details -> select property Hardware Ids

    Ah, thank you. I finally found it.
    Under Hardware IDs it shows


  • Developer

    @Zerpie Great you were able to test other adapater. Too bad none of them worked out of the box.

    About the ASIX AX88179, seems like we had someone else two years ago having an issue with an adapter having the same chipset [ref]. Some time ago I started documenting all the adapters we have heard about in the forums. This one seems not confirmed to be working, sorry [ref] - does not mean we cannot make it work but I have not seen it yet.

    In general: not every adapter works with every device. Especially for PXE boot to work the device firmware (UEFI) needs to have a driver for the specific adapter. And for FOG to work we need iPXE and the Linux kernel to have a driver for the adapter.

    I just figured out that there might be a native driver in iPXE for that network chip. See in ipxe-code/src/drivers/net/axge.c:

    static struct usb_device_id axge_ids[] = {
                    .name = "ax88179",
                    .vendor = 0x0b95,
                    .product = 0x1790,

    So there is hope. Maybe we just need to figure out the USB IDs of your adapter to make it work. Can you figure those out in Windows device manager? device manager -> right click the ethernet adapter -> properties -> details -> select property Hardware Ids

  • I tried 3 different USB ethernet adapters, but it looks like it only saw one of them while booting up. Once in Windows, Windows could see another one, but it asks as if it’s not there when booting up.

    Here’s the result of running dhcp net0 and ifstat on the one that was working during boot up. Again, sorry for the quality. This little display doesn’t photograph well.


  • @Sebastian-Roth So the network adapter is built into the docking station that the tablet sits on and it looks like Windows sees it as simply a USB ethernet adapter. All it’s showing for the adapter in the Details tab is ASIX AX88179 USB 3.0 to Gigabit Ethernet Adapter.

    I do have a few different brands of USB ethernet adapters here that I can test out. The docking station also has USB ports so I should be able to try out each one.

  • Developer

    @Zerpie Well that’s interesting. We see that it uses SNP driver. This is kind of a more general network stack. I was expecting to see a specific iPXE network driver here that we could try to debug. I think it’s not worth to look into the SNP part of the code as this is being used on many machines and is probably well tested. I guess the tablet firmware is just not playing by the rules here.

    One route we still have is finding out what network chipset you use and see if we can modify one of the iPXE drivers to be used. So boot up Windows on your device and take a look at the device manager. In the details you find the hardware ids of the network card.

    If it is a USB adapter you might find a different model to use with that tablet?

  • @Sebastian-Roth Thanks for the help. I was able to run the commands in the iPXE shell and here’s the results.


Log in to reply