银河麒麟系统摄像头能识别但无法录像,常见原因包括驱动未加载、权限不足、应用调用失败或设备节点异常,需按硬件识别→内核驱动→用户组权限→应用层调用链路逐层排查。

银河麒麟系统下摄像头能识别但无法正常录像,常见于驱动未加载、权限不足、应用调用失败或设备节点异常。需逐层验证硬件识别→内核驱动→用户组权限→应用层调用链路,跳过任一环节都可能导致录像失败。
确认摄像头是否被系统正确识别
打开终端,执行:lsusb | grep -i camera 或 lspci | grep -i video。若无任何输出,说明系统未枚举到设备——此时不是软件问题,而是BIOS中摄像头被禁用、物理排线松动或USB控制器故障。
有输出但设备名含“unrecognized”或“failed”,需立即检查 dmesg | grep -i uvc 是否报错“device descriptor read/64, error -71”,这通常指向供电不足或USB协议兼容问题。
检查并加载uvcvideo驱动模块
执行 lsmod | grep uvcvideo。若无返回,说明驱动未加载,录像功能必然失效。
手动加载驱动:sudo modprobe uvcvideo。成功后再次运行 lsmod | grep uvcvideo 应显示模块信息(如 uvcvideo 122880 0)。
【关键前提】 若 modprobe 报错 “FATAL: Module uvcvideo not found”,说明内核未编译该模块或当前内核版本不匹配——需重装对应版本的 linux-image 和 linux-modules 包,而非仅安装 linux-firmware。
验证/dev/video*设备节点与用户权限
执行 ls -l /dev/video*。正常应看到类似 crw-rw----+ 1 root video 81, 0 Jun 25 16:22 /dev/video0 的输出。
若权限为 crw------- 或所属组非 video,则普通用户无法读取视频流。
确认当前用户是否在 video 组:groups。若无 video,执行 sudo usermod -aG video $USER,然后必须注销并重新登录——仅重启终端无效。
测试基础录像能力(绕过图形应用)
方法一:用ffmpeg捕获1秒视频ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -t 1 -c:v libx264 ~/test.mp4
若报错“Cannot find a proper format for codec 'libx264'”,说明缺少编码器支持,改用 -c:v copy 直接封装原始流。
方法二:用v4l2-ctl抓单帧验证设备可读v4l2-ctl --device /dev/video0 --all 查看参数;再执行 v4l2-ctl --device /dev/video0 --set-fmt-video=width=640,height=480,pixelformat=MJPG,随后 v4l2-ctl --device /dev/video0 --stream-mmap --stream-count=1 --stream-to=test.jpg。成功生成 test.jpg 表明设备层正常。
若 v4l2-ctl 报错 “failed: Permission denied”,而 groups 已确认含 video,则可能是 SELinux 或 AppArmor 策略拦截——临时关闭策略验证:sudo setenforce 0(仅测试用)。
排查应用层录像失败的具体原因
第一步:启动系统自带“相机”应用,点击录像按钮。
若界面黑屏但进度条走动,说明应用已获取设备句柄但解码失败——大概率是 libgl 驱动冲突,尤其在ARM平台或使用海康威视等专用SDK时。
第二步:检查OpenGL错误日志。
运行 export LIBGL_DEBUG=verbose 后再启动应用,观察终端是否输出 libGL error: failed to load driver: swrast 或 pci id for fd xx: xxxx:xxxx, driver (null)。出现此类错误时,直接删除冲突的软链接:sudo rm /usr/lib/aarch64-linux-gnu/libGL.so.1(适用于鲲鹏/飞腾平台)。
第三步:验证第三方应用权限。
进入“控制中心 → 隐私与安全 → 相机”,确保目标应用(如钉钉、腾讯会议)右侧开关为开启状态;若开关灰显,先打开顶部总开关“允许应用访问你的相机”。











