diff --git a/ChangeLog b/ChangeLog index f742c0a43..03c09cf1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-03-30 Robert Millan + + * loader/i386/linux.c (grub_cmd_linux): Check for zImage before + checking for abi version. Improve error messages on BIOS to notify + user about `linux16' command. + 2009-03-29 Vladimir Serbinenko Leak fixes diff --git a/loader/i386/linux.c b/loader/i386/linux.c index 9deb40ff1..33b6d8659 100644 --- a/loader/i386/linux.c +++ b/loader/i386/linux.c @@ -492,18 +492,26 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)), goto fail; } - /* FIXME: Is 2.02 recent enough for 32-bit boot? */ - if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) - || grub_le_to_cpu16 (lh.version) < 0x0203) + if (! (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) { - grub_error (GRUB_ERR_BAD_OS, "too old version"); + grub_error (GRUB_ERR_BAD_OS, "zImage doesn't support 32-bit boot" +#ifdef GRUB_MACHINE_PCBIOS + " (try with `linux16')" +#endif + ); goto fail; } - /* zImage doesn't support 32-bit boot. */ - if (! (lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) + /* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and + still not support 32-bit boot. */ + if (lh.header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) + || grub_le_to_cpu16 (lh.version) < 0x0203) { - grub_error (GRUB_ERR_BAD_OS, "zImage is not supported"); + grub_error (GRUB_ERR_BAD_OS, "version too old for 32-bit boot" +#ifdef GRUB_MACHINE_PCBIOS + " (try with `linux16')" +#endif + ); goto fail; }