Update install-respeaker-drivers.sh

Added logic to support both Bookworm and Trixie version of Raspberry Pi OS.
This commit is contained in:
imonlinux
2025-11-23 20:01:11 -08:00
committed by GitHub
parent 62164e0142
commit c6c34b60e5
+42 -14
View File
@@ -2,26 +2,54 @@
# Installs drivers for the ReSpeaker 2mic and 4mic HATs on Raspberry Pi OS.
# Must be run with sudo.
# Requires: curl raspberrypi-kernel-headers dkms i2c-tools libasound2-plugins alsa-utils
# Requires: curl, dkms, i2c-tools, libasound2-plugins, alsa-utils,
# and appropriate Raspberry Pi kernel headers.
set -eo pipefail
kernel_formatted="$(uname -r | cut -f1,2 -d.)"
driver_url_status="$(curl -ILs https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v$kernel_formatted.tar.gz | tac | grep -o "^HTTP.*" | cut -f 2 -d' ' | head -1)"
driver_url_status="$(curl -ILs "https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v${kernel_formatted}.tar.gz" \
| tac | grep -o "^HTTP.*" | cut -f 2 -d' ' | head -1)"
if [ ! "$driver_url_status" = 200 ]; then
echo "Could not find driver for kernel $kernel_formatted"
exit 1
if [ ! "$driver_url_status" = 200 ]; then
echo "Could not find driver for kernel $kernel_formatted"
exit 1
fi
echo "Detecting appropriate kernel header package..."
header_pkg=""
header_candidates=(
raspberrypi-kernel-headers
linux-headers-rpi-v8
linux-headers-rpi-v7l
linux-headers-rpi-v7
)
for pkg in "${header_candidates[@]}"; do
if apt-cache show "$pkg" >/dev/null 2>&1; then
header_pkg="$pkg"
break
fi
done
if [ -n "$header_pkg" ]; then
echo "Using kernel header package: $header_pkg"
else
echo "WARNING: No known Raspberry Pi kernel header package found."
echo " Tried: ${header_candidates[*]}"
echo " Continuing without installing kernel headers; dkms build may fail."
fi
apt-get update
apt-get install --no-install-recommends --yes \
curl raspberrypi-kernel-headers dkms i2c-tools libasound2-plugins alsa-utils
curl dkms i2c-tools libasound2-plugins alsa-utils \
${header_pkg:+$header_pkg}
temp_dir="$(mktemp -d)"
function finish {
rm -rf "${temp_dir}"
rm -rf "${temp_dir}"
}
trap finish EXIT
@@ -31,10 +59,10 @@ pushd "${temp_dir}"
# Download source code to temporary directory
# NOTE: There are different branches in the repo for different kernel versions.
echo 'Downloading source code'
curl -L -o - "https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v$kernel_formatted.tar.gz" | \
tar -xzf -
curl -L -o - "https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v${kernel_formatted}.tar.gz" | \
tar -xzf -
cd seeed-voicecard-"$kernel_formatted"/
cd "seeed-voicecard-${kernel_formatted}/"
# 1. Build kernel module
echo 'Building kernel module'
@@ -44,10 +72,10 @@ src='./'
kernel="$(uname -r)"
marker='0.0.0'
threads="$(getconf _NPROCESSORS_ONLN)"
memory="$(LANG=C free -m|awk '/^Mem:/{print $2}')"
memory="$(LANG=C free -m | awk '/^Mem:/{print $2}')"
if [ "${memory}" -le 512 ] && [ "${threads}" -gt 2 ]; then
threads=2
if [ "${memory}" -le 512 ] && [ "${threads}" -gt 2 ]; then
threads=2
fi
mkdir -p "/usr/src/${mod}-${ver}"
@@ -55,7 +83,7 @@ cp -a "${src}"/* "/usr/src/${mod}-${ver}/"
dkms add -m "${mod}" -v "${ver}"
dkms build -k "${kernel}" -m "${mod}" -v "${ver}" -j "${threads}" && {
dkms install --force -k "${kernel}" -m "${mod}" -v "${ver}"
dkms install --force -k "${kernel}" -m "${mod}" -v "${ver}"
}
mkdir -p "/var/lib/dkms/${mod}/${ver}/${marker}"