• 【linux】led子系统



    前言

    • 接下来记录的是 led子系统
    • 目前不涉及驱动源码

    linux子系统

    • 在 Linux 系统中
      • 绝大多数硬件设备都有非常成熟的驱动框架
      • 驱动工程师使用这些框架添加与板子相关的硬件支持
        • 建立硬件与Linux内核的联系
      • 内核再通过统一文件系统接口呈现给用户
      • 用户通过对应的设备文件控制硬件。

    led子系统

    • led子系统相关描述可在内核源码 Documentation/leds/leds-class.txt 了解。
    • led子系统是一个简单的 linux子系统 ,在目录 /sys/class/leds 下展示该子系统设备。
    /sys/class/leds下的目录 对应的LED灯设备
    input2::capslock 键盘大写锁定指示灯
    input2::numlock 键盘数字键盘指示灯
    input2::scrolllock 键盘ScrollLock指示灯
    • 一些属性值

      • brightness
        • brightness 的最大值在 max_brightness 文件中定义。
        • brightness 的值在 brightness 文件中定义。
        • 注意:大部分 led 不支持亮度调节。
      • trigger.
        • 常见的触发方式
          • none:无触发方式
          • disk-activity:硬盘活动
          • nand-disknand:flash活动
          • mtd:mtd设备活动
          • timer:定时器
          • heartbeat:系统心跳
        • 查看触发方式
          • cat triggerx86平台
            • 查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。

        • 修改触发方式
          • 例子:echo none > /sys/class/leds/ledA/trigger
            • none:none触发方式
            • ledA:ledA设备
          • 修改后,便按新的触发方式触发
    • 设计哲学

      • 简单哈哈
    • 推荐命名格式

      • "设备名字:颜色:功能"
    • API(后面分析驱动再介绍

      • led_set_brightness
      • led_set_brightness_sync
      • led_classdev_register
      • led_classdev

    led子系统实战-系统调用-ARM平台

    • 先在终端运行

      • 查询触发方式:cat trigger注意图中 []

      • 修改触发方式 (注意图中 []

    • 使用系统调用方式 APP

      • main.c 文件
    /** @file         main.c
     *  @brief        简要说明
     *  @details      详细说明
     *  @author       lzm
     *  @date         2020-11-10 17:01:15
     *  @version      v1.0
     *  @copyright    Copyright By lizhuming, All Rights Reserved
     *
     **********************************************************
     *  @LOG 修改日志:
     **********************************************************
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <fcntl.h>
    
    //ARM 开发板 LED 设备的路径
    #define RLED_DEV_PATH "/sys/class/leds/red/brightness"
    #define GLED_DEV_PATH "/sys/class/leds/green/brightness"
    #define BLED_DEV_PATH "/sys/class/leds/blue/brightness"
    
    int main(int argc, char *argv[])
    {
        int res = 0;
        int r_fd;
        int g_fd;
        int b_fd;
        
        printf("this is the led demo
    ");
    
        // 获取 LED 设备文件描述符
        r_fd = open(RLED_DEV_PATH, O_WRONLY);
        if(r_fd < 0){
            printf("Fail to open %s device
    ",RLED_DEV_PATH);
            exit(1);
        }
        g_fd = open(GLED_DEV_PATH, O_WRONLY);
        if(g_fd < 0){
            printf("Fail to open %s device
    ",GLED_DEV_PATH);
            exit(1);
        }
        b_fd = open(BLED_DEV_PATH, O_WRONLY);
        if(b_fd < 0){
            printf("Fail to open %s device
    ",BLED_DEV_PATH);
            exit(1);
        }
    
        while(1){
            write(r_fd, "255", 3);
            sleep(2);
            write(g_fd, "255", 3);
            sleep(1);
            write(r_fd, "0", 1);
            sleep(2);
            write(g_fd, "0", 1);
            sleep(1);
            write(b_fd, "255", 3);
            sleep(1);
            write(b_fd, "0", 1);
            sleep(1);
        }
    }
    
  • 相关阅读:
    git连接远程GitHub仓库详细总结 for HTTPS协议
    软工课程总结&小黄衫获奖感言
    Yum项目上线实战(网站运维)
    MySQL基础
    Shell基础
    Linux网络基础
    Linux的权限管理操作
    linux自有服务(2)
    Linux自有服务
    Linux基本指令
  • 原文地址:https://www.cnblogs.com/lizhuming/p/13986601.html
Copyright © 2020-2023  润新知