1.sysfs檔案系統
sysfs檔案系統可以把核心空間的資料、屬性、鏈結等輸出到使用者空間。反過來,使用者也可以通過sysfs檔案系統,往對應的核心空間傳遞資料。
例如:echo 1 > /sys/class/gpio/gpio64/value,就是改變gpio64的值。
cat > /sys/class/gpio/gpio64/value,就是讀取gpio64的值。
那麼怎麼在驅動中增加這個介面呢?
2.新增/sys介面
2.1 attribute屬性
structattribute ;
mode為檔案的許可權,定義在kernel/include/uapi/linux/stat.h
#define s_irwxu 00700 //使用者可讀寫和執行
#define s_irusr 00400//
使用者可讀
#define s_iwusr 00200//
使用者可寫
#define s_ixusr 00100//
使用者可執行
#define s_irwxg 00070//
使用者組可讀寫和執行
#define s_irgrp 00040//
使用者組可讀
#define s_iwgrp 00020//
使用者組可寫
#define s_ixgrp 00010//
使用者組可執行
#define s_irwxo 00007//
其他可讀寫和執行
#define s_iroth 00004//
其他可讀
#define s_iwoth 00002//
其他可寫
#define s_ixoth 00001//
其他可執行
2.2 device_attribute
這個就是面對物件封裝了一層
/*inte***ce for exporting device attributes
*/struct
device_attribute ;
再用巨集簡化了device_attribute結構物件的定義和初始化
#define __attr(_name, _mode, _show, _store) , \.show =_show,
.store =_store,
}#define device_attr(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __attr(_name, _mode, _show, _store)
其中_show和_store,分別代表在使用者空間執行cat和echo所呼叫的函式,可以理解為read和write。
sysfs檔案系統
sysfs是用來向使用者空間匯出核心物件的一種檔案系統,通過它,使用者空間程式可以檢視 甚至修改核心資料結構。該檔案系統是基於核心資料結構kobject建立起來的,同時該檔案系統的目錄結構反映了相關核心資料結構的層次結構。由於kobject是組成裝置模型的基本結構,因此sysfs也包括了系統中裝置的...
sysfs檔案系統
sysfs是乙個基於記憶體的檔案系統,它的作用是將核心資訊以檔案的方式提供給使用者程式使用。該檔案系統的目錄層次結構嚴格按照核心的資料結構組織。除了二進位制檔案外 只有特殊場合才使用 sysfs檔案內容均以ascii格式儲存,且乙個檔案只儲存乙個資料,另外,乙個檔案不可大於乙個記憶體頁 通常為409...
USB和sysfs檔案系統
由於單個usb物理裝置的複雜性,裝置在sysfs中的表示也非常複雜。無論是物理usb裝置 用struct usb device 表示 還是單獨的usb介面 用struct usb inte ce 表示 在sysfs中均表示為單獨的裝置 這是因為這2個結構都包含乙個struct device結構 例如...