《驅動學習 sysfs檔案系統的編寫》

2022-10-09 01:36:11 字數 1450 閱讀 6440

1.sysfs檔案系統

sysfs檔案系統可以把核心空間的資料、屬性、鏈結等輸出到使用者空間。反過來,使用者也可以通過sysfs檔案系統,往對應的核心空間傳遞資料。

例如:echo 1 > /sys/class/gpio/gpio64/value,就是改變gpio64的值。

cat > /sys/class/gpio/gpio64/value,就是讀取gpio64的值。

那麼怎麼在驅動中增加這個介面呢?

2.新增/sys介面

2.1 attribute屬性

struct

attribute ;

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結構 例如...