imx6q camera驱动添加自己的ioctl
来源:互联网 发布:电脑主题壁纸软件 编辑:程序博客网 时间:2024/06/16 11:04
1 例如我们要添加一个自己的IOCTL,函数如下
static int ioctl_s_mytest(struct v4l2_int_device *s,int para)
{
............
return 0;
}
1.1 在v42-int-device.h添加如下代码:
* IOCTL command numbers. */
enum v4l2_int_ioctl_num {
/*
*
* "Proper" V4L ioctls, as in struct video_device.
*
*/
vidioc_int_enum_fmt_cap_num = 1,
.........
vidioc_int_s_input_mytest, /* 这里添加自己的ioctl num */
vidioc_int_priv_start_num = 2000,
};
V4L2_INT_WRAPPER_1(s_mytest, int, *);/* 这里添加自己的ioctl */
1.2 在video decoder 的驱动中(例如adv7180.c\ov5640.c等等)添加自己的ioctl函数,例如
static int ioctl_s_mytest(struct v4l2_int_device *s,int para)
{
............
return 0;
}
这个函数的参数个数和类型可以根据自己的功能自行定义,目前imx6q的原始代码只有一个参数和两个参数的,如果需要更多参数的函数,
需要参考V4L2_INT_WRAPPER_1的宏定义,自己定义。V4L2_INT_WRAPPER_1宏定义在v42-int-device.h中
在video decoder 的驱动中添加
static struct v4l2_int_ioctl_desc xxx_ioctl_desc[] = {
{vidioc_int_dev_init_num, (v4l2_int_ioctl_func*)ioctl_dev_init},
......
{vidioc_int_s_mytest, (v4l2_int_ioctl_func*)ioctl_s_mytest},
}
1.3 include\uapi\linux\videodev2.h中添加自己的ioctl的宏定义,这个宏定义定义在自己的头文件中也可以,只要没有重复就可以。
#define VIDIOC_MY_TEST _IOWR('V', 103, int)
1.4 在mxc_v4l2_capture.c 添加
static long mxc_v4l_do_ioctl(struct file *file, unsigned int ioctlnr, void *arg)
{
case VIDIOC_MY_TEST:
{
int *para= arg;
vidioc_int_s_mytest(cam->sensor, *(unsigned int *)arg);
break;
}
}
在应用程序中调用的例子
int fd_capture_v4l ;
int para = 3 ;
fd_capture_v4l = open("/dev/video0", O_RDWR, 0);
.......
if (ioctl(fd_capture_v4l, VIDIOC_MY_TEST, ¶) < 0)
{
return -1;
}
........
close(fd_capture_v4l);
2 video decoder 的驱动与mxc_v4l2_capture的匹配
imx6q 有两个capture,如果板上有两个video decoder ,是通过dts中的csi_id来匹配的
在v4l2_cap_0、v4l2_cap_1中定义的有csi_id,
在例如ov564x、adv7180等的dts中也有csi_id的定义,我们只要修改这个csi_id的数值,就可以确定video decoder和哪个capture匹配。
static int ioctl_s_mytest(struct v4l2_int_device *s,int para)
{
............
return 0;
}
1.1 在v42-int-device.h添加如下代码:
* IOCTL command numbers. */
enum v4l2_int_ioctl_num {
/*
*
* "Proper" V4L ioctls, as in struct video_device.
*
*/
vidioc_int_enum_fmt_cap_num = 1,
.........
vidioc_int_s_input_mytest, /* 这里添加自己的ioctl num */
vidioc_int_priv_start_num = 2000,
};
V4L2_INT_WRAPPER_1(s_mytest, int, *);/* 这里添加自己的ioctl */
1.2 在video decoder 的驱动中(例如adv7180.c\ov5640.c等等)添加自己的ioctl函数,例如
static int ioctl_s_mytest(struct v4l2_int_device *s,int para)
{
............
return 0;
}
这个函数的参数个数和类型可以根据自己的功能自行定义,目前imx6q的原始代码只有一个参数和两个参数的,如果需要更多参数的函数,
需要参考V4L2_INT_WRAPPER_1的宏定义,自己定义。V4L2_INT_WRAPPER_1宏定义在v42-int-device.h中
在video decoder 的驱动中添加
static struct v4l2_int_ioctl_desc xxx_ioctl_desc[] = {
{vidioc_int_dev_init_num, (v4l2_int_ioctl_func*)ioctl_dev_init},
......
{vidioc_int_s_mytest, (v4l2_int_ioctl_func*)ioctl_s_mytest},
}
1.3 include\uapi\linux\videodev2.h中添加自己的ioctl的宏定义,这个宏定义定义在自己的头文件中也可以,只要没有重复就可以。
#define VIDIOC_MY_TEST _IOWR('V', 103, int)
1.4 在mxc_v4l2_capture.c 添加
static long mxc_v4l_do_ioctl(struct file *file, unsigned int ioctlnr, void *arg)
{
case VIDIOC_MY_TEST:
{
int *para= arg;
vidioc_int_s_mytest(cam->sensor, *(unsigned int *)arg);
break;
}
}
在应用程序中调用的例子
int fd_capture_v4l ;
int para = 3 ;
fd_capture_v4l = open("/dev/video0", O_RDWR, 0);
.......
if (ioctl(fd_capture_v4l, VIDIOC_MY_TEST, ¶) < 0)
{
return -1;
}
........
close(fd_capture_v4l);
2 video decoder 的驱动与mxc_v4l2_capture的匹配
imx6q 有两个capture,如果板上有两个video decoder ,是通过dts中的csi_id来匹配的
在v4l2_cap_0、v4l2_cap_1中定义的有csi_id,
在例如ov564x、adv7180等的dts中也有csi_id的定义,我们只要修改这个csi_id的数值,就可以确定video decoder和哪个capture匹配。
阅读全文
0 0
- imx6q camera驱动添加自己的ioctl
- imx6q yocto 添加自己的应用程序
- MTK8127添加一个新的camera驱动
- Windows驱动的IOCTL
- imx6q上的背光驱动分析
- imx6q led灯驱动及测试代码ioctl(自动创建设备文件v2)
- Android Camera驱动中添加新的mode
- 设备驱动的ioctl函数
- 驱动中ioctl的使用
- 构造自己的IOCTL命令 让你的驱动飞起来
- 构造自己的IOCTL命令 让你的驱动飞起来
- 为linux添加自己的USB驱动
- 为linux添加自己的USB驱动
- android中添加自己的驱动
- imx6q can驱动理解
- imx6q中的按键驱动
- 实现自己的Camera
- 实现自己的Camera
- 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
- Git简单生成生成公钥和私钥方法
- SQL Java + 数据库 知识点大全
- Java常用API(二)
- oracle RAC在某节点对部分表执行DML时遭遇TNS-12154报错
- imx6q camera驱动添加自己的ioctl
- C程序设计谭浩强--总结
- 文章标题 CSU 1913 (线段树+二分答案)
- 线性规划--单纯形法
- sql 数据库 多表之间的查询 纯逻辑 共勉
- python 的日志logging模块学习
- Husky中文文档-C++ Husky Aggregator 指南
- OpenCV学习笔记3:找出人脸,同时比较两张图片中的人脸相似度
- 测试时一些手机(比如魅族、华为)不能打印日志解决办法