From c6c34b60e5d4398a71461debd7228ca381a434cd Mon Sep 17 00:00:00 2001 From: imonlinux <39863321+imonlinux@users.noreply.github.com> Date: Sun, 23 Nov 2025 20:01:11 -0800 Subject: [PATCH] Update install-respeaker-drivers.sh Added logic to support both Bookworm and Trixie version of Raspberry Pi OS. --- respeaker2mic/install-respeaker-drivers.sh | 56 ++++++++++++++++------ 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/respeaker2mic/install-respeaker-drivers.sh b/respeaker2mic/install-respeaker-drivers.sh index 4e7ff22..f0bf894 100644 --- a/respeaker2mic/install-respeaker-drivers.sh +++ b/respeaker2mic/install-respeaker-drivers.sh @@ -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}"