utils: Introduce libcamera-bug-report

Introduce a script which can be installed into the system to aide
reporting potential camera and media related issues.

The script shall capture system information and store it in a temporary
file - but it remains the users responsibilty to choose to share this
data, and no automatic bug submissions are anticipated.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham
2026-04-01 11:54:02 +01:00
parent 5f770f748c
commit 33dc1f24d9
2 changed files with 120 additions and 0 deletions

114
utils/libcamera-bug-report Executable file
View File

@@ -0,0 +1,114 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0-or-later
REPORT="libcamera-report-$(hostname)-$(date +%Y%m%d-%H%M%S).txt"
section() {
echo
echo "=================================================="
echo "$1"
echo "=================================================="
}
run() {
echo
echo "\$ $*"
"$@" || echo "[WARN] Command failed: $*"
}
# Run a command with sudo if the script was allowed to use it.
run_with_sudo() {
if [ -n "$SUDO" ]; then
echo
echo "\$ $SUDO $*"
$SUDO "$@" || echo "[WARN] Command failed: $SUDO $*"
else
run "$@"
fi
}
mark_kmsg() {
if [ -w /dev/kmsg ]; then
echo "libcamera-bug-report[$$]: $1" > /dev/kmsg
elif [ -n "$SUDO" ]; then
printf "libcamera-bug-report[%s]: %s\n" "$$" "$1" | $SUDO tee /dev/kmsg >/dev/null || \
echo "[WARN] failed to write /dev/kmsg with sudo: $1"
else
echo "[INFO] /dev/kmsg not writable, skipping kernel marker: $1"
fi
}
main() {
section "Report metadata"
echo "Date: $(date -Is)"
echo "Host: $(hostname)"
echo "User: $(id)"
section "Kernel & OS"
run uname -a
run cat /etc/os-release
command -v lsb_release >/dev/null && run lsb_release -a
section "Media / V4L2 tools"
command -v media-ctl >/dev/null && run media-ctl --version
command -v v4l2-ctl >/dev/null && run v4l2-ctl --version
command -v v4l2-ctl >/dev/null && run v4l2-ctl --list-devices
section "Device nodes"
run ls -l /dev/video* /dev/v4l-* /dev/media* 2>/dev/null
run grep . /sys/class/video4linux/*/name
section "Deferred devices"
run_with_sudo cat /sys/kernel/debug/devices_deferred
section "V4L2 async pending subdevices"
run_with_sudo cat /sys/kernel/debug/v4l2-async/pending_async_subdevices
section "Media graph topology"
for m in /dev/media*; do
echo
echo "Parsing $m"
command -v media-ctl >/dev/null && run media-ctl -p -d "$m"
done
section "libcamera & userspace"
run which cam
command -v cam >/dev/null && run ldd "$(which cam)"
section "libcamera probe (cam -l)"
mark_kmsg "BEGIN cam -l"
LIBCAMERA_LOG_LEVELS="*:0" run cam -l
mark_kmsg "END cam -l"
section "Kernel log (post cam -l)"
run_with_sudo dmesg
section "Permissions & capabilities"
run id
run groups
command -v getcap >/dev/null && run getcap "$(which cam)"
section "End of report"
}
# If not running as root, prompt the user once to allow sudo
SUDO=""
if [ "$(id -u)" -ne 0 ]; then
if [ -t 0 ]; then
printf "Some checks require root; allow sudo for privileged commands? [y/N] "
read -r ans
case "$ans" in
[Yy]|[Yy][Ee][Ss]) SUDO="sudo" ;;
*) SUDO="" ;;
esac
fi
fi
# Run main and tee output to both stdout and the report file.
main 2>&1 | tee "$REPORT"
echo ""
echo "Report saved to $REPORT"
echo "Please inspect the report and remove any sensitive information before sharing."

View File

@@ -7,3 +7,9 @@ gen_shader_headers = files('gen-shader-headers.sh')
## Module signing
gen_ipa_priv_key = files('gen-ipa-priv-key.sh')
## Bug reporting utility
install_data(
'libcamera-bug-report',
install_dir: get_option('bindir'),
)