diff mbox series

[RESEND] mips: ralink: allow zboot

Message ID 20190321170334.15122-2-thirtythreeforty@gmail.com (mailing list archive)
State Rejected
Headers show
Series [RESEND] mips: ralink: allow zboot | expand

Commit Message

George Hilliard March 21, 2019, 5:03 p.m. UTC
Architecturally, there's nothing preventing compressed images from
working.  Bootloaders built with support for the various compression
methods can decompress and run the kernel.  In practice, many
bootloaders do not support compressed images, but kernels for those
boards should just not be compressed.

Tested on an MT7688 with U-Boot doing LZMA decompression of uImage.

Signed-off-by: George Hilliard <thirtythreeforty@gmail.com>
---
 arch/mips/Kconfig | 1 +
 1 file changed, 1 insertion(+)

Comments

Aaro Koskinen March 21, 2019, 10:01 p.m. UTC | #1
Hi,

On Thu, Mar 21, 2019 at 11:03:34AM -0600, George Hilliard wrote:
> Architecturally, there's nothing preventing compressed images from
> working.  Bootloaders built with support for the various compression
> methods can decompress and run the kernel.  In practice, many
> bootloaders do not support compressed images, but kernels for those
> boards should just not be compressed.

With zboot the decompressor is included in the image so no bootloader
support is needed.

A.
George Hilliard March 21, 2019, 11:10 p.m. UTC | #2
My version of U-Boot complains if I compile out LZMA support:
---
=> tftpboot 0x81000000 uImage; tftpboot 0x84000000 hawkeye.dtb; bootm
0x81000000 - 0x84000000
(snip)
Bytes transferred = 7349 (1cb5 hex)
## Booting kernel from Legacy Image at 81000000 ...
   Image Name:   Linux-5.1.0-rc1
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    1465871 Bytes = 1.4 MiB
   Load Address: 80000000
   Entry Point:  80344338
   Verifying Checksum ... OK
## Flattened Device Tree blob at 84000000
   Booting using the fdt blob at 0x84000000
   Uncompressing Kernel Image ... Unimplemented compression type 3
exit not allowed from main input shell.
=>
---

Thanks,
George

On Thu, Mar 21, 2019 at 4:56 PM Aaro Koskinen <aaro.koskinen@iki.fi> wrote:
>
> Hi,
>
> On Thu, Mar 21, 2019 at 11:03:34AM -0600, George Hilliard wrote:
> > Architecturally, there's nothing preventing compressed images from
> > working.  Bootloaders built with support for the various compression
> > methods can decompress and run the kernel.  In practice, many
> > bootloaders do not support compressed images, but kernels for those
> > boards should just not be compressed.
>
> With zboot the decompressor is included in the image so no bootloader
> support is needed.
>
> A.
Paul Burton March 21, 2019, 11:40 p.m. UTC | #3
Hi George,

On Thu, Mar 21, 2019 at 05:10:38PM -0600, George Hilliard wrote:
> My version of U-Boot complains if I compile out LZMA support:
> ---
> => tftpboot 0x81000000 uImage; tftpboot 0x84000000 hawkeye.dtb; bootm
> 0x81000000 - 0x84000000
> (snip)
> Bytes transferred = 7349 (1cb5 hex)
> ## Booting kernel from Legacy Image at 81000000 ...
>    Image Name:   Linux-5.1.0-rc1
>    Image Type:   MIPS Linux Kernel Image (lzma compressed)
>    Data Size:    1465871 Bytes = 1.4 MiB
>    Load Address: 80000000
>    Entry Point:  80344338
>    Verifying Checksum ... OK
> ## Flattened Device Tree blob at 84000000
>    Booting using the fdt blob at 0x84000000
>    Uncompressing Kernel Image ... Unimplemented compression type 3
> exit not allowed from main input shell.
> =>
> ---

There you're using a uImage though, which is different to
CONFIG_SYS_SUPPORTS_ZBOOT. Even without CONFIG_SYS_SUPPORTS_ZBOOT
enabled, you can build either a compressed or uncompressed uImage.

Some platforms enable one of those targets by default but it doesn't
appear that ralink does, so I guess you're specifying a uImage.lzma
target when building the kernel? Try doing that when
CONFIG_SYS_SUPPORTS_ZBOOT isn't enabled - it'll still generate the same
type of LZMA-compressed uImage.

What CONFIG_SYS_SUPPORTS_ZBOOT does is produce a program (vmlinuz) which
contains a compressed version of vmlinux.bin along with some code to
decompress it. The decompression is performed by vmlinuz itself, not by
U-Boot.

A uImage in contrast is just the compressed (or uncompressed)
vmlinux.bin with a header prepended that U-Boot uses to understand what
it's loading. If the header says the data is compressed with LZMA then
U-Boot will need to support LZMA decompression.

What U-Boot is complaining about there is that you gave it a uImage
that's LZMA compressed & your build of U-Boot itself doesn't support
LZMA. That has nothing to do with CONFIG_SYS_SUPPORTS_ZBOOT or whether
the kernel binary itself supports any particular compression algorithm -
it's purely down to the configuration of your copy of U-Boot.

Options would be to rebuild U-Boot with LZMA support enabled, or to use
a different compression for your uImage that U-Boot already supports.
eg. you could specify that you want to use gzip:

  $ make ARCH=mips uImage.gz

That would give you an image that will work so long as U-Boot supports
gzip decompression, or:

  $ make ARCH=mips uImage.bin

That would give you an uncompressed uImage which U-Boot always supports.

Now it could still be valid to select CONFIG_SYS_SUPPORTS_ZBOOT if you
had a need for a better compression algorithm & couldn't update your
bootloader to support it, but that would be solving a different problem
than your commit message claims & it wouldn't matter at all whether the
bootloader supports a particular compression algorithm.

Thanks,
    Paul
George Hilliard March 22, 2019, 12:29 a.m. UTC | #4
On Thu, Mar 21, 2019 at 5:40 PM Paul Burton <paul.burton@mips.com> wrote:
> On Thu, Mar 21, 2019 at 05:10:38PM -0600, George Hilliard wrote:
> > My version of U-Boot complains if I compile out LZMA support:
> > ---
> > => tftpboot 0x81000000 uImage; tftpboot 0x84000000 hawkeye.dtb; bootm
> > 0x81000000 - 0x84000000
> > (snip)
> > Bytes transferred = 7349 (1cb5 hex)
> > ## Booting kernel from Legacy Image at 81000000 ...
> >    Image Name:   Linux-5.1.0-rc1
> >    Image Type:   MIPS Linux Kernel Image (lzma compressed)
> >    Data Size:    1465871 Bytes = 1.4 MiB
> >    Load Address: 80000000
> >    Entry Point:  80344338
> >    Verifying Checksum ... OK
> > ## Flattened Device Tree blob at 84000000
> >    Booting using the fdt blob at 0x84000000
> >    Uncompressing Kernel Image ... Unimplemented compression type 3
> > exit not allowed from main input shell.
> > =>
> > ---
>
> There you're using a uImage though, which is different to
> CONFIG_SYS_SUPPORTS_ZBOOT. Even without CONFIG_SYS_SUPPORTS_ZBOOT
> enabled, you can build either a compressed or uncompressed uImage.
>
> Some platforms enable one of those targets by default but it doesn't
> appear that ralink does, so I guess you're specifying a uImage.lzma
> target when building the kernel? Try doing that when
> CONFIG_SYS_SUPPORTS_ZBOOT isn't enabled - it'll still generate the same
> type of LZMA-compressed uImage.

OK, Buildroot was obfuscating this a little from me.  I selected its LZMA
compression option, and nothing happened.  Asking for LZMA does not make it
build uImage.lzma.  Selecting the *kernel's* KERNEL_LZMA option caused
Buildroot's `make uImage` to make the same sort of image as made by
`make uImage.lzma` as you suggest, for a reason I have not figured out.

> What CONFIG_SYS_SUPPORTS_ZBOOT does is produce a program (vmlinuz) which
> contains a compressed version of vmlinux.bin along with some code to
> decompress it. The decompression is performed by vmlinuz itself, not by
> U-Boot.

OK, that makes more sense.  I have not tested zboot then :)

> Now it could still be valid to select CONFIG_SYS_SUPPORTS_ZBOOT if you
> had a need for a better compression algorithm & couldn't update your
> bootloader to support it, but that would be solving a different problem
> than your commit message claims & it wouldn't matter at all whether the
> bootloader supports a particular compression algorithm.

Yeah, I agree.  I will just make a uImage.lzma, which is what I was after
anyway.

Thank you very much for the explanation!

George
diff mbox series

Patch

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 4a5f5b0ee9a9..b286fbbd9699 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -619,6 +619,7 @@  config RALINK
 	select SYS_SUPPORTS_32BIT_KERNEL
 	select SYS_SUPPORTS_LITTLE_ENDIAN
 	select SYS_SUPPORTS_MIPS16
+	select SYS_SUPPORTS_ZBOOT
 	select SYS_HAS_EARLY_PRINTK
 	select CLKDEV_LOOKUP
 	select ARCH_HAS_RESET_CONTROLLER