Bug#755256: [PATCH] grub-install: Include all decompressor modules in pvxen core image.

Ian Campbell ijc at hellion.org.uk
Sun Nov 30 11:51:19 UTC 2014


On Sun, 2014-11-30 at 14:31 +0300, Andrei Borzenkov wrote:
> В 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.

I've no idea. I don't see that comment anywhere in either Linux nor Grub
codebase though. I do know that insmod xzio makes grub capable of
booting the Debian kernel.

> > > > +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

I think that could work. Is adding Xen specific stuff to grub.cfg the
preferred way to do this sort of thing then?

> 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.

On native the bootloader has no reason to decompress the Linux bzImage
payload, the kernel itself can do so. AFAIK decompression is only need
for Xen (and for certain userspace tools like crash and other debuggers,
but they aren't relevant here).

> > But if not -- how can one determine which modules are required and/or
> > arrange for them to be added automatically?

You'd have to peer into the kernel image, use the bzImage header fields
to locate the payload and then do magic number probing to figure out
which compression algorithm is used.

Ian.



More information about the Pkg-grub-devel mailing list