usb function 为设备添加属性<三>

1、f_usb_function_root_type

该结构变量就是实现创建新设备和给添加全局属性的关键。

c 复制代码
static struct config_group *f_usb_function_sub_device_make(struct config_group *group, const char *name)
{

}

static void f_usb_function_sub_device_drop(struct config_group *group,  struct config_item *item)
{

}

static const struct config_group_operations f_usb_function_root_group_ops = {
	.make_gorup = f_usb_function_sub_device_make,
	.drop_item = f_usb_function_sub_device_drop,
}

static void f_usb_device_root_release(struct config_item *item)
{
	struct f_usb_function_device_opts *opts = container_of(to_config_group(item), struct f_usb_function_device_opts, inst.group);
	usb_put_function_instance(&opts->inst);
}

static ssize_t f_usb_function_bufsize_show(struct config_item *item, char *buf)
{
	struct f_usb_function_device_opts *opts = container_of(to_config_group(item), struct f_usb_function_device_opts, inst.group);
	sprintf(buf, "%d\n", opts->bufsize);
}

static ssize_t f_usb_function_bufsize_show(struct config_item *item, const char *buf, size_t size)
{
	struct f_usb_function_device_opts *opts = container_of(to_config_group(item), struct f_usb_function_device_opts, inst.group);
	unsigned long val;
	int ret;

	ret = kstrtoul(buf, 0, &val);
	if (ret)
		return ret;
	opts->bufsize = val;
	return size;
}

CONFIGFS_ATTR(f_usb_function_, bufsize);

static const struct configfs_item_operations f_usb_function_root_ops = {
	.release = f_usb_device_root_release,
};

static const struct configfs_attribute *f_usb_function_root_attrs[] = {
	&f_usb_function_attr_bufsize,
	NULL,
};

struct config_item_type f_usb_function_root_type {
	.ct_group_ops = &f_usb_function_root_group_ops,
	.ct_item_ops = &f_usb_function_root_ops,
	.ct_attrs = f_usb_function_root_attrs,
	.owner = THIS_MODULE,
};

在f_usb_device_root_release中调用usb_put_function_instance,在跟进去之后

就会发现,是调用了f_usb_function_device_instance_free,以此实现功能移除时

资源的释放。

属性的配置通过f_usb_function_root_attrs的回调函数实现。

相关推荐
wljy17 小时前
二、进制状态转换
linux·运维·服务器·c语言·c++
week@eight7 小时前
Linux - Doris
linux·运维·数据库·mysql
平行云7 小时前
实时云渲染预启动技术解析:UE数字孪生应用的延迟优化机制(二)
linux·unity·ue5·webgl·实时云渲染·云桌面·像素流
看到代码头都是大的8 小时前
CentOS环境下手动升级openssl、openssh
linux·运维·centos
浮生若城8 小时前
Linux——Ext系列文件系统
linux·运维·服务器
枳实-叶8 小时前
【Linux驱动开发】第16天:按键中断完整实战
linux·运维·驱动开发
杨云龙UP9 小时前
Oracle Recycle Bin 回收站详解:DROP TABLE 后还能找回吗?
linux·运维·数据库·sql·mysql·oracle
又熟了11 小时前
乌班图Ubuntu安装
linux·运维·ubuntu
Cat_Rocky11 小时前
Linux-ansible之Playbook简单应用
linux·网络·ansible
Do_GH11 小时前
【Linux】09.WSL+SVN部署操作说明
linux·运维·svn