iPXE discussion forum
Loading binary network driver - Printable Version

+- iPXE discussion forum (https://forum.ipxe.org)
+-- Forum: iPXE user forums (/forumdisplay.php?fid=1)
+--- Forum: General (/forumdisplay.php?fid=2)
+--- Thread: Loading binary network driver (/showthread.php?tid=8181)



Loading binary network driver - chadparry - 2016-09-15 04:48

I would like to use iPXE instead of the stock boot binaries provided for my Jaguarboard. The way I have been booting until now is to follow the Jaguarboard instructions, which load an American Megatrends 5.8 EFI shell, then I type "fs1:" and "load RtkUsbUndiDxe.efi" to load a binary Realtek ethernet driver, and then I type "ipxe.efi" to proceed with a regular network boot. It's painful because I have to type those commands on every reboot.

Is it possible to mimic this with an iPXE image? If I could embed the RtkUsbUndiDxe.efi driver image in a bootable EFI then that would be great. Or if I could embed a script that chainloads RtkUsbUndiDxe.efi before a regular network boot, then that would be great too. My attempts have failed to embed a script. The command "chain RtkUsbUndiDxe.efi" interprets the filename as a URL, which it can't load because it has no ethernet driver yet. The command "sanboot" can't locate a single file within a partition, and that command expects a bootable image anyway.

I'm open to any suggestions that would allow my Jaguardboard with its r8152 driver to netboot successfully. Thanks!


RE: Loading binary network driver - NiKiZe - 2016-09-15 19:46

(2016-09-15 04:48)chadparry Wrote:  I would like to use iPXE instead of the stock boot binaries provided for my Jaguarboard. The way I have been booting until now is to follow the Jaguarboard instructions, which load an American Megatrends 5.8 EFI shell, then I type "fs1:" and "load RtkUsbUndiDxe.efi" to load a binary Realtek ethernet driver, and then I type "ipxe.efi" to proceed with a regular network boot. It's painful because I have to type those commands on every reboot.

Is it possible to mimic this with an iPXE image? If I could embed the RtkUsbUndiDxe.efi driver image in a bootable EFI then that would be great. Or if I could embed a script that chainloads RtkUsbUndiDxe.efi before a regular network boot, then that would be great too. My attempts have failed to embed a script. The command "chain RtkUsbUndiDxe.efi" interprets the filename as a URL, which it can't load because it has no ethernet driver yet. The command "sanboot" can't locate a single file within a partition, and that command expects a bootable image anyway.

I'm open to any suggestions that would allow my Jaguardboard with its r8152 driver to netboot successfully. Thanks!

When you mention sanboot, are we talking about the iPXE command or some efi shell command? (sanboot is not available in iPXE when running in EFI mode)

There is support for the file:// protocol within ipxe when running in efi mode, see: http://git.ipxe.org/ipxe.git/commitdiff/9913a40

But I don't think that will work since ipxe must have a working driver available when starting, and there is no load RtkUsbUndiDxe.efi equivalent inside ipxe

(note below that I'm assuming your board is a 64 bit intel arch, so you might have to adjust if it is not)

ipxe has native support for most usb based nics.
try building it with make bin-x86_64-efi/ncm.efi and then use that file instead, it should remove the need for running load RtkUsbUndiDxe.efi
instead you should be able to just store ncm.efi as bootx64.efi


And another option is to create a startup.nsh file and put the 2 commands you normally run in there. (this is kind of described when you start the efi shell)


RE: Loading binary network driver - chadparry - 2016-09-16 06:17

Those are great suggestions. Thanks a ton! It worked great.

Quote:When you mention sanboot, are we talking about the iPXE command or some efi shell command? (sanboot is not available in iPXE when running in EFI mode)

I had tried "sanboot" from an iPXE shell. Since it's not going to work, I'll forget about that option.

Quote:ipxe has native support for most usb based nics.
try building it with make bin-x86_64-efi/ncm.efi and then use that file instead, it should remove the need for running load RtkUsbUndiDxe.efi
instead you should be able to just store ncm.efi as bootx64.efi

That would have been the most elegant solution. The ncm.efi image just hung, however. It displayed "iPXE initialising devices..." for at least 15 minutes before I rebooted. That didn't surprise me, since I had previously tried running "make bin-x86_64-efi/ipxe.efi" and copying that as my BOOTX64.EFI, and it complained about not finding any network devices, even though that image supposedly contains all supported drivers.

Quote:There is support for the file:// protocol within ipxe when running in efi mode, see: http://git.ipxe.org/ipxe.git/commitdiff/9913a40

But I don't think that will work since ipxe must have a working driver available when starting, and there is no load RtkUsbUndiDxe.efi equivalent inside ipxe

I had high hopes that this might work, but you were right that it could not use the "file:" protocol without a network driver. It responded "Error: No such device" and "Error code 2c0480".

Quote:(note below that I'm assuming your board is a 64 bit intel arch, so you might have to adjust if it is not)

You are correct.

Quote:And another option is to create a startup.nsh file and put the 2 commands you normally run in there. (this is kind of described when you start the efi shell)

I had seen mentions of startup.nsh during the boot sequence, and I never realized that it was meant to be a customization point. So I created a startup.nsh file with the following contents:

Code:
load blk0:\EFI\BOOT\RtkUsbUndiDxe.efi
ipxe.efi

It performed an automatic netboot just how I wanted.