Bug#755256: [PATCH] grub-install: Include all decompressor modules in pvxen core image.
Andrei Borzenkov
arvidjaar at gmail.com
Sun Nov 30 11:31:01 UTC 2014
В Fri, 28 Nov 2014 17:25:55 +0000
Ian Campbell <ijc at hellion.org.uk> пишет:
> On Fri, 2014-11-28 at 20:09 +0300, Andrei Borzenkov wrote:
> > В Fri, 28 Nov 2014 08:33:34 +0000
> > Ian Campbell <ijc at hellion.org.uk> пишет:
> >
> > > From: Ian Campbell <ijc at debian.org>
> > >
> > > This avoids needing to update all the native update-grub stanzas to also probe
> > > for and arrange to load the relevant decompressor, which would be wasteful on
> > > native boots.
> > >
> >
> > Could you give some more details why you need it?
>
> In order to boot a Linux kernel under Xen grub needs to extract the ELF
> file from the bzImage payload, which is compressed.
>
> The compression algo is a kernel compile time option, gz and xz are the
> most probably ones today.
>
Not directly related but I this comment in Makefile draw my attention:
# Note that the bytes added by size_append will make the xz tool think that
# the file is corrupt. This is expected.
We probably never read vmlinuz to the end anyway, but I wonder if it
could be an issue.
> > > +push_all_decompressor_modules(void)
> > > +{
> > > + grub_install_push_module ("gzio");
> > > + grub_install_push_module ("xzio");
> > > + grub_install_push_module ("lzopio");
> > > +}
> > > +
> >
> > It is not enough. Some of them need another modules that are autoloaded
> > by normal.
>
> autoloading should work, I think.
>
OK, so you need it post-normal. core.img is really about getting access
to /boot/grub; anything else can be done from within grub.cfg. If you
do not want to load other filters unconditionally, just use
if [ x$grub_platform = xxen ]; then
insmod xzio
fi
But as far as I understand, CONFIG_KERNEL_XZ is not really dependent on
Xen; so we may want to either load them for real hardware as well or -
better - extend grub-file to check for compression method.
> But if not -- how can one determine which modules are required and/or
> arrange for them to be added automatically?
>
> >
> > > +static void
> > > probe_mods (grub_disk_t disk)
> > > {
> > > grub_partition_t part;
> > > @@ -1228,6 +1236,23 @@ main (int argc, char *argv[])
> > > }
> > > }
> > >
> > > +
> > > + switch (platform)
> > > + {
> > > + case GRUB_INSTALL_PLATFORM_I386_XEN:
> > > + case GRUB_INSTALL_PLATFORM_X86_64_XEN:
> > > + /* When booting a Xen PV kernel grub may need to decompress the
> > > + * kernel which may use a variety of algorithmns. Since we try
> > > + * to reuse the native grub.cfg files rather than trying to
> > > + * insmod the relevant decompressors on the fly we build them
> > > + * into the core image. This means we avoid needlessly loading
> > > + * modules on native. */
> > > + push_all_decompressor_modules();
> > > + break;
> > > + default:
> > > + break;
> > > + }
> > > +
> > > grub_install_copy_files (grub_install_source_directory,
> > > grubdir, platform);
> > >
> >
> >
>
>
More information about the Pkg-grub-devel
mailing list