How to boot linux kernel from network through GRUB2 console?












1














My test hw, on which I want to boot, is MinnowBoard Max Turbot which is an x86 machine with UEFI and so far, I have successfully built GRUB2 from source and it successfully boots kernel from USB.



Now, I want to boot the linux kernel and rootfs from network. Since, Minnowboard's UEFI firmware doesn't support PXE (network drivers unavailable), I chose to get it through GRUB2, which can be built with network drivers.



I can setup dhcp server and tftp server, however, I am not able to find any Wiki/tutorial on how to specify grub2 the IP address of the tftp and dhcp servers. How do I tell GRUB2 to boot from network?



The best I could find was this :
https://tr.opensuse.org/SDB:Booting_from_the_Network_with_GRUB



However, it uses grub-legacy. The GRUB2 documentation is also not clear.



Can someone please tell me the steps and commands to tell grub2 to boot kernel from network? Also what modules do I need to build GRUB2 with (full command to build GRUB2 would be appreciated)



EDIT



I have built GRUB2 with the following command :



./grub-mkimage -d ./grub-core -o bootx64.efi -O x86_64-efi -p "" fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf tftp efinet


I have a tftp server running on IP a.b.c.d.
Now when I set linux as below in GRUB2 console :



linux (tftp,a.b.c.d)/tftpboot/bzImage


I get the error destination unreachable. Also when I do net_ls_cards, I don't get any cards listed. But I have confirmed that internet over ethernet works on this board by booting Ubuntu on it.



EDIT2



Thanks to @telcoM , to point out that 64-bit version has needed network UEFI support. This gave me confidence to spend another day trying and I finally had success.



I setup tftp, dhcp and nfs servers (out of scope of this title).



The in GRUB2, I hit net_bootp and this is the juice. Though name is misleading it worked as the first step to request IP from DHCP server. This puts the HW on the network with legal network settings. Now I could set kernel path



grub> linux (tftp,a.b.c.d)/tftpboot/bzImage


Now the kernel boots. But I am still one step behind - the rootfs !!! Kernel fails while loading rootfs, which is expected.



I am not able to figure out how to tell grub2 to set rootfs location as NFS server. Is there some function like (tftp) ? I am checking through docs. If someone already know, please point out.










share|improve this question
























  • Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
    – G-Man
    Dec 8 at 19:48










  • Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
    – telcoM
    Dec 11 at 11:22
















1














My test hw, on which I want to boot, is MinnowBoard Max Turbot which is an x86 machine with UEFI and so far, I have successfully built GRUB2 from source and it successfully boots kernel from USB.



Now, I want to boot the linux kernel and rootfs from network. Since, Minnowboard's UEFI firmware doesn't support PXE (network drivers unavailable), I chose to get it through GRUB2, which can be built with network drivers.



I can setup dhcp server and tftp server, however, I am not able to find any Wiki/tutorial on how to specify grub2 the IP address of the tftp and dhcp servers. How do I tell GRUB2 to boot from network?



The best I could find was this :
https://tr.opensuse.org/SDB:Booting_from_the_Network_with_GRUB



However, it uses grub-legacy. The GRUB2 documentation is also not clear.



Can someone please tell me the steps and commands to tell grub2 to boot kernel from network? Also what modules do I need to build GRUB2 with (full command to build GRUB2 would be appreciated)



EDIT



I have built GRUB2 with the following command :



./grub-mkimage -d ./grub-core -o bootx64.efi -O x86_64-efi -p "" fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf tftp efinet


I have a tftp server running on IP a.b.c.d.
Now when I set linux as below in GRUB2 console :



linux (tftp,a.b.c.d)/tftpboot/bzImage


I get the error destination unreachable. Also when I do net_ls_cards, I don't get any cards listed. But I have confirmed that internet over ethernet works on this board by booting Ubuntu on it.



EDIT2



Thanks to @telcoM , to point out that 64-bit version has needed network UEFI support. This gave me confidence to spend another day trying and I finally had success.



I setup tftp, dhcp and nfs servers (out of scope of this title).



The in GRUB2, I hit net_bootp and this is the juice. Though name is misleading it worked as the first step to request IP from DHCP server. This puts the HW on the network with legal network settings. Now I could set kernel path



grub> linux (tftp,a.b.c.d)/tftpboot/bzImage


Now the kernel boots. But I am still one step behind - the rootfs !!! Kernel fails while loading rootfs, which is expected.



I am not able to figure out how to tell grub2 to set rootfs location as NFS server. Is there some function like (tftp) ? I am checking through docs. If someone already know, please point out.










share|improve this question
























  • Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
    – G-Man
    Dec 8 at 19:48










  • Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
    – telcoM
    Dec 11 at 11:22














1












1








1


1





My test hw, on which I want to boot, is MinnowBoard Max Turbot which is an x86 machine with UEFI and so far, I have successfully built GRUB2 from source and it successfully boots kernel from USB.



Now, I want to boot the linux kernel and rootfs from network. Since, Minnowboard's UEFI firmware doesn't support PXE (network drivers unavailable), I chose to get it through GRUB2, which can be built with network drivers.



I can setup dhcp server and tftp server, however, I am not able to find any Wiki/tutorial on how to specify grub2 the IP address of the tftp and dhcp servers. How do I tell GRUB2 to boot from network?



The best I could find was this :
https://tr.opensuse.org/SDB:Booting_from_the_Network_with_GRUB



However, it uses grub-legacy. The GRUB2 documentation is also not clear.



Can someone please tell me the steps and commands to tell grub2 to boot kernel from network? Also what modules do I need to build GRUB2 with (full command to build GRUB2 would be appreciated)



EDIT



I have built GRUB2 with the following command :



./grub-mkimage -d ./grub-core -o bootx64.efi -O x86_64-efi -p "" fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf tftp efinet


I have a tftp server running on IP a.b.c.d.
Now when I set linux as below in GRUB2 console :



linux (tftp,a.b.c.d)/tftpboot/bzImage


I get the error destination unreachable. Also when I do net_ls_cards, I don't get any cards listed. But I have confirmed that internet over ethernet works on this board by booting Ubuntu on it.



EDIT2



Thanks to @telcoM , to point out that 64-bit version has needed network UEFI support. This gave me confidence to spend another day trying and I finally had success.



I setup tftp, dhcp and nfs servers (out of scope of this title).



The in GRUB2, I hit net_bootp and this is the juice. Though name is misleading it worked as the first step to request IP from DHCP server. This puts the HW on the network with legal network settings. Now I could set kernel path



grub> linux (tftp,a.b.c.d)/tftpboot/bzImage


Now the kernel boots. But I am still one step behind - the rootfs !!! Kernel fails while loading rootfs, which is expected.



I am not able to figure out how to tell grub2 to set rootfs location as NFS server. Is there some function like (tftp) ? I am checking through docs. If someone already know, please point out.










share|improve this question















My test hw, on which I want to boot, is MinnowBoard Max Turbot which is an x86 machine with UEFI and so far, I have successfully built GRUB2 from source and it successfully boots kernel from USB.



Now, I want to boot the linux kernel and rootfs from network. Since, Minnowboard's UEFI firmware doesn't support PXE (network drivers unavailable), I chose to get it through GRUB2, which can be built with network drivers.



I can setup dhcp server and tftp server, however, I am not able to find any Wiki/tutorial on how to specify grub2 the IP address of the tftp and dhcp servers. How do I tell GRUB2 to boot from network?



The best I could find was this :
https://tr.opensuse.org/SDB:Booting_from_the_Network_with_GRUB



However, it uses grub-legacy. The GRUB2 documentation is also not clear.



Can someone please tell me the steps and commands to tell grub2 to boot kernel from network? Also what modules do I need to build GRUB2 with (full command to build GRUB2 would be appreciated)



EDIT



I have built GRUB2 with the following command :



./grub-mkimage -d ./grub-core -o bootx64.efi -O x86_64-efi -p "" fat iso9660 part_gpt part_msdos normal boot linux configfile loopback chain efifwsetup efi_gop efi_uga ls search search_label search_fs_uuid search_fs_file gfxterm gfxterm_background gfxterm_menu test all_video loadenv exfat ext2 ntfs btrfs hfsplus udf tftp efinet


I have a tftp server running on IP a.b.c.d.
Now when I set linux as below in GRUB2 console :



linux (tftp,a.b.c.d)/tftpboot/bzImage


I get the error destination unreachable. Also when I do net_ls_cards, I don't get any cards listed. But I have confirmed that internet over ethernet works on this board by booting Ubuntu on it.



EDIT2



Thanks to @telcoM , to point out that 64-bit version has needed network UEFI support. This gave me confidence to spend another day trying and I finally had success.



I setup tftp, dhcp and nfs servers (out of scope of this title).



The in GRUB2, I hit net_bootp and this is the juice. Though name is misleading it worked as the first step to request IP from DHCP server. This puts the HW on the network with legal network settings. Now I could set kernel path



grub> linux (tftp,a.b.c.d)/tftpboot/bzImage


Now the kernel boots. But I am still one step behind - the rootfs !!! Kernel fails while loading rootfs, which is expected.



I am not able to figure out how to tell grub2 to set rootfs location as NFS server. Is there some function like (tftp) ? I am checking through docs. If someone already know, please point out.







linux boot grub2 boot-loader tftp






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 11 at 10:51

























asked Dec 8 at 19:14









Insane Coder

1063




1063












  • Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
    – G-Man
    Dec 8 at 19:48










  • Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
    – telcoM
    Dec 11 at 11:22


















  • Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
    – G-Man
    Dec 8 at 19:48










  • Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
    – telcoM
    Dec 11 at 11:22
















Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
– G-Man
Dec 8 at 19:48




Did you try following the procedures in the document you linked?  What happened? Please do not respond in comments; edit your question to make it clearer and more complete.
– G-Man
Dec 8 at 19:48












Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
– telcoM
Dec 11 at 11:22




Regarding your EDIT2: you're on the right track, but you should open a new question. Although your problem is related to your original question, it is still a different question and StackExchange has an "one question per question post" principle.
– telcoM
Dec 11 at 11:22










1 Answer
1






active

oldest

votes


















0














The Release Notes for the latest firmware for your board (November 2018 release) seems to indicate that the 64-bit version of the firmware actually does support network boot, even using the HTTP/HTTPS protocols. Only the 32-bit version of the firmware still has the UEFI network support disabled. Perhaps a firmware upgrade would solve your problem?



I see you are using efinet as your GRUB network driver module. I think it assumes that the firmware will have already initialized the network interface and received an IP address, either by DHCP or from firmware configuration.



If the firmware won't initialize the hardware and provide the appropriate UEFI protocol for GRUB to use, the efinet driver won't work... unless of course you find the right UEFI network driver from Intel's support webpages and do some UEFI scripting to first load and configure the NIC driver and the TCP/IP driver stack from some other media before starting up grubx64.efi. But that would sort of defeat the purpose of network boot.



To support UEFI PXE boot and UEFI 2.5 HTTP(S) boot, your DHCP server will need to be able to detect the PXE architecture option in the client's DHCP request and add the appropriate boot information to the DHCP response. If you happen to be using ISC dhcpd as your DHCP server, the part of DHCP server configuration that relates to network boot should be similar to this:



option pxearch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <IP address of boot server>; # bootp style option
option tftp-server-name "<IP address of boot server>"; # DHCP style option
if option pxearch = 00:10 {
# 0x0010 = UEFI 2.5 HTTP boot for x86_64
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>";
} elsif option pxearch = 00:0f {
# 0x000f = UEFI 2.5 HTTP boot for 32-bit x86
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>"
} elsif option pxearch = 00:09 {
# TFTP-based UEFI PXE boot for x86_64 according to original RFC 4578
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # size of grubx64.efi as reported by "du -B 512 grubx64.efi"
} elsif option pxearch = 00:07 {
# TFTP-based UEFI PXE boot for x86_64 according to current IANA registry
# and RFC 4578 errata
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # as above
} elsif option pxearch = 00:06 {
# TFTP-based UEFI PXE boot for 32-bit x86
filename "/some/TFTP/path/grubia32.efi";
option boot-size <nnnn>;
} else {
# plain old x86 BIOS PXE boot options here
}

# end of PXE boot specific options
}





share|improve this answer





















  • Thanks. See my edit.
    – Insane Coder
    Dec 11 at 11:07










  • I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
    – Insane Coder
    Dec 11 at 11:07











Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f486829%2fhow-to-boot-linux-kernel-from-network-through-grub2-console%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














The Release Notes for the latest firmware for your board (November 2018 release) seems to indicate that the 64-bit version of the firmware actually does support network boot, even using the HTTP/HTTPS protocols. Only the 32-bit version of the firmware still has the UEFI network support disabled. Perhaps a firmware upgrade would solve your problem?



I see you are using efinet as your GRUB network driver module. I think it assumes that the firmware will have already initialized the network interface and received an IP address, either by DHCP or from firmware configuration.



If the firmware won't initialize the hardware and provide the appropriate UEFI protocol for GRUB to use, the efinet driver won't work... unless of course you find the right UEFI network driver from Intel's support webpages and do some UEFI scripting to first load and configure the NIC driver and the TCP/IP driver stack from some other media before starting up grubx64.efi. But that would sort of defeat the purpose of network boot.



To support UEFI PXE boot and UEFI 2.5 HTTP(S) boot, your DHCP server will need to be able to detect the PXE architecture option in the client's DHCP request and add the appropriate boot information to the DHCP response. If you happen to be using ISC dhcpd as your DHCP server, the part of DHCP server configuration that relates to network boot should be similar to this:



option pxearch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <IP address of boot server>; # bootp style option
option tftp-server-name "<IP address of boot server>"; # DHCP style option
if option pxearch = 00:10 {
# 0x0010 = UEFI 2.5 HTTP boot for x86_64
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>";
} elsif option pxearch = 00:0f {
# 0x000f = UEFI 2.5 HTTP boot for 32-bit x86
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>"
} elsif option pxearch = 00:09 {
# TFTP-based UEFI PXE boot for x86_64 according to original RFC 4578
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # size of grubx64.efi as reported by "du -B 512 grubx64.efi"
} elsif option pxearch = 00:07 {
# TFTP-based UEFI PXE boot for x86_64 according to current IANA registry
# and RFC 4578 errata
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # as above
} elsif option pxearch = 00:06 {
# TFTP-based UEFI PXE boot for 32-bit x86
filename "/some/TFTP/path/grubia32.efi";
option boot-size <nnnn>;
} else {
# plain old x86 BIOS PXE boot options here
}

# end of PXE boot specific options
}





share|improve this answer





















  • Thanks. See my edit.
    – Insane Coder
    Dec 11 at 11:07










  • I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
    – Insane Coder
    Dec 11 at 11:07
















0














The Release Notes for the latest firmware for your board (November 2018 release) seems to indicate that the 64-bit version of the firmware actually does support network boot, even using the HTTP/HTTPS protocols. Only the 32-bit version of the firmware still has the UEFI network support disabled. Perhaps a firmware upgrade would solve your problem?



I see you are using efinet as your GRUB network driver module. I think it assumes that the firmware will have already initialized the network interface and received an IP address, either by DHCP or from firmware configuration.



If the firmware won't initialize the hardware and provide the appropriate UEFI protocol for GRUB to use, the efinet driver won't work... unless of course you find the right UEFI network driver from Intel's support webpages and do some UEFI scripting to first load and configure the NIC driver and the TCP/IP driver stack from some other media before starting up grubx64.efi. But that would sort of defeat the purpose of network boot.



To support UEFI PXE boot and UEFI 2.5 HTTP(S) boot, your DHCP server will need to be able to detect the PXE architecture option in the client's DHCP request and add the appropriate boot information to the DHCP response. If you happen to be using ISC dhcpd as your DHCP server, the part of DHCP server configuration that relates to network boot should be similar to this:



option pxearch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <IP address of boot server>; # bootp style option
option tftp-server-name "<IP address of boot server>"; # DHCP style option
if option pxearch = 00:10 {
# 0x0010 = UEFI 2.5 HTTP boot for x86_64
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>";
} elsif option pxearch = 00:0f {
# 0x000f = UEFI 2.5 HTTP boot for 32-bit x86
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>"
} elsif option pxearch = 00:09 {
# TFTP-based UEFI PXE boot for x86_64 according to original RFC 4578
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # size of grubx64.efi as reported by "du -B 512 grubx64.efi"
} elsif option pxearch = 00:07 {
# TFTP-based UEFI PXE boot for x86_64 according to current IANA registry
# and RFC 4578 errata
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # as above
} elsif option pxearch = 00:06 {
# TFTP-based UEFI PXE boot for 32-bit x86
filename "/some/TFTP/path/grubia32.efi";
option boot-size <nnnn>;
} else {
# plain old x86 BIOS PXE boot options here
}

# end of PXE boot specific options
}





share|improve this answer





















  • Thanks. See my edit.
    – Insane Coder
    Dec 11 at 11:07










  • I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
    – Insane Coder
    Dec 11 at 11:07














0












0








0






The Release Notes for the latest firmware for your board (November 2018 release) seems to indicate that the 64-bit version of the firmware actually does support network boot, even using the HTTP/HTTPS protocols. Only the 32-bit version of the firmware still has the UEFI network support disabled. Perhaps a firmware upgrade would solve your problem?



I see you are using efinet as your GRUB network driver module. I think it assumes that the firmware will have already initialized the network interface and received an IP address, either by DHCP or from firmware configuration.



If the firmware won't initialize the hardware and provide the appropriate UEFI protocol for GRUB to use, the efinet driver won't work... unless of course you find the right UEFI network driver from Intel's support webpages and do some UEFI scripting to first load and configure the NIC driver and the TCP/IP driver stack from some other media before starting up grubx64.efi. But that would sort of defeat the purpose of network boot.



To support UEFI PXE boot and UEFI 2.5 HTTP(S) boot, your DHCP server will need to be able to detect the PXE architecture option in the client's DHCP request and add the appropriate boot information to the DHCP response. If you happen to be using ISC dhcpd as your DHCP server, the part of DHCP server configuration that relates to network boot should be similar to this:



option pxearch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <IP address of boot server>; # bootp style option
option tftp-server-name "<IP address of boot server>"; # DHCP style option
if option pxearch = 00:10 {
# 0x0010 = UEFI 2.5 HTTP boot for x86_64
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>";
} elsif option pxearch = 00:0f {
# 0x000f = UEFI 2.5 HTTP boot for 32-bit x86
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>"
} elsif option pxearch = 00:09 {
# TFTP-based UEFI PXE boot for x86_64 according to original RFC 4578
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # size of grubx64.efi as reported by "du -B 512 grubx64.efi"
} elsif option pxearch = 00:07 {
# TFTP-based UEFI PXE boot for x86_64 according to current IANA registry
# and RFC 4578 errata
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # as above
} elsif option pxearch = 00:06 {
# TFTP-based UEFI PXE boot for 32-bit x86
filename "/some/TFTP/path/grubia32.efi";
option boot-size <nnnn>;
} else {
# plain old x86 BIOS PXE boot options here
}

# end of PXE boot specific options
}





share|improve this answer












The Release Notes for the latest firmware for your board (November 2018 release) seems to indicate that the 64-bit version of the firmware actually does support network boot, even using the HTTP/HTTPS protocols. Only the 32-bit version of the firmware still has the UEFI network support disabled. Perhaps a firmware upgrade would solve your problem?



I see you are using efinet as your GRUB network driver module. I think it assumes that the firmware will have already initialized the network interface and received an IP address, either by DHCP or from firmware configuration.



If the firmware won't initialize the hardware and provide the appropriate UEFI protocol for GRUB to use, the efinet driver won't work... unless of course you find the right UEFI network driver from Intel's support webpages and do some UEFI scripting to first load and configure the NIC driver and the TCP/IP driver stack from some other media before starting up grubx64.efi. But that would sort of defeat the purpose of network boot.



To support UEFI PXE boot and UEFI 2.5 HTTP(S) boot, your DHCP server will need to be able to detect the PXE architecture option in the client's DHCP request and add the appropriate boot information to the DHCP response. If you happen to be using ISC dhcpd as your DHCP server, the part of DHCP server configuration that relates to network boot should be similar to this:



option pxearch code 93 = unsigned integer 16;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server <IP address of boot server>; # bootp style option
option tftp-server-name "<IP address of boot server>"; # DHCP style option
if option pxearch = 00:10 {
# 0x0010 = UEFI 2.5 HTTP boot for x86_64
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>";
} elsif option pxearch = 00:0f {
# 0x000f = UEFI 2.5 HTTP boot for 32-bit x86
filename "<HTTP or HTTPS URL pointing to a .efi bootloader file>"
} elsif option pxearch = 00:09 {
# TFTP-based UEFI PXE boot for x86_64 according to original RFC 4578
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # size of grubx64.efi as reported by "du -B 512 grubx64.efi"
} elsif option pxearch = 00:07 {
# TFTP-based UEFI PXE boot for x86_64 according to current IANA registry
# and RFC 4578 errata
filename "/some/TFTP/path/grubx64.efi";
option boot-size <nnnn>; # as above
} elsif option pxearch = 00:06 {
# TFTP-based UEFI PXE boot for 32-bit x86
filename "/some/TFTP/path/grubia32.efi";
option boot-size <nnnn>;
} else {
# plain old x86 BIOS PXE boot options here
}

# end of PXE boot specific options
}






share|improve this answer












share|improve this answer



share|improve this answer










answered Dec 10 at 20:15









telcoM

15.6k12143




15.6k12143












  • Thanks. See my edit.
    – Insane Coder
    Dec 11 at 11:07










  • I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
    – Insane Coder
    Dec 11 at 11:07


















  • Thanks. See my edit.
    – Insane Coder
    Dec 11 at 11:07










  • I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
    – Insane Coder
    Dec 11 at 11:07
















Thanks. See my edit.
– Insane Coder
Dec 11 at 11:07




Thanks. See my edit.
– Insane Coder
Dec 11 at 11:07












I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
– Insane Coder
Dec 11 at 11:07




I am currently checking this kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt as solution to my final problem.
– Insane Coder
Dec 11 at 11:07


















draft saved

draft discarded




















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f486829%2fhow-to-boot-linux-kernel-from-network-through-grub2-console%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Morgemoulin

Scott Moir

Souastre