On 2016-07-13, dann frazier wrote: > flash-kernel currently always sets the compression type to "none" when > generating uImages. However, if the source vmlinuz file is gzip'd - as > is the case if you build the "Image.gz" kernel target - this will > prevent U-Boot from being able to boot it[1]. If the uImage is > generated with a compression type of "gzip", then it boots fine. > > The attached patch checks the source image type and sets the > compression setting appropriately. > > [1] At least, this is true on APM Mustang systems Sorry for the long delay... Untested and refreshed patch against current git attached. live well, vagrant
From 846e0fec533875605d58a93aa0680fcc31c06c62 Mon Sep 17 00:00:00 2001
From: dann frazier <dannf@debian.org>
Date: Thu, 23 May 2019 10:26:06 -0700
Subject: [PATCH] support gzip'd kernel image (Closes: #831003).
(Refreshed: Vagrant Cascadian flash-kernel 3.99~)
---
functions | 18 +++++++++++++++++-
test_functions | 25 +++++++++++++++++++++----
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/functions b/functions
index 1533192..44bc822 100644
--- a/functions
+++ b/functions
@@ -432,15 +432,31 @@ get_kernel_cmdline_defaults() {
echo "$LINUX_KERNEL_CMDLINE_DEFAULTS"
}
+compress_type() {
+ local file="$1"
+ magic="$(od -x -N2 $file | head -1 | cut -d' ' -f2)"
+ case $magic in
+ 8b1f)
+ echo "gzip"
+ ;;
+ *)
+ echo "none"
+ ;;
+ esac
+}
+
mkimage_kernel() {
local kaddr="$1"
local epoint="$2"
local kdesc="$3"
local kdata="$4"
local uimage="$5"
+ local comp
+
+ comp="$(compress_type $kdata)"
printf "Generating kernel u-boot image... " >&2
- mkimage -A "$mkarch" -O linux -T kernel -C none -a "$kaddr" -e "$epoint" \
+ mkimage -A "$mkarch" -O linux -T kernel -C "$comp" -a "$kaddr" -e "$epoint" \
-n "$kdesc" -d "$kdata" "$uimage" >&2 1>/dev/null
echo "done." >&2
}
diff --git a/test_functions b/test_functions
index eeea52f..74f7880 100755
--- a/test_functions
+++ b/test_functions
@@ -561,7 +561,9 @@ test_set_machine_id() {
}
add_test test_set_machine_id
-test_mkimage_kernel() {
+_test_mkimage_kernel() {
+ local kdata="$1"
+ local expected="$2"
(
mkimage() {
saved_args="$@"
@@ -569,16 +571,31 @@ test_mkimage_kernel() {
. "$functions"
saved_args=""
mkarch="arm"
- mkimage_kernel "0xdeadbeef" "0xbaddcafe" "desc" "input" "output" 2>/dev/null
- expected="-A arm -O linux -T kernel -C none -a 0xdeadbeef -e 0xbaddcafe -n desc -d input output"
+ mkimage_kernel "0xdeadbeef" "0xbaddcafe" "desc" "$kdata" "output" 2>/dev/null
if [ "$expected" != "$saved_args" ]; then
echo "Expected mkimage_kernel to be called with \"$expected\" but it was called with \"$saved_args\"" >&2
- exit 1
+ return 1
fi
)
}
+
+test_mkimage_kernel() {
+ local kdata="/dev/zero"
+ local expected="-A arm -O linux -T kernel -C none -a 0xdeadbeef -e 0xbaddcafe -n desc -d $kdata output"
+ _test_mkimage_kernel "$kdata" "$expected" || exit 1
+}
add_test test_mkimage_kernel
+test_mkimage_kernel_gzip() {
+ local kdata="$(mktemp)"
+ gzip < /dev/null > "$kdata"
+
+ local expected="-A arm -O linux -T kernel -C gzip -a 0xdeadbeef -e 0xbaddcafe -n desc -d $kdata output"
+ _test_mkimage_kernel "$kdata" "$expected" || exit 1
+ rm -f "$kdata"
+}
+add_test test_mkimage_kernel_gzip
+
test_mkimage_initrd() {
(
mkimage() {
--
2.20.1
Attachment:
signature.asc
Description: PGP signature