0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux configfs的内部机制介绍

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-13 11:00 次阅读

2.1 configfs 和 sysfs
configfs 和 sysfs 都是基于内存的虚拟文件系统,但是它们并不相同。

对于 sysfs,当内核创建某个对象时,比如注册一个 platform_drvier 时,它就会被注册进 sysfs 里。它的属性就会在 sysfs
中出现:用户程序可以通过 readdir、read 函数读取这些属性,也可以通过 write 函数修改某些属性。重点在于:sysfs
中的内容是在内核里创建、销毁,内核控制着 sysfs 的生命周期。可以认为 sysfs 就是这些内核对象的观察窗口。

对于 configfs,当然也需要内核驱动程序的支撑。但是操作 configfs 的启动是用户程序:用户执行 mkdir
时会在内核里创建一个config_item 对象,用户执行 rmdir 时会销毁这个内核对象。当执行 mkdir 创建目录时,这个 config_item
的属性就会出现在这个目录下。用户程序可以执行 read、write 操作读写这些属性。与 sysfs 的不同在于:configfs
中目录、文件的生命周期由用户程序决定。

2.2 重要结构体

挂载 configfs 文件系统后,在里面创建/删除目录、读写文件、建立链接文件,都会导致内核中相关函数被调用。

站在用户的角度来说,一个文件系统里面有目录、文件两种对象。在 configfs 的内核实现中,对应 4 个概念。从底往上看:

configfs_attribute、configfs_bin_attribute:对应文件

configfs_attribute 对应的文件里含有的是可视化的字符串信息,它在内核里有一个结构体:

struct configfs_attribute { char *ca_name; struct module *ca_owner; umode_t
ca_mode; ssize_t (*show)(struct config_item *, char *); ssize_t (*store)(struct
config_item *, const char *, size_t); };

configfs_bin_attribute 对应的文件里含有的是二进制信息,它在内核里有一个结构体:

struct configfs_bin_attribute { struct configfs_attribute cb_attr; /* std.
attribute */ void cb_private; / for user / size_t cb_max_size; / max core
size */ ssize_t (*read)(struct config_item *, void *, size_t); ssize_t
(*write)(struct config_item *, const void *, size_t);};

读写文件时,会导致上述结构体里的 show/store 或者 read/write 函数被调用

文件是位于某个目录的: config_item

config_item:configfs 中的每个对象都是 config_item,后面的 config_group、subsystem
本质上都属于特殊的 config_item

config_group、subsystem,config_item 都对应一个目录

跟 config_group、subsystem 对比时,config_item 这个目录下不再有目录

在 config_item 目录下有属性文件,还可以创建链接文件

链接文件的操作结构体是:config_item_type 里的 configs_item_operations

图片

config_group:它是特殊的 config_item,它有对应一个目录

普通的 config_item:下面不再有子目录

config_group:下面还可以创建 config_item 或者 config_group,即:下面可以再创建子目录

在当前目录下操作子目录时,对应的操作结构体是:config_item_type 里的 configs_group_operations

图片

subsystem:它是 configfs 文件系中的最顶层

比如:/sys/kernel/config/usb_gadget、/sys/kernel/config/iio

在driversusbgadgetconfigfs.c中调用configfs_register_subsystem(&gadget_subsys)就会创建
subsystem,它对应 configfs 文件系统中的顶层目录usb_gadget

subsystem 也属于 config_group

图片

2.3 configfs 使用流程

跟 legacy 方法类比,要做的事情是一样的:

创建 usb_composite_dev

设置设备描述符

设置配置描述符

添加接口(功能)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5044

    文章

    18805

    浏览量

    298374
  • Linux
    +关注

    关注

    87

    文章

    11122

    浏览量

    207880
  • 函数
    +关注

    关注

    3

    文章

    4233

    浏览量

    61961
收藏 人收藏

    评论

    相关推荐

    Linux系统安全机制及技术大观

    Linux 系统是开放的, 其上安全机制、工具很多,不同的场景其安全目标和选择的工具都不相同。以下从个人角度仿ATT&CK列出一些常见的安全机制和技术。
    发表于 05-19 10:59 2743次阅读
    <b class='flag-5'>Linux</b>系统安全<b class='flag-5'>机制</b>及技术大观

    Linux 机制分析

    走入 Linux 的殿堂已经有一年有余了,在这里我想将 Linux 的各种实现机制分析一遍,一方面对自己来说也是温故而知新,另一方面,促进大家的交流,最好能够给大家一些抛砖引玉的启迪。我是硬件出身
    发表于 05-21 09:51

    结构型吸波机制介绍

    上一篇文章,我们介绍了吸波材料的损耗型吸波机制,这类型的吸波材料通常需要控制内部损耗介质的类型及结构问题。在这一篇我们讲述结构型吸波机制。结构型吸波材料主要是依靠相消原理【1】来吸收电
    发表于 07-01 07:25

    Linux串口通信的超时机制

    Linux下使用串口通信时,默认的阻塞模式是不实用的。而采用select或epoll机制的非阻塞模式,写代码有比较麻烦。幸好Linux的串口自己就带有超时机制
    发表于 07-05 08:38

    详解Linux内核抢占实现机制

    本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性。然后分析了禁止内核抢占的情况和内核抢占的时机,最后
    发表于 08-06 06:16

    详解Linux能力机制

    Linux能力机制
    发表于 04-20 08:23

    INtime RTOS内部的关键处理机制是什么

    INtime RTOS内部的关键处理机制是什么?INtime RTOS内部的关键处理机制有哪些相关的应用案例?
    发表于 09-29 06:28

    Linux与VxWorks任务调度机制分析

    Linux与VxWorks任务调度机制分析
    发表于 03-28 09:52 19次下载

    linux内存管理机制浅析

    本内容介绍了arm linux内存管理机制,详细说明了linux内核内存管理,linux虚拟内存管理,arm
    发表于 12-19 14:09 73次下载
    <b class='flag-5'>linux</b>内存管理<b class='flag-5'>机制</b>浅析

    Linux系统的fork运行机制分析

    如果其中一个进程的输出结果是“pid1:1001, pid2:1002”,写出其他进程的输出结果(不考虑进程执行顺序)。 明显这道题的目的是考察linux下fork的执行机制。下面我们通过分析这个题目,谈谈Linux下fork
    发表于 04-26 16:26 1113次阅读
    <b class='flag-5'>Linux</b>系统的fork运行<b class='flag-5'>机制</b>分析

    Linux的notifier机制在TP中的应用

    linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。
    发表于 05-05 11:46 2152次阅读

    Linux内核驱动的platform机制是怎样的

    Linux 2.6起引入了一套新的驱动管理和注册机制:platform_device和platform_driver。
    发表于 11-06 14:12 1494次阅读
    <b class='flag-5'>Linux</b>内核驱动的platform<b class='flag-5'>机制</b>是怎样的

    面向Linux系统的系统数据容灾机制综述

    面向Linux系统的系统数据容灾机制综述
    发表于 06-27 14:29 8次下载

    Linux内核文件Cache机制

    Linux内核文件Cache机制(开关电源技术与设计 第二版)-Linux内核文件Cache机制                
    发表于 08-31 16:34 4次下载
    <b class='flag-5'>Linux</b>内核文件Cache<b class='flag-5'>机制</b>

    Linux configfs的使用

    1. 体验 1.1 使用 所有命令都是在开发板上执行。 挂载 configfs 文件系统 # modprobe libcomposite# mount -t configfs none /sys
    的头像 发表于 07-13 10:59 900次阅读