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

相关推荐
2201_7611990437 分钟前
nginx 负载均衡1
linux·运维·服务器·nginx·负载均衡
suri ..42 分钟前
【Linux】进程第三弹(虚拟地址空间)
linux·运维·服务器
害羞的白菜43 分钟前
Nginx基础详解5(nginx集群、四七层的负载均衡、Jmeter工具的使用、实验验证集群的性能与单节点的性能)
linux·运维·笔记·jmeter·nginx·centos·负载均衡
纪伊路上盛名在43 分钟前
如何初步部署自己的服务器,达到生信分析的及格线
linux·运维·服务器·python·学习·r语言·github
Betty’s Sweet1 小时前
[Linux]:线程(三)
linux·线程·信号量·生产者消费者模型
程序员南飞3 小时前
ps aux | grep smart_webrtc这条指令代表什么意思
java·linux·ubuntu·webrtc
StrokeAce3 小时前
linux桌面软件(wps)内嵌到主窗口后的关闭问题
linux·c++·qt·wps·窗口内嵌
热爱嵌入式的小许7 小时前
Linux基础项目开发1:量产工具——显示系统
linux·运维·服务器·韦东山量产工具
韩楚风11 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学11 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm