歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux之configfs簡介和編程入門

一、什麼是configfs
是一種基於ram的文件系統
二、configfs有什麼用處
在用戶空間配置內核對象
三、configfs VS ioctl
configfs可直接察看,通過用戶態目錄文件訪問接口,適用於內核對象有眾多復雜的配置。
四、configs VS sysfs
configfs可以在用戶態創建和刪除內核對象。
五、什麼時候用configfs
當內核需要很多參數需要配置時;當需要動態創建內核對象並且內核對象需要修改配置時;
不想寫用戶態程序和ioctl時,寫shell腳本就可以直接配置configfs。
六、怎麼知道系統上是否已經安裝了configfs,安裝在哪個目錄
執行如下命令,可以看到安裝目錄為/sys/kernel/config
cat /proc/mounts | grep configfs
configfs /sys/kernel/config configfs rw,relatime 0 0
七、configfs組織結構是怎麼樣的
頂層結構是struct configfs_subsystem,為configfs子系統結構,接著是struct config_group,是configfs目錄和屬性的容器,struct config_item是configfs目錄,代表可配置的內核對象,struct configfs_attribute是目錄下面的屬性。
八、代碼示例(來自內核目錄Documentation\filesystems\configfs)
介紹代碼之前,先過一下基本的數據結構:

240struct configfs_subsystem {
241    struct config_group    su_group;
242    struct mutex          su_mutex;
243};

configfs子系統,config_group是抽象容器,之所以叫容器,是因為容器中可以包括config_item,還可以遞歸包含config_group。struct mutex是用於子系統訪問控制的。

89/**
90 *    group - a group of config_items of a specific type, belonging
91 *    to a specific subsystem.
92 */
93struct config_group {
94    struct config_item          cg_item;
95    struct list_head          cg_children;
96    struct configfs_subsystem      *cg_subsys;
97    struct config_group          **default_groups;
98};

config_group作為幕後主使,是不輕易出現在台前的。所以有了94行的struct config_item來表現為一個目錄。

56struct config_item {
57    char              *ci_name;
58    char              ci_namebuf[CONFIGFS_ITEM_NAME_LEN];
59    struct kref          ci_kref;
60    struct list_head    ci_entry;
61    struct config_item    *ci_parent;
62    struct config_group    *ci_group;
63    struct config_item_type    *ci_type;
64    struct dentry          *ci_dentry;
65};

58行為目錄名稱。
63行為目錄下屬性和屬性操作,屬性表現為目錄下的文本文件。

82struct config_item_type {
83    struct module                    *ct_owner;
84    struct configfs_item_operations          *ct_item_ops;
85    struct configfs_group_operations    *ct_group_ops;
86    struct configfs_attribute          **ct_attrs;
87};

84行為屬性操作方法,操作對象是86行屬性。
85行為目錄操作方法,可以在當前目錄下創建item或group。
86行為當前目錄屬性數組。

124struct configfs_attribute {
125    const char          *ca_name;
126    struct module          *ca_owner;
127    umode_t              ca_mode;
128};

Copyright © Linux教程網 All Rights Reserved