博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
configfs例程
阅读量:4214 次
发布时间:2019-05-26

本文共 2105 字,大约阅读时间需要 7 分钟。

configfs文件系统是一种基于ram的文件系统,用于配置内核对象,configfs可以通过用户态目录文件访问接口配置复杂的对象,可以在用户态创建和删除内核对象。configfs 可以让用户通过shell 来配置内核对象在samples下有个configfs_example的例程分析如下:这是一个模块,static int __init configfs_example_init(void){	int ret;	int i;	struct configfs_subsystem *subsys;	#从这个for循环可以知道会建立三个configfs的子目录	for (i = 0; example_subsys[i]; i++) {		#得到要创建的configfs_subsystem 		subsys = example_subsys[i];		#初始化configfs_subsystem 		config_group_init(&subsys->su_group);		mutex_init(&subsys->su_mutex);		#创建configfs_subsystem 		ret = configfs_register_subsystem(subsys);		if (ret) {			printk(KERN_ERR "Error %d while registering subsystem %s\n",			       ret,			       subsys->su_group.cg_item.ci_namebuf);			goto out_unregister;		}	}	return 0;out_unregister:	for (i--; i >= 0; i--)		configfs_unregister_subsystem(example_subsys[i]);	return ret;}module_init(configfs_example_init);*example_subsys的定义如下:可以看到会创建三个目录,我们以第一个childless为例static struct configfs_subsystem *example_subsys[] = {	&childless_subsys.subsys,	&simple_children_subsys,	&group_children_subsys,	NULL,};可以看到这里通过configfs的cg_item中的.ci_namebuf 来指定目录的名字为01-childlessstatic struct childless childless_subsys = {	.subsys = {		.su_group = {			.cg_item = {				.ci_namebuf = "01-childless",				.ci_type = &childless_type,			},		},	},};从childless_type 可以知道,在01-childless 这个目录下定义了两个ro的对象showme和description,一个rw的对象storemeCONFIGFS_ATTR_RO(childless_, showme);CONFIGFS_ATTR(childless_, storeme);CONFIGFS_ATTR_RO(childless_, description);static struct configfs_attribute *childless_attrs[] = {	&childless_attr_showme,	&childless_attr_storeme,	&childless_attr_description,	NULL,};static const struct config_item_type childless_type = {	.ct_attrs	= childless_attrs,	.ct_owner	= THIS_MODULE,};这里以storeme为例,可以看到就是讲字符串保存到childless->storemestatic ssize_t childless_storeme_store(struct config_item *item,		const char *page, size_t count){	struct childless *childless = to_childless(item);	unsigned long tmp;	char *p = (char *) page;	tmp = simple_strtoul(p, &p, 10);	if (!p || (*p && (*p != '\n')))		return -EINVAL;	if (tmp > INT_MAX)		return -ERANGE;	childless->storeme = tmp;	return count;}

 

转载地址:http://linmi.baihongyu.com/

你可能感兴趣的文章
谈谈ios传值方式(属性传值、代理传值、Block传值、单例传值、通知传值、KVC传值)
查看>>
ios 数组最大值,最小值,平均值,和的快速算法
查看>>
ios 让UITextField(输入框)直接进入编辑状态
查看>>
如何优雅的谈论Objective-C
查看>>
ios 自定义返回按钮侧滑失效完美解决方案
查看>>
深入理解Objective-C Runtime
查看>>
深入理解RunLoop
查看>>
ios 应用内跳转微信
查看>>
iOS上如何让按钮文本左对齐问题
查看>>
Xcode8 兼容iOS 10 整理笔记
查看>>
iOS 枚举的巧用
查看>>
让你的 Xcode8 继续使用插件
查看>>
iOS去除导航栏和tabbar的1px横线
查看>>
iOS GitHub上常用第三方框架
查看>>
ios 隐藏cell分割线和自定义cell分割线颜色
查看>>
ios 图片保存到系统相册
查看>>
UIAlertController样式集合
查看>>
数据结构之—图
查看>>
计算机网络基础
查看>>
C++中内存(堆和栈)
查看>>