From 9e2074ccf9b6c68daf1bbbfff673a67beaa4a48c Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Thu, 14 Dec 2023 15:12:12 -0600 Subject: [PATCH] Add respeaker driver install script --- etc/install-respeaker-drivers.sh | 66 ++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 etc/install-respeaker-drivers.sh diff --git a/etc/install-respeaker-drivers.sh b/etc/install-respeaker-drivers.sh new file mode 100755 index 0000000..48c7951 --- /dev/null +++ b/etc/install-respeaker-drivers.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +# 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 + +set -eo pipefail + +apt-get update +apt-get install --no-install-recommends --yes \ + curl raspberrypi-kernel-headers dkms i2c-tools libasound2-plugins alsa-utils + +temp_dir="$(mktemp -d)" + +function finish { + rm -rf "${temp_dir}" +} + +trap finish EXIT + +pushd "${temp_dir}" + +# Download source code to temporary directory +# NOTE: There are different branches in the repo for different kernel versions. +# We use v6.1 here. +echo 'Downloading source code' +curl -L -o - 'https://github.com/HinTak/seeed-voicecard/archive/refs/heads/v6.1.tar.gz' | \ + tar -xzf - + +cd seeed-voicecard-6.1/ + +# 1. Build kernel module +echo 'Building kernel module' +ver='0.3' +mod='seeed-voicecard' +src='./' +kernel="$(uname -r)" +marker='0.0.0' + +mkdir -p "/usr/src/${mod}-${ver}" +cp -a "${src}"/* "/usr/src/${mod}-${ver}/" + +dkms add -m "${mod}" -v "${ver}" +dkms build -k "${kernel}" -m "${mod}" -v "${ver}" && { + dkms install --force -k "${kernel}" -m "${mod}" -v "${ver}" +} + +mkdir -p "/var/lib/dkms/${mod}/${ver}/${marker}" + +# 2. Install kernel module and configure +echo 'Updating boot configuration' +config='/boot/config.txt' + +cp seeed-*-voicecard.dtbo /boot/overlays +grep -q "^snd-soc-ac108$" /etc/modules || echo "snd-soc-ac108" >> /etc/modules +sed -i -e 's:#dtparam=i2c_arm=on:dtparam=i2c_arm=on:g' "${config}" +echo "dtoverlay=i2s-mmap" >> "${config}" +echo "dtparam=i2s=on" >> "${config}" +mkdir -p /etc/voicecard +cp *.conf *.state /etc/voicecard +cp seeed-voicecard /usr/bin/ +cp seeed-voicecard.service /lib/systemd/system/ +systemctl enable --now seeed-voicecard.service + +echo 'Done. Please reboot the system.' +popd