diff --git a/tools/extract_boot_files/extract-ramdisk.pl b/tools/extract_boot_files/extract-ramdisk.pl index 9d66c22..8177b2e 100755 --- a/tools/extract_boot_files/extract-ramdisk.pl +++ b/tools/extract_boot_files/extract-ramdisk.pl @@ -29,12 +29,24 @@ my($ram1) = substr($bootimg, $ram1Addr, $ram1Size); -if (substr($ram1, 0, 2) ne "\x1F\x8B") +my $compressformat = "gz"; +my $compressprogram = "gzip -d -c"; + +if (substr($ram1, 0, 2) eq "\x1F\x8B") +{ + $compressformat = "gz"; + $compressprogram = "gzip -d -c"; +} +elsif (substr($ram1, 0, 2) eq "\x02\x21") { - die "The boot image does not appear to contain a valid gzip file"; + $compressformat = "lz4"; + $compressprogram = "lz4c -d"; +} +else{ + die "The boot image does not appear to contain a valid gzip or lz4 file"; } -open (RAM1FILE, ">$ARGV[0]-ramdisk.cpio.gz"); +open (RAM1FILE, ">$ARGV[0]-ramdisk.cpio.$compressformat"); binmode(RAM1FILE); print RAM1FILE $ram1 or die; close RAM1FILE; @@ -46,5 +58,5 @@ mkdir "$ARGV[0]-ramdisk" or die; chdir "$ARGV[0]-ramdisk" or die; -system ("gzip -d -c ../$ARGV[0]-ramdisk.cpio.gz | cpio -i"); -system ("rm -f ../$ARGV[0]-ramdisk.cpio.gz"); +system ("$compressprogram ../$ARGV[0]-ramdisk.cpio.$compressformat | cpio -i"); +system ("rm -f ../$ARGV[0]-ramdisk.cpio.$compressformat");