#!/bin/bash # Copyright 2011, 2016, 2018, 2023 Patrick J. Volkerding, Sebeka, MN, USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Included in Slint by Didier Spaier didieratslintdotfr cd $(dirname $0) ; CWD=$(pwd) PKGNAM=kernel-firmware PKGNAM2=amd-microcode _tag=20230919 ARCH=noarch BUILD=1slint BUILD2=1slint # Compress the firmware blobs? # Default is "none" for no compression. # Other types known to be currently supported are "xz" and "zstd". COMPRESSION=xz # If the variable PRINT_PACKAGE_NAME is set, then this script will report what # the name of the created package would be, and then exit. This information # could be useful to other scripts. if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then # Internally, git considers the repo date to be the date the last committed # patch was submitted. This is somewhat confusing, as it can lead to a newer # git clone having a date older than the last one we used. To avoid this # situation, we're going to deviate a little and use the date the HEAD # patch or merge occured as the repo date, rather than the date of the # patch itself. #DATE="$(lynx -dump -width=256 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=HEAD | grep " author " | head -n 1 | rev | cut -f 3 -d ' ' | rev | tr -d -)" DATE="$(lynx -dump -width=256 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=HEAD | grep " committer " | head -n 1 | rev | cut -f 3 -d ' ' | rev | tr -d -)" HEADISAT="$(lynx -dump -width=256 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=HEAD | grep " commit " | head -n 1 | cut -f 2 -d ] | cut -b 1-7)" echo "$PKGNAM-${DATE}_${HEADISAT}-$ARCH-$BUILD.txz" exit 0 fi TMP=$CWD PKG=$TMP/package-$PKGNAM PKG2=$TMP/package-amd-microcode TMP2=$TMP/amd-microcode rm -rf $PKG $PKG2 $TMP2 mkdir $TMP2 $PKG cd $PKG #git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-20230919.tar.gz #wget https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/snapshot/linux-firmware-${tag}.tar.gz exit # Better determine these the same way as above. DATE="$(lynx -dump -width=256 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=HEAD | grep " committer " | head -n 1 | rev | cut -f 3 -d ' ' | rev | tr -d -)" HEADISAT="$(lynx -dump -width=256 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/?id=HEAD | grep " commit " | head -n 1 | cut -f 2 -d ] | cut -b 1-7)" find . -name ".git*" -exec rm -rf "{}" \+ chown -R root:root . mkdir -p lib/firmware # Added to build the package amd-microcode by Didier # Note: I could add support for AMD Secure Encrypted Virtualization (AMD-SEV) as indicated in: # https://documentation.suse.com/sles/15-SP1/html/SLES-amd-sev/index.html # as implemented by Debian in the package amd64-microcode. But I am not ready for that :( # Do as suggested by Gentoo in # https://wiki.gentoo.org/wiki/Microcode#Manual_initramfs_creation_.28AMD.29 mkdir -p $TMP2/kernel/x86/microcode mkdir -p $PKG2/boot mkdir -p $PKG2/usr/doc/$PKGNAM2-${DATE}_${HEADISAT} mkdir -p $PKG2/install cd $TMP2 mkdir -p kernel/x86/microcode cat $PKG/linux-firmware/amd-ucode/microcode_amd*.bin > kernel/x86/microcode/AuthenticAMD.bin echo kernel/x86/microcode/AuthenticAMD.bin | bsdcpio -o -H newc -R 0:0 > $PKG2/boot/amd-ucode.img for FILE in CONTENT README README.Debian LICENSE.amd-ucode; do cp $CWD/$FILE $PKG2/usr/doc/$PKGNAM2-${DATE}_${HEADISAT}/ done cp $CWD/slack-desc.amd-microcode $PKG2/install/slack-desc cd $PKG2 /sbin/makepkg -l y -c n $TMP/$PKGNAM2-${DATE}_${HEADISAT}-$ARCH-$BUILD2.txz cd $PKG # Install the firmware from the download directory using "make $INSTALLTARGET": case $COMPRESSION in xz) INSTALLTARGET="install-xz" ;; zstd) INSTALLTARGET="install-zst" ;; *) INSTALLTARGET="install" ;; esac ( cd linux-firmware echo "Running make DESTDIR=$PKG ${INSTALLTARGET}..." make DESTDIR=$PKG $INSTALLTARGET 2> /dev/null ) # Install documentation: ( cd linux-firmware mkdir -p $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT} cp -a README $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/README.linux-firmware cp -a WHENCE $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/WHENCE.linux-firmware cp -a GPL* LICEN* \ $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT} cp -a amd-ucode/README $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/README.amd-ucode cp -a isci/README $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/README.isci cp -a carl9170fw/COPYRIGHT $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/COPYRIGHT.carl9170fw cp -a carl9170fw/README $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/README.carl9170fw cp -a rtw88/README $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT}/README.rtw88 cp -a wfx/LICENCE.wf200 $PKG/usr/doc/kernel-firmware-${DATE}_${HEADISAT} ) # Remove git repo clone: rm -rf linux-firmware mkdir -p $PKG/install cat $CWD/slack-desc > $PKG/install/slack-desc cd $PKG /sbin/makepkg -l y -c n $TMP/$PKGNAM-${DATE}_${HEADISAT}-$ARCH-$BUILD.txz