В Tue, 3 Feb 2015 22:00:58 +0000 Eric Ewanco <[email protected]> пишет:
> We have a special application (GNU/Linux 3.4.47, x86_64, BIOS, PXE, OpenSuSE > grub2-2.00-1.6.1) that requires large initrds. We are approaching the 462M > size limit that appears to exist on our architecture. Since we have 16G of > memory I'm not sure I understand where the 462M maximum size (specifically, > GRUB_LINUX_INITRD_MAX_ADDRESS in include/i386/linux.h, which is 0x37FFFFFF, > unchanged in the bleeding-edge code) comes from. Understanding this choice > of value for the ceiling seems to require some background I don't have and > can't find. I've been studying the code (grub-core/loader/i386/linux.c) and > doing a lot of research but I'm unable to gain any traction. Can a developer > point me in the right direction or offer some helpful background? Could this > be a one-size-fits-all/least-common-denominator value that might be tweakable > upward for our particular hardware, or is it a hard architectural limit? Is > this a 32-bit limit of some sort? 0x37FFFFFF was max address available for initrd before bootloader protocol 2.03. Comments in grub-core/loader/i386/linux.c suggest that even later Linux could get it wrong, so it was clamped to least common value for safety. See Documentation/x86/boot.txt in Linux source tree. I do not know concrete examples when Linux set initrd_addr_maxm incorrectly, you may want to ask on Linux list if something is known. > > Much appreciated. > > Eric > > > _______________________________________________ Help-grub mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-grub
