Update install-respeaker-drivers.sh
Added logic to support both Bookworm and Trixie version of Raspberry Pi OS.
This commit is contained in:
@@ -2,26 +2,54 @@
|
|||||||
|
|
||||||
# Installs drivers for the ReSpeaker 2mic and 4mic HATs on Raspberry Pi OS.
|
# Installs drivers for the ReSpeaker 2mic and 4mic HATs on Raspberry Pi OS.
|
||||||
# Must be run with sudo.
|
# 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
|
set -eo pipefail
|
||||||
|
|
||||||
kernel_formatted="$(uname -r | cut -f1,2 -d.)"
|
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
|
if [ ! "$driver_url_status" = 200 ]; then
|
||||||
echo "Could not find driver for kernel $kernel_formatted"
|
echo "Could not find driver for kernel $kernel_formatted"
|
||||||
exit 1
|
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
|
fi
|
||||||
|
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install --no-install-recommends --yes \
|
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)"
|
temp_dir="$(mktemp -d)"
|
||||||
|
|
||||||
function finish {
|
function finish {
|
||||||
rm -rf "${temp_dir}"
|
rm -rf "${temp_dir}"
|
||||||
}
|
}
|
||||||
|
|
||||||
trap finish EXIT
|
trap finish EXIT
|
||||||
@@ -31,10 +59,10 @@ pushd "${temp_dir}"
|
|||||||
# Download source code to temporary directory
|
# Download source code to temporary directory
|
||||||
# NOTE: There are different branches in the repo for different kernel versions.
|
# NOTE: There are different branches in the repo for different kernel versions.
|
||||||
echo 'Downloading source code'
|
echo 'Downloading source code'
|
||||||
curl -L -o - "https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v$kernel_formatted.tar.gz" | \
|
curl -L -o - "https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v${kernel_formatted}.tar.gz" | \
|
||||||
tar -xzf -
|
tar -xzf -
|
||||||
|
|
||||||
cd seeed-voicecard-"$kernel_formatted"/
|
cd "seeed-voicecard-${kernel_formatted}/"
|
||||||
|
|
||||||
# 1. Build kernel module
|
# 1. Build kernel module
|
||||||
echo 'Building kernel module'
|
echo 'Building kernel module'
|
||||||
@@ -44,10 +72,10 @@ src='./'
|
|||||||
kernel="$(uname -r)"
|
kernel="$(uname -r)"
|
||||||
marker='0.0.0'
|
marker='0.0.0'
|
||||||
threads="$(getconf _NPROCESSORS_ONLN)"
|
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
|
if [ "${memory}" -le 512 ] && [ "${threads}" -gt 2 ]; then
|
||||||
threads=2
|
threads=2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "/usr/src/${mod}-${ver}"
|
mkdir -p "/usr/src/${mod}-${ver}"
|
||||||
@@ -55,7 +83,7 @@ cp -a "${src}"/* "/usr/src/${mod}-${ver}/"
|
|||||||
|
|
||||||
dkms add -m "${mod}" -v "${ver}"
|
dkms add -m "${mod}" -v "${ver}"
|
||||||
dkms build -k "${kernel}" -m "${mod}" -v "${ver}" -j "${threads}" && {
|
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}"
|
mkdir -p "/var/lib/dkms/${mod}/${ver}/${marker}"
|
||||||
|
|||||||
Reference in New Issue
Block a user