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