#!/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) KVER=6.12.38 PKGNAM=kernel-firmware-installer ARCH=noarch BUILD=1slint # Compress the firmware blobs? # Default is "none" for no compression. # Other types known to be currently supported are "xz" and "zstd". COMPRESSION=xz TMP=$CWD PKG=$TMP/package-$PKGNAM rm -rf $PKG mkdir -p $PKG/linux-firmware echo "/sound/ /video/ /storage/ /media/ /infiniband/ /gpu/ /crypto/ /bluetooth/ /tty/ /scsi/ /platform/ /isdn/ /ptp/ /serial/ /hamradio/ /mscc/ /misc/ /serial/" > excluded rm -rf linux-firmware git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git find /lib/modules/$KVER -name "*.ko*" -type f|grep -v -f excluded|sed "s#.ko.zst##;s#.*/##"|sort -u -o net_mods while read m; do modinfo "$m" |grep ^firmware|sed "s#................##" done net_firm sort net_firm|uniq > net_firmware (cd linux-firmware cp LICEN* GPL* Makefile WHENCE build_packages.py check_whence.py configure copy-firmware.sh $PKG/linux-firmware || exit while read f; do [ ! -s "$f" ] && continue dirf="$(echo "$f"|sed "s#\(.*/\).*#\1#")" [ ! -s "$dirf" ] && continue [ ! -d "$dirf" ] && dirf="." echo "dirf=$dirf" echo "f=$f" install -D -t "$PKG/linux-firmware/$dirf/" "$f" done <$CWD/net_firmware ) # Select only # 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)" chown -R root:root . mkdir -p lib/firmware 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