sysfs介面函式到建立_device_attr
最近在弄sensor驅動,看過乙個某廠家的成品驅動,裡面實現的全都是sysfs介面,hal層利用sysfs生成的介面,對sensor進行操作。
說道sysfs介面,就不得不提到函式巨集 device_attr
原型是#define device_attr(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __attr(_name, _mode, _show, _store)
函式巨集device_attr內封裝的是__attr(_name,_mode,_show,_stroe)方法,_show表示的是讀方法,_stroe表示的是寫方法。
當然_attr不是獨生子女,他還有一系列的姊妹__attr_ro巨集只有讀方法,__attr_null等等
如對裝置的使用 device_attr ,對匯流排使用 bus_attr ,對驅動使用 driver_attr ,對類別 (class) 使用 class_attr, 這四個高階的巨集來自於
device_attr 巨集宣告有四個引數,分別是名稱、許可權位、讀函式、寫函式。其中讀函式和寫函式是讀寫功能函式的函式名。
如果你完成了device_attr函式巨集的填充,下面就需要建立介面了
例如:static device_attr(polling, s_irugo | s_iwusr, show_polling, set_polling);
static struct attribute *dev_attrs = ;
當你想要實現的介面名字是polling的時候,需要實現結構體struct attribute *dev_attrs
其中成員變數的名字必須是&dev_attr_polling.attr
然後再封裝
static struct attribute_group dev_attr_grp = ;
在利用sysfs_create_group(&pdev->dev.kobj, &dev_attr_grp);建立介面
通過以上簡單的三個步驟,就可以在adb shell 終端檢視到介面了。當我們將資料 echo 到介面中時,在上層實際上完成了一次 write 操作,對應到 kernel ,呼叫了驅動中的 「store」。同理,當我們cat 乙個 介面時則會呼叫 「show」 。到這裡,只是簡單的建立了 android 層到 kernel 的橋梁,真正實現對硬體操作的,還是在 "show" 和 "store" 中完成的。
SYSFS中屬性檔案的建立
1 device中建立屬性檔案 1 函式呼叫關係 device create file sysfs create file 2 相關的資料結構 1 struct attribute 1 struct device attribute 3 相關的巨集定義 define device attr name...
sysfs探索 store和show的介面
簡單分析 1 本樣例主要測試kobject結構,kobject對應sysfs檔案系統中的乙個目錄,該目錄對應乙個具體的事物。2 首先通過example kobj kobject create and add kobject example kernel kobj 將該結構加入 到 sys kerne...
sysfs系統 檔案和目錄的建立
sysfs是linux的特殊檔案系統,這個檔案系統主要作用是在使用者態展示裝置的資訊。linux計算機系統中,可以在根目錄下面找到sys目錄,這個目錄就是利用sysfs檔案系統進行建立的。開啟sys目錄,可以看到裝置的分類顯示,如下所示 yxf yxf pc sys ls block bus cla...