v4l2-dev_set_name, devcie_register, dev_set_drvdata,

问题描述

dev_set_name, devcie_register, dev_set_drvdata,

正在看一个V4L框架的camera驱动,有一段没搞明白意义:
v4l2_i2c_subdev_init注册sensor_ops后,创建了一个以sensor的名字为name(如H22_MIPI)的device,
代码如下:
static struct device_attribute cci_device_attrs[] = {
__ATTR(addr_width, S_IWUSR | S_IRUGO, cci_device_addr_width_show, cci_device_addr_width_store),
__ATTR(data_width, S_IWUSR | S_IRUGO, cci_device_data_width_show, cci_device_data_width_store),
__ATTR(read_value, S_IRUGO, cci_device_read_value_show, NULL),
__ATTR(read_flag, S_IWUSR | S_IRUGO, cci_device_read_flag_show, cci_device_read_flag_store),
__ATTR(cci_client, S_IWUSR | S_IRUGO, cci_sys_show, cci_sys_store),
};
static int cci_sys_register(struct cci_driver drv_data)
{
int i, ret;
drv_data->cci_device = cci_device_def;
dev_set_name(&drv_data->cci_device, drv_data->name);
if (device_register(&drv_data->cci_device))
cci_err("error device_register()
");
dev_set_drvdata(&drv_data->cci_device,drv_data);
/
sysfs entries */
for (i = 0; i < ARRAY_SIZE(cci_device_attrs); i++) {
ret = device_create_file(&drv_data->cci_device, &cci_device_attrs[i]);
if (ret)
{
cci_err("device_create_file error
");
device_remove_file(&drv_data->cci_device, &drv_data->dev_attr_cci);
}
}
return 0;
}

//======================
里面的几个关键函数
dev_set_name
devcie_register
dev_set_drvdata

请问这段代码的作用除了创建设备节点,还有别的嘛?那么上面三个函数的作用及关系是啥?
如果我粘贴的代码有疑问,请告知,我可以更具体些

解决方案

dev_set_drvdata ,SET_NETDEV_DEV
关于dev_set_drvdata()和dev_get_drvdata()
dev_set_drvdata,dev_get_drvdata

解决方案二:

http://blog.csdn.net/smart_qiang/article/details/7628352

解决方案三:

上面不是有写吗,还有一个利用sysfs系统将驱动导入到上层,这样上层可以直接通过访问对应文件来调用你创建的cci_device_addr_width_show, cci_device_addr_width_store这种东西,至于你说的这几个函数都是为了向内核中注册一个这样的设备还有给这个设备确定驱动而存在的

时间: 2024-09-21 05:02:09

v4l2-dev_set_name, devcie_register, dev_set_drvdata,的相关文章

V4L2学习记录【转】

转自:http://blog.chinaunix.net/uid-30254565-id-5637600.html 4L2学习记录                                                                                                                                    这个还没有分析完,先在这放着,防止电脑坏掉丢了,以后再完善 V4L2的全称是video for linux

V4L2驱动的移植与应用(三)

三.V4L2的demo capture.c是官方示例程序. capture.c 程序中的 process_image 函数:        capture.c 程序主要是用来演示怎样使用 v4l2 接口,并没有对采集到的视频帧数据做任何实际的处理,仅仅用 process_image 函数表示了处理图像的代码位置.        process_image 函数只有一个参数,就是存储视频帧的内存的地址指针,但是在真正的应用中,通常还需要知道该指针指向的数据的大小.        因此可以修改函数,

V4L2驱动的移植与应用(一)

V4L2(video for linux) 可以支持多种设备,它可以有以下5种接口: 1.视频采集接口(video capture interface):这种应用的设备可以是高频头或者摄像头.V4L2的最初设计就是应用于这种功能的.下面也是着重讲解这种应用: 2.视频输出接口(video output interface):可以驱动计算机的外围视频图像设备--像可以输出电视信号格式的设备: 3.直接传输视频接口(video overlay interface):它的主要工作是把从视频采集设备采集

i2c 驱动 v4l2-davinci芯片dm6467t运行至v4l2报错

问题描述 davinci芯片dm6467t运行至v4l2报错 大家好,我是用的是DM6467T做实验,现在运行encodedecode程序时候出现以下错误:Error: Failed to create capture device 720P component input connected?此处为CaptureThrFxn线程中hCapture == NULL所致,追至上一步dmai下Capture.c文件中Capture_create函数(封装的v4l2操作)open操作未执行(部分代码)

DAVINCI DM6446 开发攻略——V4L2视频驱动和应用分析

 针对DAVINCI DM6446平台,网络上也有很多网友写了V4L2的驱动,但只是解析Montavista linux-2.6.10 V4L2的原理.结构和函数,深度不够.本文决定把Montavista 的Linux-2.6.18 V4L2好好分析一下,顺便讲解在产品中的应用,满足一些客户提出要求,毕竟V4L2是LINUX一个很重要的视频驱动,适合很多嵌入式芯片平台.本文首先讲解DM6446 DAVINCI视频处理技术的硬件工作原理,然后讲解DM6446 V4L2采集驱动和输出驱动,然后对TI

基于v4l2 ffmpeg x264的视频远程监控(附上编译好的库文件)

说明:主要是基于ghostyu网友整理的< arm mini2440 基于v4l2 ffmpeg x264的视频远程监控>.自己做了一遍,遇到不少问题,就整理记录下来.   1.平台 硬件:arm mini2440,usb摄像头(UVC免驱) 软件:ubuntu12.10,arm-Linux-gcc v4.4.3   2.源文件 功能体验包:http://download.csdn.net/detail/kangear/5202160 -----------------------------

采集视频-基于v4l2的视频采集求助

问题描述 基于v4l2的视频采集求助 想达成这样一个目的:代码运行后弹出一个框框,框框里显示的是摄像头获取的视频(连续取图,不是生成一个视频文件) 最近老师布置课程做人脸识别,我知道opencv所用的是cvQueryFrame,连续取图显示在框框里看起来就像是一个摄像头监控.请问一下v4l2可以做到吗?目前我在 ioctl(fd, VIDIOC_DQBUF, &buf) 取得一帧图像数据后就不知道该怎么处理了.如何才能显示在一个框内?然后下一帧又覆盖框内原先的图,使到框内形成动态?求助.或者给我

嵌入式v4l2驱动开发 tvp5150驱动开发

问题描述 嵌入式v4l2驱动开发 tvp5150驱动开发 查阅了很多关于v4l2驱动编写的博客和文件,发现都提到了v4l2_device_register()函数以及一些重要的结构体,如:video_device,v4l2_ioctl_ops等.然而我查看了内核kernel3.0.8提供的tvp5150.c文件,并未发现这些重要内容...然后,宝宝就晕了,不知道该怎么办来读这份内核驱动源码了..求助大家,,,跪谢 解决方案 http://blog.chinaunix.net/uid-107475

windows-关于Linux下V4L2获取设置参数

问题描述 关于Linux下V4L2获取设置参数 问题描述如下: 我在linux下使用V4L2对免驱摄像头进行操作,由于项目需求,需要通过USB线获取 摄像头板的GPI的状态,这个属于扩展功能,摄像头工程师是这么做的:由于我们的摄像头的GAMMA值不会被用到,因此当摄像头板检测到GPI电平有变化时,它就将 GAMMA对应的寄存器的值设置成另外一个值,然后我通过V4L2的函数ioctl,参数为VIDIOC_G_GAMMA来获取当前的GAMMA值,但是读不到其变化.问题是,我在windows下又可以读