笨___笨 2016-04-10 11:38 采纳率: 0%
浏览 2305
已结题

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()\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

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

  • 写回答

2条回答 默认 最新

  • xiao哦草 2016-04-11 01:23
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作