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文章
9520瀏覽量
157027 -
驅動
+關注
關注
12文章
1956瀏覽量
88529 -
Linux
+關注
關注
88文章
11760瀏覽量
219026 -
Sysfs
+關注
關注
0文章
15瀏覽量
6434
發布評論請先 登錄
相關推薦
熱點推薦
【AWorks試用體驗】使用sysfs文件系統 控制IED(1) Shell 點亮LED
在嵌入式設備中控制GPIO 一般做法是通過寫一個單獨的驅動程序。而大多數資料顯示都是使用這一種方法。 但其實Linux下有一個通用的 GPIO 控制接口, 就是 sysfs文件系統什么是sysfs
發表于 08-16 19:17
字符設備驅動,平臺設備驅動,設備驅動模型,sysfs的比較
、device_driver和bus等在向系統注冊的過程中會調用sysfs的create_dir接口來創建對應的目錄,而含有struct attribute成員屬性的device、device_driver和bus
發表于 09-03 12:04
sysfs platform總線
,它是通過kobject子系統來建立這個信息的,當一個kobject被創建的時候,對應的文件和目錄也就被創建了,位于 /sys下的相關目錄下,既然每個設備在sysfs中都有唯一對應的目錄,那么也就可以被
發表于 06-26 05:43
openSTLinux上的sysfs接口無法使用可能是什么問題?
我正在嘗試使用 openSTLinux 上的 sysfs 接口對一些引腳進行 PWM,但不幸的是,它不起作用。我一直在更改設備樹文件以使其正常工作,但仍然沒有成功。當我運行時:ls /sys/class/pwm我什么也得不到。可能是什么問題?PWM 在內核上啟用。
發表于 12-15 06:45
【EASY EAI Nano人工智能開發套件試用體驗】GPIO點燈——使用sysfs接口
本文記錄了如何使用Linux上經典的sysfs接口控制GPIO。不同于靈眸官方文檔介紹的較新的libgpiod接口,sysfs接口可以在sh
發表于 06-23 20:01
學會使用Linux 文件系統:procfs, sysfs, debugfs
在 sysfs 中,有另外一個常見用法,那就是在一個 kobject 對應的目錄下創建一個符號(屬性文件)指向另外一個 kobject 對應的目錄,通常這個是為了方便記憶和訪問。這個API是 sysfs_create_link。
發表于 04-25 17:19
?1472次閱讀
Linux RTC驅動模型分析之rtc-sysfs.c
rtc-sysfs文件主要的操作就是在sys下創建rtc的屬性節點,可以方便用戶方便快捷的訪問,查找問題。下來大概看看sys下的rtc節點,有個直觀的認識。
發表于 04-27 19:43
?2885次閱讀
Linux設備模型:sysfs
sysfs是一個基于RAM的文件系統,它和Kobject一起,可以將Kernel的數據結構導出到用戶空間,以文件目錄結構的形式,提供對這些數據結構(以及數據結構的屬性)的訪問支持。
發表于 05-12 09:50
?1703次閱讀
在驅動中創建sysfs接口完整例子
設備樹: leds : leds{ compatible = "xx,xx-led"; }; 驅動: static unsigned int led = 0 ; static ssize_t led_status_show ( struct device *dev, struct device_attribute *attr, char *buf ) { return sprintf(buf, "%s:%d.n" , "led" , led);} static ssize_t led_status_store ( struct device *dev, struct device_attribute *attr, const char *buf, size_t count ) { sscanf(buf, "%d" , return count;} static DEVICE_ATTR ( led_status, 0600 , led_status_show, led_status_store ) ; static struct attribute *led_attributes[]={ static const struct attribute_group led_attrs={ .attrs = led_attributes,}; static int
linux--sysfs文件系統
sysfs文件系統 sysfs,全稱為System Filesystem,是一個由Linux內核實現的虛擬文件系統。它扮演著一個橋梁的角色,將內核中的設備和驅動程序信息以文件的形式呈現給用戶空間
如何創建sysfs接口
評論