Robie Basak
2012-Aug-31 09:32 UTC
[syslinux] Other projects using pxelinux.cfg behaviour and architecture detection
Hi, I have a problem with architecture detection on non-Intel pxelinux emulators that I'd like to raise with you. This doesn't directly affect pxelinux and doesn't require any changes at your end, but I thought that you should be aware of it as there are some compatibility implications. I'm not sure if you're aware of pxelinux's TFTP fetch behaviour and the pxelinux.cfg/syslinux having become a de facto standard on other architectures. ARM machines needed a method to netboot Linux in a way configurable by the boot server, so U-Boot (a common ARM bootloader) adopted pxelinux's TFTP config file fallback mechanism and a subset of the syslinux/pxelinux config file format. When working on net booting across architectures, this means that the same TFTP server can boot Intel (via PXE and pxelinux) and ARM (via U-Boot which emulates pxelinux's behaviour) in much the same way. So your documentation of syslinux and pxelinux has also become a reference for others who are emulating pxelinux's behaviour. Thank you! Now the problem. This all works fine if the MAC addresses and architectures are known in advance, but if they aren't, then the booting machine will fall back to pxelinux.cfg/default. At this point, we don't know which architecture's kernel to use, since both pxelinux and U-Boot will fall back to this file without an appropriate indication of which architecture is being fetched. I have proposed a solution which solves this by imposing an extra requirement on pxelinux emulators only (and not on pxelinux itself). It simply involves emulators fetching a pxelinux.cfg/default.<arch>-<subarch> file when running on non-Intel architectures, before falling back to pxelinux.cfg/default as usual. This way, Intel-only environments carry on as usual. Heterogeneuous architecture environments can use pxelinux.cfg/default for Intel, and also specify extra ones for other architectures, and everything should just work. This solution introduces a new (arch, subarch) namespace, and ideally it would be shared across all emulators. But there isn't any central reference point for this except in your documentation. Do you think it would be appropriate to define this mechanism and namespace here, even if pxelinux never uses it directly? And do you have any other comment on this? Is there a better solution to this problem? Further reading: my email to the cross-distro list[1] and the bug I'm using to track this[2]. Thanks, Robie [1] http://lists.linaro.org/pipermail/cross-distro/2012-August/000368.html [2] https://launchpad.net/bugs/1041092