树莓派Bullseye系统下libcamera编译及相机识别问题求助
我是树莓派与Linux编程新手,使用Cluster Hat网站的自定义Lite镜像运行在Pi Zero上,目标实现4台Pi Zero各连接相机同步拍摄。系统更新后运行libcamera-hello命令出现相机启动失败错误,修改boot配置文件后问题依旧。尝试按官方文档编译libcamera库时,因Pi Zero资源不足导致编译卡顿,通过ninja -C build install -j1限制单进程并以sudo权限执行完成编译,但运行libcamera-hello仍提示ERROR: *** no cameras available ***。
具体报错信息
运行libcamera-hello --qt-preview的输出:
~ $ libcamera-hello --qt-preview Preview window unavailable [3:50:05.192541323] [19229] INFO Camera camera_manager.cpp:293 libcamera v0.0.0+3866-0c55e522 [3:50:05.256764631] [19230] INFO RPI raspberrypi.cpp:1374 Registered camera /base/soc/i2c0mux/i2c@1/imx477@1a to Unicam device /dev/media3 and ISP device /dev/media0 [3:50:05.258008024] [19229] INFO Camera camera.cpp:1035 configuring streams: (0) 2028x1520-YUV420 [3:50:05.258793654] [19230] INFO RPI raspberrypi.cpp:761 Sensor: /base/soc/i2c0mux/i2c@1/imx477@1a - Selected sensor format: 2028x1520-SBGGR12_1X12 - Selected unicam format: 2028x1520-pBCC [3:50:05.820926093] [19230] ERROR V4L2 v4l2_videodevice.cpp:1890 /dev/video14[15:cap]: Failed to start streaming: No such file or directory ERROR: *** failed to start camera ***
修改后的boot配置文件内容
#Enable DRM VC4 V3D driver dtoverlay=imx477 #this line was added by me gpu_mem=256 #so was this line dtoverlay=vc4-kms-v3d,cma-512 max_framebuffers=2
编译libcamera的操作步骤
~ $ git clone https://git.libcamera.org/libcamera/libcamera.git ~ $ sudo apt install meson ninja-build pkg-config ~ $ sudo apt install g++ ~ $ sudo apt install clang ~ $ sudo apt install -C build install ~ $ sudo apt install libyaml-dev python3-yaml python3-ply python3-jinja2 ~ $ sudo apt install libssl-dev openssl libdw-dev libunwind-dev libudev-dev ~ $ sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev ~ $ sudo apt install libdrm-dev libjpeg libsdl2-dev ~ $ cd libcamera ~/libcamera $ meson build ~/libcamera $ ninja -C build install
编译卡顿解决:使用ninja -C build install -j1限制并行进程为1,并以sudo权限运行meson build和编译命令,完成编译后问题仍存在。
排查与解决建议
检查V4L2设备节点
报错提示/dev/video14不存在,先列出所有V4L2设备:ls /dev/video* /dev/media*如果
/dev/video14缺失,尝试重新加载相关内核模块:sudo modprobe bcm2835-v4l2 sudo modprobe unicam之后再次检查设备节点是否出现。
修正boot配置冲突
当前boot配置中dtoverlay顺序可能存在问题,且Pi Zero仅512MB RAM,cma-512超出可用内存上限。建议调整配置:#Enable DRM VC4 V3D driver dtoverlay=vc4-kms-v3d,cma-256 dtoverlay=imx477 gpu_mem=128 max_framebuffers=1调整后重启系统,再测试相机。
验证I2C相机连接
IMX477通过I2C通信,检查I2C总线是否能检测到相机:sudo i2cdetect -y 1如果地址
0x1a(IMX477默认地址)未出现,需排查硬件问题:排线是否松动、Cluster Hat给Pi Zero的相机接口供电是否正常。使用官方镜像测试
Cluster Hat自定义镜像可能存在兼容性问题,先在单台Pi Zero上刷官方Raspberry Pi OS Lite镜像,验证libcamera-hello能否正常运行,排除硬件和相机本身的问题。清理自定义编译的libcamera
自行编译的libcamera可能与系统预装版本冲突,先卸载自定义编译的库:sudo ninja -C libcamera/build uninstall sudo apt reinstall libcamera0 libcamera-apps-lite之后用系统默认版本测试。
内容的提问来源于stack exchange,提问作者Matthew Banko

