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

相关推荐
Miracle&4 分钟前
2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
linux·网络·tcp/ip
专注API从业者19 分钟前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
Ribou1 小时前
Ubuntu 24.04.2安装k8s 1.33.4 配置cilium
linux·ubuntu·kubernetes
tan180°2 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
Mr. Cao code2 小时前
Docker:颠覆传统虚拟化的轻量级革命
linux·运维·ubuntu·docker·容器
抓饼先生3 小时前
Linux control group笔记
linux·笔记·bash
挺6的还3 小时前
25.线程概念和控制(二)
linux
您的通讯录好友3 小时前
conda环境导出
linux·windows·conda
代码AC不AC4 小时前
【Linux】vim工具篇
linux·vim·工具详解
码农hbk5 小时前
Linux signal 图文详解(三)信号处理
linux·信号处理