Jarrod B Johnson
2011-08-16 20:55:46 UTC
Ok, after learning about the wonderful world of UEFI calling conventions, I
have a workable copy of my patch. It probably only compiles right under
gcc on x864_64 under linux (mainly due to the hackish approach to calling
convention coping). I presume there is some gcc magic I need to put in the
code or on the commandline to handle the calling convention change for me,
but I will put it out there as-is instead of waiting to figure it out
(really hoping someone else out there knows all this stuff).
In 'legacy' world, you can build ipxe and the syslinux pxelinux.0 and have
the latter detect and make use of the former (they go a step further and
actually bundle both in a single binary). This gives pxelinux.0 the iPXE
protocol support without having to change much.
This is the analogous capability for elilo. It comes in two halves. iPXE
needed to have capabilities exposed in a UEFI protocol in much the same way
it exports it in real mode. VMware largely did the work for their own boot
loader, so that was just ported in. Those patches to ipxe are:
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/d748ebf72206dcde1379b063fd9b533f7572caa5
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/e7b41890bc67350a9f5bcf7291ec859fa2174e26
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/45a51f99fd51b231a388b1db00dfc4b18a5e9e4f
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/23aea6c209965546c39569a770823eabf1358a71
Apply those and 'make bin-x86_64-efi/snponly.efi and you have something
much like undionly.kkpxe, but for UEFI.
My (admittedly shoddy) patch is attached.
The fruit of my labor:
88879.550706 192.168.121.208 -> 192.168.127.253 TFTP Read Request, File:
snponly.efi\000, Transfer type: octet\000
88879.551387 192.168.121.208 -> 192.168.127.253 TFTP Read Request, File:
snponly.efi\000, Transfer type: octet\000
88879.864373 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/xnba/nodes/fr1 HTTP/1.1
88879.865929 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/elilo-x64.efi HTTP/1.1
88879.872902 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/C0A879D0.conf HTTP/1.1
88880.466286 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/rhels6/x86_64/vmlinuz HTTP/1.1
88880.561916 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/rhels6/x86_64/initrd.img HTTP/1.1
(See attached file: elilo-ipxe.patch)
have a workable copy of my patch. It probably only compiles right under
gcc on x864_64 under linux (mainly due to the hackish approach to calling
convention coping). I presume there is some gcc magic I need to put in the
code or on the commandline to handle the calling convention change for me,
but I will put it out there as-is instead of waiting to figure it out
(really hoping someone else out there knows all this stuff).
In 'legacy' world, you can build ipxe and the syslinux pxelinux.0 and have
the latter detect and make use of the former (they go a step further and
actually bundle both in a single binary). This gives pxelinux.0 the iPXE
protocol support without having to change much.
This is the analogous capability for elilo. It comes in two halves. iPXE
needed to have capabilities exposed in a UEFI protocol in much the same way
it exports it in real mode. VMware largely did the work for their own boot
loader, so that was just ported in. Those patches to ipxe are:
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/d748ebf72206dcde1379b063fd9b533f7572caa5
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/e7b41890bc67350a9f5bcf7291ec859fa2174e26
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/45a51f99fd51b231a388b1db00dfc4b18a5e9e4f
https://git.ipxe.org/people/jbjohnso/ipxe.git/commit/23aea6c209965546c39569a770823eabf1358a71
Apply those and 'make bin-x86_64-efi/snponly.efi and you have something
much like undionly.kkpxe, but for UEFI.
My (admittedly shoddy) patch is attached.
The fruit of my labor:
88879.550706 192.168.121.208 -> 192.168.127.253 TFTP Read Request, File:
snponly.efi\000, Transfer type: octet\000
88879.551387 192.168.121.208 -> 192.168.127.253 TFTP Read Request, File:
snponly.efi\000, Transfer type: octet\000
88879.864373 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/xnba/nodes/fr1 HTTP/1.1
88879.865929 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/elilo-x64.efi HTTP/1.1
88879.872902 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/C0A879D0.conf HTTP/1.1
88880.466286 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/rhels6/x86_64/vmlinuz HTTP/1.1
88880.561916 192.168.121.13 -> 192.168.127.253 HTTP
GET /tftpboot/xcat/rhels6/x86_64/initrd.img HTTP/1.1
(See attached file: elilo-ipxe.patch)