问题描述
- 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