new build script

This commit is contained in:
Šerif Rami 2026-01-09 16:24:28 +01:00
parent e12821f31c
commit c150f968c6
1 changed files with 77 additions and 21 deletions

View File

@ -1,32 +1,88 @@
#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
LOG_FILE=$(mktemp)
MODULE_NAME="snd_usb_us144mkii"
KO_FILE="snd-usb-us144mkii.ko"
TARGET_DIR="/lib/modules/$(uname -r)/extra/us144mkii"
echo "--- Cleaning build directory ---"
make clean
GREEN='\033[0;32m'
RED='\033[0;31m'
GRAY='\033[0;90m'
NC='\033[0m'
BOLD='\033[1m'
echo "--- Compiling the driver ---"
make
cleanup() {
tput cnorm
rm -f "$LOG_FILE"
}
trap cleanup EXIT
echo "--- Installing the driver ---"
SUDO_CMD="sudo"
KERNEL_MODULE_DIR="/lib/modules/$(uname -r)/extra/us144mkii"
header() {
clear
echo -e "${GREEN}${BOLD}"
echo " TASCAM US-144MKII DRIVER INSTALLER"
echo " =================================="
echo -e "${NC}"
}
echo "Creating directory if it doesn't exist: $KERNEL_MODULE_DIR"
$SUDO_CMD mkdir -p "$KERNEL_MODULE_DIR"
init_sudo() {
if [ "$EUID" -ne 0 ]; then
echo -e "${GRAY} Creating sudo session...${NC}"
if ! sudo -v; then
echo -e "\n ${RED}✖ Authentication failed.${NC}"
exit 1
fi
fi
}
echo "Copying snd-usb-us144mkii.ko to $KERNEL_MODULE_DIR"
$SUDO_CMD cp snd-usb-us144mkii.ko "$KERNEL_MODULE_DIR"
run() {
local cmd="$1"
local msg="$2"
local allow_fail="${3:-false}"
echo "--- Updating module dependencies ---"
$SUDO_CMD depmod -a
tput civis
eval "$cmd" > "$LOG_FILE" 2>&1 &
local pid=$!
echo "--- Reloading the driver ---"
echo "Unloading old driver (if present)..."
$SUDO_CMD rmmod snd_usb_us144mkii -f || true
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
local i=0
echo "Loading new driver..."
$SUDO_CMD modprobe snd-usb-us144mkii
while kill -0 "$pid" 2>/dev/null; do
i=$(((i + 1) % ${#spin}))
printf "\r ${GREEN}${spin:$i:1}${NC} ${GRAY}%s...${NC}" "$msg"
sleep 0.08
done
echo "--- Driver build and installation complete! ---"
wait $pid
local exit_code=$?
if [ $exit_code -eq 0 ]; then
printf "\r\033[K ${GREEN}${NC} ${BOLD}%s${NC}\n" "$msg"
else
if [ "$allow_fail" = "true" ]; then
printf "\r\033[K ${GREEN}${NC} ${BOLD}%s${NC} ${GRAY}(Skipped)${NC}\n" "$msg"
else
printf "\r\033[K ${RED}${NC} ${BOLD}%s${NC}\n" "$msg"
echo -e "\n${RED} Build Log:${NC}"
echo " ----------------------------------------"
sed 's/^/ /' "$LOG_FILE"
echo " ----------------------------------------"
exit 1
fi
fi
}
header
init_sudo
run "make clean" "Cleaning build directory"
run "make" "Compiling driver source"
run "sudo mkdir -p \"$TARGET_DIR\"" "Verifying module directory"
run "sudo cp \"$KO_FILE\" \"$TARGET_DIR\"" "Installing kernel module"
run "sudo depmod -a" "Updating dependency map"
run "sudo rmmod $MODULE_NAME" "Unloading previous driver" "true"
run "sudo modprobe $(echo $MODULE_NAME | tr '_' '-')" "Loading new driver"
echo -e "\n ${GREEN}${BOLD}Done.${NC}\n"