歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux之configfs簡介和編程入門

Linux之configfs簡介和編程入門

日期:2017/3/1 9:49:04   编辑:Linux編程

一、什麼是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