You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux V4L2驱动调用video_register_device返回EINVAL无效参数问题排查

问题原因

你使用的Raspbian 11对应5.10版本内核,该版本的V4L2子系统增加了更多参数合法性检查,当前代码存在三处问题触发了EINVAL错误:

  • struct video_device 的 vfl_dir 字段未初始化,5.10内核注册视频设备时会强制校验该字段的合法性
  • struct v4l2_capability 的 device_caps 和 version 字段未按要求填充
  • 注册失败后的资源释放顺序错误,可能引发次生异常
修复步骤
  1. 在初始化video_device的代码块中添加vfl_dir配置,指定设备为视频捕获类型:
ar->vdev.ioctl_ops = &ar_ioctl_ops;
ar->vdev.release = video_device_release_empty;
// 新增配置行
ar->vdev.vfl_dir = VFL_DIR_RX;
video_set_drvdata(&ar->vdev, ar);
  1. 补全ar_querycap函数中v4l2_capability的未填字段:
strlcpy(vcap->bus_info, "Mark test BUS", sizeof(vcap->bus_info));
// 新增两行配置
vcap->version = KERNEL_VERSION(0, 0, 1);
vcap->device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE;
vcap->capabilities = vcap->device_caps | V4L2_CAP_DEVICE_CAPS;
  1. 修正错误的资源释放顺序,先卸载视频设备再卸载V4L2设备:
out_dev:
  video_unregister_device(&ar->vdev);
  v4l2_device_unregister(&ar->v4l2_dev);
验证

修改后重新编译模块,执行insmod加载即可正常注册设备,可通过ls /dev/video*查看生成的设备节点。

内容的提问来源于stack exchange,提问作者somebody4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:45:03