How to boot linux kernel from network through GRUB2 console?
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
add a comment |
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
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
add a comment |
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
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
linux boot grub2 boot-loader tftp
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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
}
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
}
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
add a comment |
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
}
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
add a comment |
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
}
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
}
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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