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