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進行配置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM