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的回调函数实现。

相关推荐
郁大锤2 分钟前
conda虚拟环境占用空间太多,如何清理?
linux·conda
悢七17 分钟前
windows npm打包无问题,但linux npm打包后部分样式缺失
linux·前端·npm
The Chosen One98519 分钟前
【Linux】Linux下基本指令:man echo cp mv move less date grep zip tar 指令以及指令的本质
linux·运维·服务器
退役小学生呀1 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
君以思为故1 小时前
认识linux -- 编辑器vim以及编译器gcc/g++和Makefile文件
linux·编辑器·vim
王道长服务器 | 亚马逊云1 小时前
AWS + Discuz!:社区站架构的现代化玩法
linux·网络·云计算·智能路由器·aws
lht6319356121 小时前
部署开源漏洞扫描工具SiriusScan及问题解决
linux·安全·开源
笨蛋少年派2 小时前
*清理磁盘空间
linux·运维·服务器
我搞slam2 小时前
有效的括号--leetcode
linux·算法·leetcode
swsauto2 小时前
Ubuntu系统开机图标变大分辨率降低,找不到其他选项
linux·运维·ubuntu