From c09ea6b1244b6b2e8adb0496b99ba61a54acc671 Mon Sep 17 00:00:00 2001 From: grawis Date: Wed, 10 Jun 2026 21:28:04 +0800 Subject: [PATCH 1/2] Add automated V4L2 test workflow --- .gitignore | 3 ++ Makefile | 4 +++ scripts/test-v4l2.sh | 65 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100755 scripts/test-v4l2.sh diff --git a/.gitignore b/.gitignore index 5b6d0f3..555be10 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,6 @@ Module.symvers Mkfile.old dkms.conf vcam-util + +# Test artifacts +artifacts/ diff --git a/Makefile b/Makefile index 91eb70d..69af1aa 100644 --- a/Makefile +++ b/Makefile @@ -17,3 +17,7 @@ kmod: clean: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean $(RM) vcam-util + +.PHONY: test-v4l2 +test-v4l2: + ./scripts/test-v4l2.sh diff --git a/scripts/test-v4l2.sh b/scripts/test-v4l2.sh new file mode 100755 index 0000000..44d078f --- /dev/null +++ b/scripts/test-v4l2.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env bash + +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +ARTIFACT_DIR="${ROOT_DIR}/artifacts/v4l2-$(date +%Y%m%d-%H%M%S)" +LOG="${ARTIFACT_DIR}/test.log" + +mkdir -p "${ARTIFACT_DIR}" +exec > >(tee -a "${LOG}") 2>&1 + +cd "${ROOT_DIR}" + +echo "== Environment ==" +uname -a +echo + +echo "== Build ==" +make clean +make +echo + +echo "== Load dependencies ==" +sudo modprobe -a videobuf2_vmalloc videobuf2_v4l2 videobuf2_dma_contig +echo + +echo "== Reload vcam ==" +sudo rmmod vcam 2>/dev/null || true +sudo insmod vcam.ko +echo + +echo "== Detect video device ==" +sudo ./vcam-util -l | tee "${ARTIFACT_DIR}/vcam-util-list.txt" +VIDEO_DEV="$(sudo ./vcam-util -l | + awk '/\/dev\/video[0-9]+/ {print $NF; exit}')" + +if [[ -z "${VIDEO_DEV}" ]]; then + echo "ERROR: cannot find a vcam video device" + exit 1 +fi + +echo "VIDEO_DEV=${VIDEO_DEV}" | tee "${ARTIFACT_DIR}/device.env" +echo + +echo "== v4l2-compliance ==" +sudo v4l2-compliance -d "${VIDEO_DEV}" -f | + tee "${ARTIFACT_DIR}/v4l2-compliance.txt" +echo + +echo "== v4l2-ctl --all ==" +sudo v4l2-ctl -d "${VIDEO_DEV}" --all | + tee "${ARTIFACT_DIR}/v4l2-ctl-all.txt" +echo + +echo "== v4l2-ctl --list-formats-ext ==" +sudo v4l2-ctl -d "${VIDEO_DEV}" --list-formats-ext | + tee "${ARTIFACT_DIR}/v4l2-formats-ext.txt" +echo + +echo "== dmesg tail ==" +sudo dmesg | tail -n 100 | + tee "${ARTIFACT_DIR}/dmesg-tail.txt" || true +echo + +echo "Artifacts saved to: ${ARTIFACT_DIR}" From d30c6cbad52767caf6da53198079aea9eefbc56b Mon Sep 17 00:00:00 2001 From: grawis Date: Wed, 10 Jun 2026 22:05:33 +0800 Subject: [PATCH 2/2] Fix V4L2 device detection in test script --- scripts/test-v4l2.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/test-v4l2.sh b/scripts/test-v4l2.sh index 44d078f..e9389cf 100755 --- a/scripts/test-v4l2.sh +++ b/scripts/test-v4l2.sh @@ -30,9 +30,13 @@ sudo insmod vcam.ko echo echo "== Detect video device ==" -sudo ./vcam-util -l | tee "${ARTIFACT_DIR}/vcam-util-list.txt" -VIDEO_DEV="$(sudo ./vcam-util -l | - awk '/\/dev\/video[0-9]+/ {print $NF; exit}')" +VCAM_LIST="$(sudo ./vcam-util -l)" +printf '%s\n' "${VCAM_LIST}" | tee "${ARTIFACT_DIR}/vcam-util-list.txt" +VIDEO_DEV="$(printf '%s\n' "${VCAM_LIST}" | + awk 'match($0, /\/dev\/video[0-9]+/) { + print substr($0, RSTART, RLENGTH) + exit + }')" if [[ -z "${VIDEO_DEV}" ]]; then echo "ERROR: cannot find a vcam video device"