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

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 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀