sysfs接口創建
基本步驟:
1、使用DEVICE_ATTR
聲明一個sys
節點
static DEVICE_ATTR(led_status, 0600, led_status_show, led_status_store);
led_status
:在sys接口中顯示的節點名字
0600
:表示操作這個led_status節點的權限
led_status_show
:使用cat
命令查看sys接口時調用的函數
led_status_store
:使用echo
命令往sys接口寫入內容時調用的函數
2、完成sys節點的讀寫函數
static unsigned int led = 0;
/*
* sys節點的讀函數
* 執行 cat /sys/devices/platform/leds/led_status時會調用
*/
static ssize_t led_status_show(struct device *dev, struct device_attribute *attr, char *buf)
{
//buf是通過cat命令顯示到終端的內容,這里顯示led變量
return sprintf(buf, "%s:%d.n", "led", led);
}
/**
* sys節點的寫函數
* 用echo命令往sys節點寫入內容時,會調用該函數
*/
static ssize_t led_status_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
//寫入的內容會存放到buf中,這里將buf內容賦值給led變量
sscanf(buf, "%d", &led);
return count;
}
示例中,led_status_show()
函數和led_status_store()
函數的作用分為打印led變量的值和 修改led變量的值 .
3、定義struct attribute
和struct attribute_group
數組
static struct attribute *led_attributes[]={
/*上述使用了DEVICE_ATTR聲明節點名字為led_status,
* 則struct attribute名字應為:
* dev_attr_ + (節點名) + .attr
* 所以名字為dev_attr_led_status.attr
*/
&dev_attr_led_status.attr,
NULL,
};
static const struct attribute_group led_attrs={
.attrs = led_attributes,//引用上述struct attribute數組
};
上述使用了DEVICE_ATTR
聲明節點名字為led_status
, 則struct attribute
名字應為:dev_attr_ + (節點名) + .attr
。所以名字為dev_attr_led_status.attr
。
4、在probe函數中調用sysfs_create_group()
函數注冊sysfs
接口
-
接口
+關注
關注
33文章
8497瀏覽量
150835 -
驅動
+關注
關注
12文章
1825瀏覽量
85178 -
Linux
+關注
關注
87文章
11229瀏覽量
208927 -
Sysfs
+關注
關注
0文章
15瀏覽量
6233
發布評論請先 登錄
相關推薦
評論