Message ID | CAMdYzYoqKcG+LtFZy+TeYWB=GJo8Ya60r3Los4T5j7j3Okdbtw@mail.gmail.com |
---|---|
State | Deferred |
Headers | show |
Series | arm: Add support for ZSTD compressed kernel | expand |
On Thu, Aug 06, 2020 at 05:46:50PM -0400, Peter Geis wrote: > Good Evening, > > I had attempted to get this working as well, but have run into > difficulties with both my implementation and yours as well. > My implementation was almost the same as yours, with the exception of > also changing: > @@ -303,7 +305,7 @@ restart: adr r0, LC1 > > #ifndef CONFIG_ZBOOT_ROM > /* malloc space is above the relocated stack (64k max) */ > - add r10, sp, #0x10000 > + add r10, sp, #0x30000 > #else > /* > * With ZBOOT_ROM the bss/stack is non relocatable, > > On QEMU this implementation works fine. > However on bare metal tegra30, I get the following error: > > Jumping to kernel at:4861 ms > > C:0x80A000C0-0x8112BA40->0x8152C700-0x81C58080 > Uncompressing Linux... > > ZSTD-compressed dstSize is too small > > -- System halted > > The only difference between the bare metal test and the qemu test is > the zImage with appended dtb is packaged in the android boot format > for the bare metal test. > Otherwise it's exactly the same file. So it's relocating the compressed kernel and decompressor from 0x80A000C0-0x8112BA40 to 0x8152C700-0x81C58080 and then failing. Does the QEMU version also do similar? On the off-hand, I'm not sure why it should fail. I assume that you've tried the other decompressors and they work fine on the same setups?
On Thu, Aug 6, 2020 at 6:22 PM Russell King - ARM Linux admin <linux@armlinux.org.uk> wrote: > > On Thu, Aug 06, 2020 at 05:46:50PM -0400, Peter Geis wrote: > > Good Evening, > > > > I had attempted to get this working as well, but have run into > > difficulties with both my implementation and yours as well. > > My implementation was almost the same as yours, with the exception of > > also changing: > > @@ -303,7 +305,7 @@ restart: adr r0, LC1 > > > > #ifndef CONFIG_ZBOOT_ROM > > /* malloc space is above the relocated stack (64k max) */ > > - add r10, sp, #0x10000 > > + add r10, sp, #0x30000 > > #else > > /* > > * With ZBOOT_ROM the bss/stack is non relocatable, > > > > On QEMU this implementation works fine. > > However on bare metal tegra30, I get the following error: > > > > Jumping to kernel at:4861 ms > > > > C:0x80A000C0-0x8112BA40->0x8152C700-0x81C58080 > > Uncompressing Linux... > > > > ZSTD-compressed dstSize is too small > > > > -- System halted > > > > The only difference between the bare metal test and the qemu test is > > the zImage with appended dtb is packaged in the android boot format > > for the bare metal test. > > Otherwise it's exactly the same file. > > So it's relocating the compressed kernel and decompressor from > 0x80A000C0-0x8112BA40 to 0x8152C700-0x81C58080 and then failing. > Does the QEMU version also do similar? Here is the output from QEMU, note boot doesn't work because this image isn't for QEMU: C:0x400100C0-0x4073B1E0->0x4152C600-0x41C57720 Uncompressing Linux... done, booting the kernel. > > On the off-hand, I'm not sure why it should fail. I assume that > you've tried the other decompressors and they work fine on the > same setups? Correct, all other compressors work. ZSTD is handy for arm because size and speed are both important. > > -- > RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ > FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
diff --git a/lib/decompress_unzstd.c b/lib/decompress_unzstd.c index 062617bb0afe..89ac73e900ce 100644 --- a/lib/decompress_unzstd.c +++ b/lib/decompress_unzstd.c @@ -103,10 +103,14 @@ static int INIT handle_zstd_error(size_t ret, void (*error)(char *x)) error("Input is not in the ZSTD format (wrong magic bytes)"); break; case ZSTD_error_dstSize_tooSmall: + error("ZSTD-compressed dstSize is too small"); + break; case ZSTD_error_corruption_detected: - case ZSTD_error_checksum_wrong: error("ZSTD-compressed data is corrupt"); break; + case ZSTD_error_checksum_wrong: + error("ZSTD-compressed data checksum is wrong"); + break; default: error("ZSTD-compressed data is probably corrupt");