Makefile, copy-firmware: support xz/zstd compressed firmware
The kernel has supported compressed firmware for quite some time. So let's add a couple of targets to produce that. In practical terms this means it we'll use ~5x times less space on disk. Reportedly the amd ucode, needs to be uncompressed _within_ the initrd in order to work. Using compressed ucode in late load just works. Ideally this will be addressed by the initrd generators, but considering the files are tiny in size let's skip the compression. v2 - commit message, skip compression for files annotated as Raw v3 - rebase [Drop extra verbose statement in zstd case, Josh Boyer <jwboyer@kernel.org>] Cc: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Josh Boyer <jwboyer@kernel.org>
This commit is contained in:
parent
ad2ce8beee
commit
ee91452dac
8
Makefile
8
Makefile
|
@ -11,3 +11,11 @@ check:
|
||||||
install:
|
install:
|
||||||
install -d $(DESTDIR)$(FIRMWAREDIR)
|
install -d $(DESTDIR)$(FIRMWAREDIR)
|
||||||
./copy-firmware.sh $(DESTDIR)$(FIRMWAREDIR)
|
./copy-firmware.sh $(DESTDIR)$(FIRMWAREDIR)
|
||||||
|
|
||||||
|
install-xz:
|
||||||
|
install -d $(DESTDIR)$(FIRMWAREDIR)
|
||||||
|
./copy-firmware.sh --xz $(DESTDIR)$(FIRMWAREDIR)
|
||||||
|
|
||||||
|
install-zst:
|
||||||
|
install -d $(DESTDIR)$(FIRMWAREDIR)
|
||||||
|
./copy-firmware.sh --zstd $(DESTDIR)$(FIRMWAREDIR)
|
||||||
|
|
5
WHENCE
5
WHENCE
|
@ -3890,14 +3890,19 @@ License: Redistributable. See LICENSE.amd-sev for details
|
||||||
Driver: microcode_amd - AMD CPU Microcode Update Driver for Linux
|
Driver: microcode_amd - AMD CPU Microcode Update Driver for Linux
|
||||||
|
|
||||||
File: amd-ucode/microcode_amd.bin
|
File: amd-ucode/microcode_amd.bin
|
||||||
|
Raw: amd-ucode/microcode_amd.bin
|
||||||
Version: 2013-07-10
|
Version: 2013-07-10
|
||||||
File: amd-ucode/microcode_amd_fam15h.bin
|
File: amd-ucode/microcode_amd_fam15h.bin
|
||||||
|
Raw: amd-ucode/microcode_amd_fam15h.bin
|
||||||
Version: 2018-05-24
|
Version: 2018-05-24
|
||||||
File: amd-ucode/microcode_amd_fam16h.bin
|
File: amd-ucode/microcode_amd_fam16h.bin
|
||||||
|
Raw: amd-ucode/microcode_amd_fam16h.bin
|
||||||
Version: 2014-10-28
|
Version: 2014-10-28
|
||||||
File: amd-ucode/microcode_amd_fam17h.bin
|
File: amd-ucode/microcode_amd_fam17h.bin
|
||||||
|
Raw: amd-ucode/microcode_amd_fam17h.bin
|
||||||
Version: 2023-04-13
|
Version: 2023-04-13
|
||||||
File: amd-ucode/microcode_amd_fam19h.bin
|
File: amd-ucode/microcode_amd_fam19h.bin
|
||||||
|
Raw: amd-ucode/microcode_amd_fam19h.bin
|
||||||
Version: 2023-01-31
|
Version: 2023-01-31
|
||||||
File: amd-ucode/README
|
File: amd-ucode/README
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
verbose=:
|
verbose=:
|
||||||
prune=no
|
prune=no
|
||||||
|
# shellcheck disable=SC2209
|
||||||
|
compress=cat
|
||||||
|
compext=
|
||||||
|
|
||||||
while test $# -gt 0; do
|
while test $# -gt 0; do
|
||||||
case $1 in
|
case $1 in
|
||||||
|
@ -20,6 +23,27 @@ while test $# -gt 0; do
|
||||||
shift
|
shift
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
--xz)
|
||||||
|
if test "$compext" == ".zst"; then
|
||||||
|
echo "ERROR: cannot mix XZ and ZSTD compression"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
compress="xz --compress --quiet --stdout --check=crc32"
|
||||||
|
compext=".xz"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
|
--zstd)
|
||||||
|
if test "$compext" == ".xz"; then
|
||||||
|
echo "ERROR: cannot mix XZ and ZSTD compression"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# shellcheck disable=SC2209
|
||||||
|
compress="zstd --compress --quiet --stdout"
|
||||||
|
compext=".zst"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
if test "x$destdir" != "x"; then
|
if test "x$destdir" != "x"; then
|
||||||
echo "ERROR: unknown command-line options: $*"
|
echo "ERROR: unknown command-line options: $*"
|
||||||
|
@ -35,18 +59,23 @@ done
|
||||||
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
|
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
|
||||||
grep '^File:' WHENCE | sed -e 's/^File: *//g;s/"//g' | while read f; do
|
grep '^File:' WHENCE | sed -e 's/^File: *//g;s/"//g' | while read f; do
|
||||||
test -f "$f" || continue
|
test -f "$f" || continue
|
||||||
$verbose "copying file $f"
|
|
||||||
install -d "$destdir/$(dirname "$f")"
|
install -d "$destdir/$(dirname "$f")"
|
||||||
cp -d "$f" "$destdir/$f"
|
$verbose "copying/compressing file $f$compext"
|
||||||
|
if test "$compress" != "cat" && grep -q "^Raw: $f\$" WHENCE; then
|
||||||
|
$verbose "compression will be skipped for file $f"
|
||||||
|
cat "$f" > "$destdir/$f"
|
||||||
|
else
|
||||||
|
$compress "$f" > "$destdir/$f$compext"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
|
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
|
||||||
grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
|
grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
|
||||||
if test -L "$f"; then
|
if test -L "$f$compext"; then
|
||||||
test -f "$destdir/$f" && continue
|
test -f "$destdir/$f$compext" && continue
|
||||||
$verbose "copying link $f"
|
$verbose "copying link $f$compext"
|
||||||
install -d "$destdir/$(dirname "$f")"
|
install -d "$destdir/$(dirname "$f")"
|
||||||
cp -d "$f" "$destdir/$f"
|
cp -d "$f$compext" "$destdir/$f$compext"
|
||||||
|
|
||||||
if test "x$d" != "x"; then
|
if test "x$d" != "x"; then
|
||||||
target="$(readlink "$f")"
|
target="$(readlink "$f")"
|
||||||
|
@ -58,16 +87,16 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
|
||||||
$verbose "WARNING: unneeded symlink detected: $f"
|
$verbose "WARNING: unneeded symlink detected: $f"
|
||||||
else
|
else
|
||||||
$verbose "WARNING: pruning unneeded symlink $f"
|
$verbose "WARNING: pruning unneeded symlink $f"
|
||||||
rm -f "$f"
|
rm -f "$f$compext"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
$verbose "WARNING: missing target for symlink $f"
|
$verbose "WARNING: missing target for symlink $f"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
$verbose "creating link $f -> $d"
|
|
||||||
install -d "$destdir/$(dirname "$f")"
|
install -d "$destdir/$(dirname "$f")"
|
||||||
ln -sf "$d" "$destdir/$f"
|
$verbose "creating link $f$compext -> $d$compext"
|
||||||
|
ln -s "$d$compext" "$destdir/$f$compext"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue