亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  linux驅動開發(5、使用leds驅動框架點亮led燈)

linux驅動開發(5、使用leds驅動框架點亮led燈)

時間:2024-06-01

文章目錄

  • 使用驅動框架的優勢

  • leds驅動框架相關

    • 常用接口

      • led_classdev_register函數

      • led_classdev_unregister函數

    • 在驅動中的使用

    • 在用戶空間操作led

    • 總結


點擊下方閱讀原文可訪問文中超鏈接


在前面已經用創建通用字符設備的方式完成了led的操作,本次總結記錄的是使用linux內核提供的leds驅動框架來點亮led燈,不同于前面應用程序通過設備節點來訪問,不過也是在應用程序中通過打開文件來訪問的。


使用驅動框架的優勢

linux內核為各種硬件進行分類,然后針對各類硬件實現一套比較標準的驅動框架,其中每類硬件共有屬性那一部分由內核開發者負責實現和維護,然后給驅動開發者留出接口用來完成具體硬件的特定操作部分。更加簡化了驅動開發者的編碼工作。

leds驅動框架相關

相關的源代碼位于drivers/leds/目錄內,頭文件位于include/linux/目錄內。
如果要使用leds驅動框架,首先要在內核中開啟相關的配置宏:

Device Drivers --->
[*] LED Support --->
<*> LED Class Support

啟動內核后可以在/sys/class/目錄下看到leds類,這也就是驅動框架中內核開發者完成的那一部分,之前是需要驅動開發者自己創建的,現在對于驅動開發者來說就只需要調用相關的接口創建設備即可。

常用接口

位于頭文件:include/linux/leds.h

led_classdev_register函數

用以在leds類下面創建設備。

static inline int led_classdev_register(struct device *parent,
struct led_classdev *led_cdev)

led_classdev_unregister函數

用以刪除在leds類下面創建的設備。

void led_classdev_unregister(struct led_classdev *led_cdev)

在驅動中的使用

從下面的代碼中可以看出比之前的代碼要簡化很多,只需要調用一個注冊設備的接口就可以了,省去了之前手動創建字符設備、設備類、file_operations結構(驅動框架未使用file_operations結構完成硬件操作,而是使用的另外一種方法)等步驟。

/*定義一個設備*/
struct led_classdev cdev;

static void s5pv210_led_brightness_set(struct led_classdev *led_cdev, enum led_brightness brightness)
{
unsigned int tmp;

if(brightness)
{
/*
硬件操作點亮led燈
*/

}
else
{
/*
硬件操作熄滅led燈
*/

}
}

static int __init test_init(void)
{
int ret = 0;
/*
省略其它操作
*/


/*填充定義的設備*/
cdev.brightness_set = s5pv210_led_brightness_set;
cdev.brightness = LED_OFF;
cdev.name = "led3";
cdev.flags |= LED_CORE_SUSPENDRESUME;

ret = led_classdev_register(NULL,&cdev);
if(ret < 0)
{
ret = -EINVAL;
}

return ret;
}

static void __exit test_exit(void)
{
led_classdev_unregister(&cdev);

/*
省略其它操作
*/

}

在用戶空間操作led

使用了驅動框架后可以不需要編寫應用程序就可以測試led是否能正常被點亮與熄滅,這些都可以在sysfs文件系統中完成。在裝載驅動后可以在/sys/class/leds/目錄下看到對應的led設備目錄,如本文中的led3(填充設備時的設備名字段)。

# ls /sys/class/leds/led3
brightness power uevent
max_brightness subsystem

使用echo命令操作led燈:

# 點亮led
echo 1 > brightness
# 熄滅led
echo 0 > brightness

總結