0542314798
OBS-URL: https://build.opensuse.org/package/show/Kernel:HEAD/kernel-firmware?expand=0&rev=b47638125e068da3714e12f0df655098
76 lines
1.7 KiB
Bash
76 lines
1.7 KiB
Bash
#!/bin/sh
|
|
#
|
|
# Generate Supplements: lines for the kernel-firmware package, by looking at
|
|
# the firmware: and alias: fields of kernel modules. Ideally, this script
|
|
# should be run automatically during each build, the problem is that
|
|
# kernel-firmware is a noarch package, but the kernel packages differ among
|
|
# architectures, so the results could change randomly. For now, run this
|
|
# script manually against the i586 desktop kernel, like this
|
|
#
|
|
# $ tar xf linux-firmware-$version.tar.bz2
|
|
# $ ./firmware-supplements.sh linux-firmware-$version \
|
|
# kernel-desktop-*.i586.rpm >firmware-supplements.txt
|
|
|
|
USAGE="$0 <firmware directory> [kernel directory]
|
|
$0 <firmware directory> kernel.rpm"
|
|
usage()
|
|
{
|
|
echo "$USAGE" >&2
|
|
exit 1
|
|
}
|
|
|
|
fw_dir="$1"
|
|
kernel="$2"
|
|
|
|
if ! test -d "$fw_dir"; then
|
|
usage
|
|
fi
|
|
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
tmp=$(mktemp -d)
|
|
|
|
get_kernel_dir()
|
|
{
|
|
# default
|
|
if test -z "$kernel"; then
|
|
kernel="/lib/modules/$(uname -r)/kernel"
|
|
if ! test -d "$kernel"; then
|
|
echo "No kernel found below /lib/modules/$(uname -r)" >&2
|
|
usage
|
|
fi
|
|
return
|
|
fi
|
|
# /lib/modules/$version ?
|
|
if test -d "$kernel/kernel"; then
|
|
kernel="$_"
|
|
return
|
|
fi
|
|
# just $version ?
|
|
if test -d "/lib/modules/$kernel/kernel"; then
|
|
kernel="$_"
|
|
return
|
|
fi
|
|
# a kernel rpm?
|
|
case "$kernel" in
|
|
*.rpm)
|
|
mkdir "$tmp/kernel"
|
|
rpm2cpio "$kernel" | (cd "$tmp/kernel"; cpio -id)
|
|
kernel="$tmp/kernel"
|
|
return
|
|
esac
|
|
usage
|
|
}
|
|
|
|
get_kernel_dir
|
|
|
|
find "$kernel" -name '*.ko' -type f | while read ko; do
|
|
firmware=$(/sbin/modinfo -F firmware "$ko")
|
|
for fw in $firmware; do
|
|
if test -f "$fw_dir/$fw"; then
|
|
echo "$ko"
|
|
break
|
|
fi
|
|
done
|
|
done | sort | /usr/lib/rpm/find-supplements.ksyms | \
|
|
sed 's/^modalias(kernel-[^:]*:/modalias(/' # strip the kernel-$flavor: prefix
|