0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何創(chuàng)建sysfs接口

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 11:33 ? 次閱讀

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é)點的權限

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 attributestruct 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接口

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8257

    瀏覽量

    149953
  • 驅動
    +關注

    關注

    12

    文章

    1790

    瀏覽量

    84908
  • Linux
    +關注

    關注

    87

    文章

    11123

    瀏覽量

    207910
  • Sysfs
    +關注

    關注

    0

    文章

    15

    瀏覽量

    6228
收藏 人收藏

    評論

    相關推薦

    Linux sysfs設備驅動管理簡介

    今天主要和大家聊一聊,sysfs設備驅動管理。
    發(fā)表于 10-14 09:57 ?1248次閱讀

    Linux驅動中創(chuàng)建sysfs接口的方法

    在一些linux開發(fā)板中,經(jīng)??梢钥吹酵ㄟ^echo的方式來直接控制硬件或者修改驅動。
    發(fā)表于 05-31 16:24 ?754次閱讀

    Linux驅動中創(chuàng)建procfs接口的方法

    上篇介紹了Linux驅動中sysfs接口創(chuàng)建,今天介紹procfs接口創(chuàng)建
    發(fā)表于 05-31 16:48 ?670次閱讀
    Linux驅動中<b class='flag-5'>創(chuàng)建</b>procfs<b class='flag-5'>接口</b>的方法

    Linux驅動中創(chuàng)建debugfs接口的方法

    上篇介紹了procfs接口創(chuàng)建,今天再介紹一種debugfs接口創(chuàng)建。
    發(fā)表于 05-31 16:53 ?918次閱讀
    Linux驅動中<b class='flag-5'>創(chuàng)建</b>debugfs<b class='flag-5'>接口</b>的方法

    【AWorks試用體驗】使用sysfs文件系統(tǒng) 控制IED(1) Shell 點亮LED

    在嵌入式設備中控制GPIO 一般做法是通過寫一個單獨的驅動程序。而大多數(shù)資料顯示都是使用這一種方法。 但其實Linux下有一個通用的 GPIO 控制接口, 就是 sysfs文件系統(tǒng)什么是sysfs
    發(fā)表于 08-16 19:17

    字符設備驅動,平臺設備驅動,設備驅動模型,sysfs的比較

    、device_driver和bus等在向系統(tǒng)注冊的過程中會調(diào)用sysfs的create_dir接口創(chuàng)建對應的目錄,而含有struct attribute成員屬性的device、device_driver和bus
    發(fā)表于 09-03 12:04

    sysfs platform總線

    ,它是通過kobject子系統(tǒng)來建立這個信息的,當一個kobject被創(chuàng)建的時候,對應的文件和目錄也就被創(chuàng)建了,位于 /sys下的相關目錄下,既然每個設備在sysfs中都有唯一對應的目錄,那么也就可以被
    發(fā)表于 06-26 05:43

    openSTLinux上的sysfs接口無法使用可能是什么問題?

    我正在嘗試使用 openSTLinux 上的 sysfs 接口對一些引腳進行 PWM,但不幸的是,它不起作用。我一直在更改設備樹文件以使其正常工作,但仍然沒有成功。當我運行時:ls /sys/class/pwm我什么也得不到??赡苁鞘裁磫栴}?PWM 在內(nèi)核上啟用。
    發(fā)表于 12-15 06:45

    【EASY EAI Nano人工智能開發(fā)套件試用體驗】GPIO點燈——使用sysfs接口

    本文記錄了如何使用Linux上經(jīng)典的sysfs接口控制GPIO。不同于靈眸官方文檔介紹的較新的libgpiod接口,sysfs接口可以在sh
    發(fā)表于 06-23 20:01

    Linux的那些事兒之我是Sysfs

    Linux的那些事兒之我是Sysfs
    發(fā)表于 10-29 09:28 ?5次下載
    Linux的那些事兒之我是<b class='flag-5'>Sysfs</b>

    學會使用Linux 文件系統(tǒng):procfs, sysfs, debugfs

    sysfs 中,有另外一個常見用法,那就是在一個 kobject 對應的目錄下創(chuàng)建一個符號(屬性文件)指向另外一個 kobject 對應的目錄,通常這個是為了方便記憶和訪問。這個API是 sysfs_create_link。
    發(fā)表于 04-25 17:19 ?1155次閱讀

    Linux RTC驅動模型分析之rtc-sysfs.c

    rtc-sysfs文件主要的操作就是在sys下創(chuàng)建rtc的屬性節(jié)點,可以方便用戶方便快捷的訪問,查找問題。下來大概看看sys下的rtc節(jié)點,有個直觀的認識。
    發(fā)表于 04-27 19:43 ?2426次閱讀

    Linux設備模型:sysfs

    sysfs是一個基于RAM的文件系統(tǒng),它和Kobject一起,可以將Kernel的數(shù)據(jù)結構導出到用戶空間,以文件目錄結構的形式,提供對這些數(shù)據(jù)結構(以及數(shù)據(jù)結構的屬性)的訪問支持。
    發(fā)表于 05-12 09:50 ?1347次閱讀

    在驅動中創(chuàng)建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
    的頭像 發(fā)表于 09-27 11:46 ?383次閱讀

    linux--sysfs文件系統(tǒng)

    sysfs文件系統(tǒng) sysfs,全稱為System Filesystem,是一個由Linux內(nèi)核實現(xiàn)的虛擬文件系統(tǒng)。它扮演著一個橋梁的角色,將內(nèi)核中的設備和驅動程序信息以文件的形式呈現(xiàn)給用戶空間
    的頭像 發(fā)表于 07-08 11:37 ?447次閱讀
    linux--<b class='flag-5'>sysfs</b>文件系統(tǒng)