2 ben   ben Ben___Ben 于 2016.04.10 19:38 提问

dev_set_name, devcie_register, dev_set_drvdata, 1C

正在看一个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()\n");
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\n");
device_remove_file(&drv_data->cci_device, &drv_data->dev_attr_cci);
}
}
return 0;
}

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

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

3个回答

CSDNXIAON
CSDNXIAON   2016.04.10 19:42

dev_set_drvdata ,SET_NETDEV_DEV
关于dev_set_drvdata()和dev_get_drvdata()
dev_set_drvdata,dev_get_drvdata
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

devmiao
devmiao   Ds   Rxr 2016.04.10 22:10
ouchao0727
ouchao0727   2016.04.11 09:23

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!