configfs介绍

一、configfs 简介

configfs 是一个基于内存(ram-based)的文件系统

二、configfs 和 sysfs 相比

sysfs 是以文件系统的方式呈现内核对象。

configfs 是以文件系统为手段管理内核对象或 config_items。

sysfs 所要呈现的对象在内核中创建(例如,在发现一个新设备时),并使用 sysfs 进行注册。注册后,对象的属性出现在 sysfs 下面,用户空间可以使用 readdir/ 读取属性内容,允许的情况下也可以使用 write 修改属性内容。关键点是:对象的创建和销毁都在内核里完成,其生命周期由内核控制,sysfs 仅仅是呈现这些的方式。

configfs 的 config_item 创建通过用户空间的 mkdir 操作实现,销毁使用 rmdir。mkdir 执行后,属性项也随之出现,后续使用 read/write 修改它们。和 sysfs 相同的是,configfs 同样可以使用 readdir 查询各个属性项,还可以使用 symlink 把一些属性组和起来;不同的是,configfs 的生命周期完全由用户空间控制。属性项背后的内核模块必须响应相应的操作。

sysfs 和 configfs 能够而且也应该在同一个系统上同时存在;并不存在谁替代谁的问题。

三、configfs 示例

3.1 功能简介

  • 设备有一个USB接口,该USB支持adb功能UVC功能,但同时只能使能一个
  • 默认是adb功能
  • adb功能和UVC功能通过 configfs 进行配置

3.2 配置实例

设备上电:

# ls /sys/kernel/config/
usb_gadget <-- configfs 已经挂载
# ls /sys/kernel/config/usb_gadget/
adb_demo <-- 当前功能:adb
# /etc/init.d/S90adb stop <-- 通知adb功能
[ 40.611471] configfs-gadget gadget: unbind function 'Function FS Gadget'/84990c24

# ls /sys/kernel/config/
#
# mount -t configfs none /sys/kernel/config <-- 挂载 configfs
# ls /sys/kernel/config/
usb_gadget
# ls /sys/kernel/config/usb_gadget/
#
#
# mkdir /sys/kernel/config/usb_gadget/uvc_demo <-- 使能UVC功能
# ls /sys/kernel/config/usb_gadget/
uvc_demo <-- 启用成功
# ls /sys/kernel/config/usb_gadget/uvc_demo/ <-- 内核生成的UVC配置文件
UDC bMaxPacketSize0 functions strings
bDeviceClass bcdDevice idProduct
bDeviceProtocol bcdUSB idVendor
bDeviceSubClass configs os_desc

后续即通过读写这些配置文件,对UVC进行配置。

原文地址:https://www.cnblogs.com/rockyching2009/p/15748015.html