utils: Introduce libcamera-bug-report
diff mbox series

Message ID 20260207-kbingham-bug-reporter-v1-1-42f81e4ce5dc@ideasonboard.com
State New
Headers show
Series
  • utils: Introduce libcamera-bug-report
Related show

Commit Message

Kieran Bingham Feb. 7, 2026, 11:30 a.m. UTC
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.

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
There are many occasions where people would like to report issues with
their camera, and there are always a common set of commands that we
would like to run to identify potential issues.

Provide a helper that will ease reporting of camera related issues
especially for bringup of new cameras or when cameras do not show.

An example bug report from my system follows, which itself shows a
specific bug!

$ ./utils/libcamera-bug-report 

==================================================
Report metadata
==================================================
Date: 2026-02-07T11:18:58+00:00
Host: Monstersaurus
User: uid=1000(kbingham) gid=1000(kbingham) groups=1000(kbingham),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(kvm),121(lpadmin),132(lxd),133(sambashare),135(docker),998(nix-users)

==================================================
Kernel & OS
==================================================

$ uname -a
Linux Monstersaurus 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 24.04.3 LTS
Release:	24.04
Codename:	noble

==================================================
Media / V4L2 tools
==================================================

$ media-ctl --version
media-ctl 1.26.1

$ v4l2-ctl --version
v4l2-ctl 1.26.1

$ v4l2-ctl --list-devices
vim2m (platform:vim2m):
	/dev/video9
	/dev/media3

vimc (platform:vimc):
	/dev/video2
	/dev/video3
	/dev/video4
	/dev/media1

vivid (platform:vivid-000):
	/dev/video5
	/dev/video6
	/dev/video7
	/dev/video8
	/dev/radio0
	/dev/radio1
	/dev/vbi0
	/dev/vbi1
	/dev/swradio0
	/dev/v4l-touch0
	/dev/media2

Logitech BRIO (usb-0000:0d:00.3-3.4):
	/dev/video0
	/dev/video1
	/dev/media0

==================================================
Device nodes
==================================================

$ ls -l /dev/video0 /dev/video1 /dev/video2 /dev/video3 /dev/video4 /dev/video5 /dev/video6 /dev/video7 /dev/video8 /dev/video9 /dev/v4l-subdev0 /dev/v4l-subdev1 /dev/v4l-subdev2 /dev/v4l-subdev3 /dev/v4l-subdev4 /dev/v4l-subdev5 /dev/v4l-subdev6 /dev/v4l-subdev7 /dev/v4l-touch0 /dev/media0 /dev/media1 /dev/media2 /dev/media3
crw-rw----+ 1 root video 234,  0 Jan 14 23:56 /dev/media0
crw-rw----+ 1 root video 234,  1 Jan 14 23:56 /dev/media1
crw-rw----+ 1 root video 234,  2 Jan 14 23:56 /dev/media2
crw-rw----+ 1 root video 234,  3 Jan 14 23:56 /dev/media3
crw-rw----+ 1 root video  81,  5 Jan 14 23:56 /dev/v4l-subdev0
crw-rw----+ 1 root video  81,  6 Jan 14 23:56 /dev/v4l-subdev1
crw-rw----+ 1 root video  81,  7 Jan 14 23:56 /dev/v4l-subdev2
crw-rw----+ 1 root video  81,  8 Jan 14 23:56 /dev/v4l-subdev3
crw-rw----+ 1 root video  81,  9 Jan 14 23:56 /dev/v4l-subdev4
crw-rw----+ 1 root video  81, 10 Jan 14 23:56 /dev/v4l-subdev5
crw-rw----+ 1 root video  81, 11 Jan 14 23:56 /dev/v4l-subdev6
crw-rw----+ 1 root video  81, 12 Jan 14 23:56 /dev/v4l-subdev7
crw-rw----+ 1 root video  81, 22 Jan 14 23:56 /dev/v4l-touch0
crw-rw----+ 1 root video  81,  0 Jan 14 23:56 /dev/video0
crw-rw----+ 1 root video  81,  1 Jan 14 23:56 /dev/video1
crw-rw----+ 1 root video  81,  2 Jan 14 23:56 /dev/video2
crw-rw----+ 1 root video  81,  3 Jan 14 23:56 /dev/video3
crw-rw----+ 1 root video  81,  4 Jan 14 23:56 /dev/video4
crw-rw----+ 1 root video  81, 13 Jan 14 23:56 /dev/video5
crw-rw----+ 1 root video  81, 14 Jan 14 23:56 /dev/video6
crw-rw----+ 1 root video  81, 20 Jan 14 23:56 /dev/video7
crw-rw----+ 1 root video  81, 21 Jan 14 23:56 /dev/video8
crw-rw----+ 1 root video  81, 23 Jan 14 23:56 /dev/video9

$ grep . /sys/class/video4linux/radio0/name /sys/class/video4linux/radio1/name /sys/class/video4linux/swradio0/name /sys/class/video4linux/v4l-subdev0/name /sys/class/video4linux/v4l-subdev1/name /sys/class/video4linux/v4l-subdev2/name /sys/class/video4linux/v4l-subdev3/name /sys/class/video4linux/v4l-subdev4/name /sys/class/video4linux/v4l-subdev5/name /sys/class/video4linux/v4l-subdev6/name /sys/class/video4linux/v4l-subdev7/name /sys/class/video4linux/v4l-touch0/name /sys/class/video4linux/vbi0/name /sys/class/video4linux/vbi1/name /sys/class/video4linux/video0/name /sys/class/video4linux/video1/name /sys/class/video4linux/video2/name /sys/class/video4linux/video3/name /sys/class/video4linux/video4/name /sys/class/video4linux/video5/name /sys/class/video4linux/video6/name /sys/class/video4linux/video7/name /sys/class/video4linux/video8/name /sys/class/video4linux/video9/name
/sys/class/video4linux/radio0/name:vivid-000-rad-rx
/sys/class/video4linux/radio1/name:vivid-000-rad-tx
/sys/class/video4linux/swradio0/name:vivid-000-sdr-cap
/sys/class/video4linux/v4l-subdev0/name:Sensor A
/sys/class/video4linux/v4l-subdev1/name:Sensor B
/sys/class/video4linux/v4l-subdev2/name:Debayer A
/sys/class/video4linux/v4l-subdev3/name:Debayer B
/sys/class/video4linux/v4l-subdev4/name:RGB/YUV Input
/sys/class/video4linux/v4l-subdev5/name:Scaler
/sys/class/video4linux/v4l-subdev6/name:Lens A
/sys/class/video4linux/v4l-subdev7/name:Lens B
/sys/class/video4linux/v4l-touch0/name:vivid-000-touch-cap
/sys/class/video4linux/vbi0/name:vivid-000-vbi-cap
/sys/class/video4linux/vbi1/name:vivid-000-vbi-out
/sys/class/video4linux/video0/name:Logitech BRIO
/sys/class/video4linux/video1/name:Logitech BRIO
/sys/class/video4linux/video2/name:Raw Capture 0
/sys/class/video4linux/video3/name:Raw Capture 1
/sys/class/video4linux/video4/name:RGB/YUV Capture
/sys/class/video4linux/video5/name:vivid-000-vid-cap
/sys/class/video4linux/video6/name:vivid-000-vid-out
/sys/class/video4linux/video7/name:vivid-000-meta-cap
/sys/class/video4linux/video8/name:vivid-000-meta-out
/sys/class/video4linux/video9/name:vim2m

==================================================
Deferred devices
==================================================

$ cat /sys/kernel/debug/devices_deferred
cat: /sys/kernel/debug/devices_deferred: Permission denied
[WARN] Command failed: cat /sys/kernel/debug/devices_deferred

==================================================
V4L2 async pending subdevices
==================================================

$ cat /sys/kernel/debug/v4l2-async/pending_async_subdevices
cat: /sys/kernel/debug/v4l2-async/pending_async_subdevices: Permission denied
[WARN] Command failed: cat /sys/kernel/debug/v4l2-async/pending_async_subdevices

==================================================
Media graph topology
==================================================

Parsing /dev/media0

$ media-ctl -p /dev/media0
Media controller API version 6.8.12

Media device information
------------------------
driver          uvcvideo
model           Logitech BRIO
serial          61306147
bus info        usb-0000:0d:00.3-3.4
hw revision     0x17
driver version  6.8.12

Device topology
- entity 1: Logitech BRIO (1 pad, 1 link)
            type Node subtype V4L flags 1
            device node name /dev/video0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]

- entity 4: Logitech BRIO (0 pad, 0 link)
            type Node subtype V4L flags 0
            device node name /dev/video1

- entity 8: Processing 3 (2 pads, 8 links, 0 routes)
            type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Camera 1":0 [ENABLED,IMMUTABLE]
	pad1: Source
		-> "Logitech BRIO":0 [ENABLED,IMMUTABLE]
		-> "Extension 14":0 [ENABLED,IMMUTABLE]
		-> "Extension 6":0 [ENABLED,IMMUTABLE]
		-> "Extension 8":0 [ENABLED,IMMUTABLE]
		-> "Extension 9":0 [ENABLED,IMMUTABLE]
		-> "Extension 10":0 [ENABLED,IMMUTABLE]
		-> "Extension 11":0 [ENABLED,IMMUTABLE]

- entity 11: Extension 14 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 14: Extension 6 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 17: Extension 8 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 20: Extension 9 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 23: Extension 10 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 26: Extension 11 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 29: Camera 1 (1 pad, 1 link, 0 routes)
             type V4L2 subdev subtype Sensor flags 0
	pad0: Source
		-> "Processing 3":0 [ENABLED,IMMUTABLE]

Parsing /dev/media1

$ media-ctl -p /dev/media1
Media controller API version 6.8.12

Media device information
------------------------
driver          uvcvideo
model           Logitech BRIO
serial          61306147
bus info        usb-0000:0d:00.3-3.4
hw revision     0x17
driver version  6.8.12

Device topology
- entity 1: Logitech BRIO (1 pad, 1 link)
            type Node subtype V4L flags 1
            device node name /dev/video0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]

- entity 4: Logitech BRIO (0 pad, 0 link)
            type Node subtype V4L flags 0
            device node name /dev/video1

- entity 8: Processing 3 (2 pads, 8 links, 0 routes)
            type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Camera 1":0 [ENABLED,IMMUTABLE]
	pad1: Source
		-> "Logitech BRIO":0 [ENABLED,IMMUTABLE]
		-> "Extension 14":0 [ENABLED,IMMUTABLE]
		-> "Extension 6":0 [ENABLED,IMMUTABLE]
		-> "Extension 8":0 [ENABLED,IMMUTABLE]
		-> "Extension 9":0 [ENABLED,IMMUTABLE]
		-> "Extension 10":0 [ENABLED,IMMUTABLE]
		-> "Extension 11":0 [ENABLED,IMMUTABLE]

- entity 11: Extension 14 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 14: Extension 6 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 17: Extension 8 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 20: Extension 9 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 23: Extension 10 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 26: Extension 11 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 29: Camera 1 (1 pad, 1 link, 0 routes)
             type V4L2 subdev subtype Sensor flags 0
	pad0: Source
		-> "Processing 3":0 [ENABLED,IMMUTABLE]

Parsing /dev/media2

$ media-ctl -p /dev/media2
Media controller API version 6.8.12

Media device information
------------------------
driver          uvcvideo
model           Logitech BRIO
serial          61306147
bus info        usb-0000:0d:00.3-3.4
hw revision     0x17
driver version  6.8.12

Device topology
- entity 1: Logitech BRIO (1 pad, 1 link)
            type Node subtype V4L flags 1
            device node name /dev/video0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]

- entity 4: Logitech BRIO (0 pad, 0 link)
            type Node subtype V4L flags 0
            device node name /dev/video1

- entity 8: Processing 3 (2 pads, 8 links, 0 routes)
            type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Camera 1":0 [ENABLED,IMMUTABLE]
	pad1: Source
		-> "Logitech BRIO":0 [ENABLED,IMMUTABLE]
		-> "Extension 14":0 [ENABLED,IMMUTABLE]
		-> "Extension 6":0 [ENABLED,IMMUTABLE]
		-> "Extension 8":0 [ENABLED,IMMUTABLE]
		-> "Extension 9":0 [ENABLED,IMMUTABLE]
		-> "Extension 10":0 [ENABLED,IMMUTABLE]
		-> "Extension 11":0 [ENABLED,IMMUTABLE]

- entity 11: Extension 14 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 14: Extension 6 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 17: Extension 8 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 20: Extension 9 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 23: Extension 10 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 26: Extension 11 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 29: Camera 1 (1 pad, 1 link, 0 routes)
             type V4L2 subdev subtype Sensor flags 0
	pad0: Source
		-> "Processing 3":0 [ENABLED,IMMUTABLE]

Parsing /dev/media3

$ media-ctl -p /dev/media3
Media controller API version 6.8.12

Media device information
------------------------
driver          uvcvideo
model           Logitech BRIO
serial          61306147
bus info        usb-0000:0d:00.3-3.4
hw revision     0x17
driver version  6.8.12

Device topology
- entity 1: Logitech BRIO (1 pad, 1 link)
            type Node subtype V4L flags 1
            device node name /dev/video0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]

- entity 4: Logitech BRIO (0 pad, 0 link)
            type Node subtype V4L flags 0
            device node name /dev/video1

- entity 8: Processing 3 (2 pads, 8 links, 0 routes)
            type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Camera 1":0 [ENABLED,IMMUTABLE]
	pad1: Source
		-> "Logitech BRIO":0 [ENABLED,IMMUTABLE]
		-> "Extension 14":0 [ENABLED,IMMUTABLE]
		-> "Extension 6":0 [ENABLED,IMMUTABLE]
		-> "Extension 8":0 [ENABLED,IMMUTABLE]
		-> "Extension 9":0 [ENABLED,IMMUTABLE]
		-> "Extension 10":0 [ENABLED,IMMUTABLE]
		-> "Extension 11":0 [ENABLED,IMMUTABLE]

- entity 11: Extension 14 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 14: Extension 6 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 17: Extension 8 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 20: Extension 9 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 23: Extension 10 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 26: Extension 11 (2 pads, 1 link, 0 routes)
             type V4L2 subdev subtype Unknown flags 0
	pad0: Sink
		<- "Processing 3":1 [ENABLED,IMMUTABLE]
	pad1: Source

- entity 29: Camera 1 (1 pad, 1 link, 0 routes)
             type V4L2 subdev subtype Sensor flags 0
	pad0: Source
		-> "Processing 3":0 [ENABLED,IMMUTABLE]

==================================================
libcamera & userspace
==================================================

$ which cam
/usr/bin/cam

$ ldd /usr/bin/cam
	linux-vdso.so.1 (0x00007fffea592000)
	libcamera.so.0.6 => /lib/x86_64-linux-gnu/libcamera.so.0.6 (0x0000799515800000)
	libcamera-base.so.0.6 => /lib/x86_64-linux-gnu/libcamera-base.so.0.6 (0x0000799516122000)
	libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x000079951610b000)
	libevent_pthreads-2.1.so.7 => /lib/x86_64-linux-gnu/libevent_pthreads-2.1.so.7 (0x0000799516106000)
	libevent-2.1.so.7 => /lib/x86_64-linux-gnu/libevent-2.1.so.7 (0x00007995160b4000)
	libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x000079951602f000)
	libSDL2-2.0.so.0 => /lib/x86_64-linux-gnu/libSDL2-2.0.so.0 (0x0000799515624000)
	libtiff.so.5 => not found
	libyaml-0.so.2 => /lib/x86_64-linux-gnu/libyaml-0.so.2 (0x000079951600e000)
	libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x0000799515200000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007995155f6000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000799514e00000)
	libyuv.so.0 => /lib/x86_64-linux-gnu/libyuv.so.0 (0x000079951555e000)
	libgnutls.so.30 => /lib/x86_64-linux-gnu/libgnutls.so.30 (0x0000799514c06000)
	liblttng-ust.so.1 => /lib/x86_64-linux-gnu/liblttng-ust.so.1 (0x00007995154db000)
	libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007995154a8000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x0000799515117000)
	libdw.so.1 => /lib/x86_64-linux-gnu/libdw.so.1 (0x0000799515063000)
	libunwind.so.8 => /lib/x86_64-linux-gnu/libunwind.so.8 (0x0000799515fef000)
	/lib64/ld-linux-x86-64.so.2 (0x0000799516311000)
	libevent_core-2.1.so.7 => /lib/x86_64-linux-gnu/libevent_core-2.1.so.7 (0x000079951502e000)
	libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x0000799514afc000)
	libpulse.so.0 => /lib/x86_64-linux-gnu/libpulse.so.0 (0x0000799514aab000)
	libsamplerate.so.0 => /lib/x86_64-linux-gnu/libsamplerate.so.0 (0x000079951493c000)
	libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007995147ff000)
	libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x0000799515494000)
	libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x0000799515fe1000)
	libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x0000799515481000)
	libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x0000799515026000)
	libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x0000799515019000)
	libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x0000799515014000)
	libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007995147f8000)
	libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007995147f3000)
	libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007995147e3000)
	libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007995147d9000)
	libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x0000799514790000)
	libdecor-0.so.0 => /lib/x86_64-linux-gnu/libdecor-0.so.0 (0x0000799514785000)
	libp11-kit.so.0 => /lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007995145e1000)
	libidn2.so.0 => /lib/x86_64-linux-gnu/libidn2.so.0 (0x00007995145bf000)
	libunistring.so.5 => /lib/x86_64-linux-gnu/libunistring.so.5 (0x0000799514412000)
	libtasn1.so.6 => /lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007995143fa000)
	libnettle.so.8 => /lib/x86_64-linux-gnu/libnettle.so.8 (0x00007995143a5000)
	libhogweed.so.6 => /lib/x86_64-linux-gnu/libhogweed.so.6 (0x000079951435d000)
	libgmp.so.10 => /lib/x86_64-linux-gnu/libgmp.so.10 (0x00007995142d9000)
	libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 (0x00007995142cb000)
	liblttng-ust-common.so.1 => /lib/x86_64-linux-gnu/liblttng-ust-common.so.1 (0x00007995142bc000)
	liblttng-ust-tracepoint.so.1 => /lib/x86_64-linux-gnu/liblttng-ust-tracepoint.so.1 (0x000079951429f000)
	libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x0000799514292000)
	libelf.so.1 => /lib/x86_64-linux-gnu/libelf.so.1 (0x0000799514273000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x0000799514257000)
	libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x000079951419b000)
	liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x0000799514169000)
	libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x0000799514155000)
	libpulsecommon-16.1.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-16.1.so (0x00007995140d7000)
	libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x0000799514088000)
	libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x000079951405d000)
	libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x0000799514051000)
	libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x0000799514025000)
	libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x0000799514019000)
	libsndfile.so.1 => /lib/x86_64-linux-gnu/libsndfile.so.1 (0x0000799513f8f000)
	libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x0000799513f8a000)
	libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x0000799513eaa000)
	libasyncns.so.0 => /lib/x86_64-linux-gnu/libasyncns.so.0 (0x0000799513ea2000)
	libapparmor.so.1 => /lib/x86_64-linux-gnu/libapparmor.so.1 (0x0000799513e8e000)
	libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x0000799513e86000)
	libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x0000799513e7e000)
	libFLAC.so.12 => /lib/x86_64-linux-gnu/libFLAC.so.12 (0x0000799513e1a000)
	libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x0000799513dec000)
	libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x0000799513d41000)
	libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x0000799513ce0000)
	libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x0000799513cd6000)
	libmpg123.so.0 => /lib/x86_64-linux-gnu/libmpg123.so.0 (0x0000799513c7a000)
	libmp3lame.so.0 => /lib/x86_64-linux-gnu/libmp3lame.so.0 (0x0000799513c04000)
	libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x0000799513abc000)
	liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x0000799513a98000)
	libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x0000799513a82000)
	libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x0000799513a5d000)
	libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x0000799513a4e000)

==================================================
libcamera probe (cam -l)
==================================================
[INFO] /dev/kmsg not writable, skipping kernel marker: BEGIN cam -l

$ cam -l
cam: error while loading shared libraries: libtiff.so.5: cannot open shared object file: No such file or directory
[WARN] Command failed: cam -l
[INFO] /dev/kmsg not writable, skipping kernel marker: END cam -l

==================================================
Kernel log (post cam -l)
==================================================

$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
[WARN] Command failed: dmesg

==================================================
Permissions & capabilities
==================================================

$ id
uid=1000(kbingham) gid=1000(kbingham) groups=1000(kbingham),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(kvm),121(lpadmin),132(lxd),133(sambashare),135(docker),998(nix-users)

$ groups
kbingham adm dialout cdrom sudo audio dip video plugdev kvm lpadmin lxd sambashare docker nix-users

$ getcap /usr/bin/cam

==================================================
End of report
==================================================
Report saved to libcamera-report-Monstersaurus-20260207-111858.txt
---
 utils/libcamera-bug-report | 79 ++++++++++++++++++++++++++++++++++++++++++++++
 utils/meson.build          |  7 ++++
 2 files changed, 86 insertions(+)


---
base-commit: c6c5a8bc5b90e476cba806cfcccc704ef115d2aa
change-id: 20260207-kbingham-bug-reporter-60285cd034af

Best regards,

Patch
diff mbox series

diff --git a/utils/libcamera-bug-report b/utils/libcamera-bug-report
new file mode 100755
index 000000000000..72b89b646007
--- /dev/null
+++ b/utils/libcamera-bug-report
@@ -0,0 +1,79 @@ 
+#!/usr/bin/env bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+REPORT="libcamera-report-$(hostname)-$(date +%Y%m%d-%H%M%S).txt"
+
+exec > >(tee "$REPORT") 2>&1
+
+section() {
+    echo
+    echo "=================================================="
+    echo "$1"
+    echo "=================================================="
+}
+
+run() {
+    echo
+    echo "\$ $*"
+    "$@" || echo "[WARN] Command failed: $*"
+}
+
+mark_kmsg() {
+    if [ -w /dev/kmsg ]; then
+        echo "libcamera-debug-report[$$]: $1" > /dev/kmsg
+    else
+        echo "[INFO] /dev/kmsg not writable, skipping kernel marker: $1"
+    fi
+}
+
+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 cat /sys/kernel/debug/devices_deferred
+
+section "V4L2 async pending subdevices"
+run 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 "$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 dmesg
+
+section "Permissions & capabilities"
+run id
+run groups
+command -v getcap >/dev/null && run getcap "$(which cam)"
+
+section "End of report"
+echo "Report saved to $REPORT"
diff --git a/utils/meson.build b/utils/meson.build
index 3deed8ad4d7e..1a9203f81763 100644
--- a/utils/meson.build
+++ b/utils/meson.build
@@ -7,3 +7,10 @@  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-debug-report',
+    install_dir: get_option('bindir'),
+    install_mode: 'rwxr-xr-x',
+)