24 lines
1.2 KiB
Bash
Executable File
24 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
device=/dev/video5
|
|
loaded() { test -d "/sys/module/$1"; }
|
|
root_command() { if [[ $EUID -eq 0 ]]; then "$@"; else sudo -n "$@"; fi; }
|
|
if [[ -c "$device" ]] && loaded max9295 && loaded max9296 && loaded sgx_yuv_gmsl2; then
|
|
echo "Camera already initialized: $device"
|
|
exit 0
|
|
fi
|
|
for driver in max9295 max9296 sgx-yuv-gmsl2; do
|
|
file="$root/bin/drivers/$driver.ko"
|
|
[[ -f "$file" ]] || { echo "Missing driver: $file" >&2; exit 1; }
|
|
vermagic="$(modinfo -F vermagic "$file")"
|
|
# Some supplied drivers omit this metadata; normal insmod still validates them.
|
|
[[ -z "$vermagic" || "$vermagic" == "$(uname -r) "* ]] || { echo "Kernel mismatch: $file" >&2; exit 1; }
|
|
done
|
|
loaded max9295 || root_command insmod "$root/bin/drivers/max9295.ko"
|
|
loaded max9296 || root_command insmod "$root/bin/drivers/max9296.ko"
|
|
loaded sgx_yuv_gmsl2 || root_command insmod "$root/bin/drivers/sgx-yuv-gmsl2.ko" gmsl_mode=2,2,2,2
|
|
for _ in {1..20}; do [[ -c "$device" ]] && break; sleep 0.25; done
|
|
[[ -c "$device" ]] || { echo "$device was not created; verify camera/DTB" >&2; exit 1; }
|
|
v4l2-ctl -d "$device" -c sensor_mode=1,trig_pin=0xffff0007
|