0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux configfs的內(nèi)部機制介紹

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-13 11:00 ? 次閱讀

2.1 configfs 和 sysfs
configfs 和 sysfs 都是基于內(nèi)存的虛擬文件系統(tǒng),但是它們并不相同。

對于 sysfs,當內(nèi)核創(chuàng)建某個對象時,比如注冊一個 platform_drvier 時,它就會被注冊進 sysfs 里。它的屬性就會在 sysfs
中出現(xiàn):用戶程序可以通過 readdir、read 函數(shù)讀取這些屬性,也可以通過 write 函數(shù)修改某些屬性。重點在于:sysfs
中的內(nèi)容是在內(nèi)核里創(chuàng)建、銷毀,內(nèi)核控制著 sysfs 的生命周期??梢哉J為 sysfs 就是這些內(nèi)核對象的觀察窗口。

對于 configfs,當然也需要內(nèi)核驅(qū)動程序的支撐。但是操作 configfs 的啟動是用戶程序:用戶執(zhí)行 mkdir
時會在內(nèi)核里創(chuàng)建一個config_item 對象,用戶執(zhí)行 rmdir 時會銷毀這個內(nèi)核對象。當執(zhí)行 mkdir 創(chuàng)建目錄時,這個 config_item
的屬性就會出現(xiàn)在這個目錄下。用戶程序可以執(zhí)行 read、write 操作讀寫這些屬性。與 sysfs 的不同在于:configfs
中目錄、文件的生命周期由用戶程序決定。

2.2 重要結(jié)構(gòu)體

掛載 configfs 文件系統(tǒng)后,在里面創(chuàng)建/刪除目錄、讀寫文件、建立鏈接文件,都會導(dǎo)致內(nèi)核中相關(guān)函數(shù)被調(diào)用。

站在用戶的角度來說,一個文件系統(tǒng)里面有目錄、文件兩種對象。在 configfs 的內(nèi)核實現(xiàn)中,對應(yīng) 4 個概念。從底往上看:

configfs_attribute、configfs_bin_attribute:對應(yīng)文件

configfs_attribute 對應(yīng)的文件里含有的是可視化的字符串信息,它在內(nèi)核里有一個結(jié)構(gòu)體:

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 對應(yīng)的文件里含有的是二進制信息,它在內(nèi)核里有一個結(jié)構(gòu)體:

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);};

讀寫文件時,會導(dǎo)致上述結(jié)構(gòu)體里的 show/store 或者 read/write 函數(shù)被調(diào)用

文件是位于某個目錄的: config_item

config_item:configfs 中的每個對象都是 config_item,后面的 config_group、subsystem
本質(zhì)上都屬于特殊的 config_item

config_group、subsystem,config_item 都對應(yīng)一個目錄

跟 config_group、subsystem 對比時,config_item 這個目錄下不再有目錄

在 config_item 目錄下有屬性文件,還可以創(chuàng)建鏈接文件

鏈接文件的操作結(jié)構(gòu)體是:config_item_type 里的 configs_item_operations

圖片

config_group:它是特殊的 config_item,它有對應(yīng)一個目錄

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

config_group:下面還可以創(chuàng)建 config_item 或者 config_group,即:下面可以再創(chuàng)建子目錄

在當前目錄下操作子目錄時,對應(yīng)的操作結(jié)構(gòu)體是:config_item_type 里的 configs_group_operations

圖片

subsystem:它是 configfs 文件系中的最頂層

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

在driversusbgadgetconfigfs.c中調(diào)用configfs_register_subsystem(&gadget_subsys)就會創(chuàng)建
subsystem,它對應(yīng) configfs 文件系統(tǒng)中的頂層目錄usb_gadget

subsystem 也屬于 config_group

圖片

2.3 configfs 使用流程

跟 legacy 方法類比,要做的事情是一樣的:

創(chuàng)建 usb_composite_dev

設(shè)置設(shè)備描述符

設(shè)置配置描述符

添加接口(功能)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18817

    瀏覽量

    298538
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207910
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61967
收藏 人收藏

    評論

    相關(guān)推薦

    Linux系統(tǒng)安全機制及技術(shù)大觀

    Linux 系統(tǒng)是開放的, 其上安全機制、工具很多,不同的場景其安全目標和選擇的工具都不相同。以下從個人角度仿ATT&CK列出一些常見的安全機制和技術(shù)。
    發(fā)表于 05-19 10:59 ?2751次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)安全<b class='flag-5'>機制</b>及技術(shù)大觀

    Linux 機制分析

    走入 Linux 的殿堂已經(jīng)有一年有余了,在這里我想將 Linux 的各種實現(xiàn)機制分析一遍,一方面對自己來說也是溫故而知新,另一方面,促進大家的交流,最好能夠給大家一些拋磚引玉的啟迪。我是硬件出身
    發(fā)表于 05-21 09:51

    結(jié)構(gòu)型吸波機制介紹

    上一篇文章,我們介紹了吸波材料的損耗型吸波機制,這類型的吸波材料通常需要控制內(nèi)部損耗介質(zhì)的類型及結(jié)構(gòu)問題。在這一篇我們講述結(jié)構(gòu)型吸波機制。結(jié)構(gòu)型吸波材料主要是依靠相消原理【1】來吸收電
    發(fā)表于 07-01 07:25

    Linux串口通信的超時機制

    Linux下使用串口通信時,默認的阻塞模式是不實用的。而采用select或epoll機制的非阻塞模式,寫代碼有比較麻煩。幸好Linux的串口自己就帶有超時機制
    發(fā)表于 07-05 08:38

    詳解Linux內(nèi)核搶占實現(xiàn)機制

    本文詳解了Linux內(nèi)核搶占實現(xiàn)機制。首先介紹了內(nèi)核搶占和用戶搶占的概念和區(qū)別,接著分析了不可搶占內(nèi)核的特點及實時系統(tǒng)中實現(xiàn)內(nèi)核搶占的必要性。然后分析了禁止內(nèi)核搶占的情況和內(nèi)核搶占的時機,最后
    發(fā)表于 08-06 06:16

    詳解Linux能力機制

    Linux能力機制
    發(fā)表于 04-20 08:23

    INtime RTOS內(nèi)部的關(guān)鍵處理機制是什么

    INtime RTOS內(nèi)部的關(guān)鍵處理機制是什么?INtime RTOS內(nèi)部的關(guān)鍵處理機制有哪些相關(guān)的應(yīng)用案例?
    發(fā)表于 09-29 06:28

    Linux與VxWorks任務(wù)調(diào)度機制分析

    Linux與VxWorks任務(wù)調(diào)度機制分析
    發(fā)表于 03-28 09:52 ?19次下載

    linux內(nèi)存管理機制淺析

    本內(nèi)容介紹了arm linux內(nèi)存管理機制,詳細說明了linux內(nèi)核內(nèi)存管理,linux虛擬內(nèi)存管理,arm
    發(fā)表于 12-19 14:09 ?73次下載
    <b class='flag-5'>linux</b>內(nèi)存管理<b class='flag-5'>機制</b>淺析

    Linux系統(tǒng)的fork運行機制分析

    如果其中一個進程的輸出結(jié)果是“pid1:1001, pid2:1002”,寫出其他進程的輸出結(jié)果(不考慮進程執(zhí)行順序)。 明顯這道題的目的是考察linux下fork的執(zhí)行機制。下面我們通過分析這個題目,談?wù)?b class='flag-5'>Linux下fork
    發(fā)表于 04-26 16:26 ?1114次閱讀
    <b class='flag-5'>Linux</b>系統(tǒng)的fork運行<b class='flag-5'>機制</b>分析

    Linux的notifier機制在TP中的應(yīng)用

    linux內(nèi)核系統(tǒng)中,各個模塊、子系統(tǒng)之間是相互獨立的。Linux內(nèi)核可以通過通知鏈機制來獲取由其它模塊或子系統(tǒng)產(chǎn)生的它感興趣的某些事件。
    發(fā)表于 05-05 11:46 ?2152次閱讀

    Linux內(nèi)核驅(qū)動的platform機制是怎樣的

    Linux 2.6起引入了一套新的驅(qū)動管理和注冊機制:platform_device和platform_driver。
    發(fā)表于 11-06 14:12 ?1495次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核驅(qū)動的platform<b class='flag-5'>機制</b>是怎樣的

    面向Linux系統(tǒng)的系統(tǒng)數(shù)據(jù)容災(zāi)機制綜述

    面向Linux系統(tǒng)的系統(tǒng)數(shù)據(jù)容災(zāi)機制綜述
    發(fā)表于 06-27 14:29 ?8次下載

    Linux內(nèi)核文件Cache機制

    Linux內(nèi)核文件Cache機制(開關(guān)電源技術(shù)與設(shè)計 第二版)-Linux內(nèi)核文件Cache機制? ? ? ? ? ? ? ??
    發(fā)表于 08-31 16:34 ?4次下載
    <b class='flag-5'>Linux</b>內(nèi)核文件Cache<b class='flag-5'>機制</b>

    Linux configfs的使用

    1. 體驗 1.1 使用 所有命令都是在開發(fā)板上執(zhí)行。 掛載 configfs 文件系統(tǒng) # modprobe libcomposite# mount -t configfs none /sys
    的頭像 發(fā)表于 07-13 10:59 ?907次閱讀