AI智能
改变未来

【linux】led子系统

目录

  • 前言
  • linux子系统
  • led子系统
  • led子系统实战-系统调用-ARM平台

前言

  • 接下来记录的是 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指示灯
    • 一些属性值

      brightnessbrightness 的最大值在 max_brightness 文件中定义。

    • brightness 的值在 brightness 文件中定义。
    • 注意:大部分 led 不支持亮度调节。
  • trigger.
      常见的触发方式none:无触发方式
    • disk-activity:硬盘活动
    • nand-disknand:flash活动
    • mtd:mtd设备活动
    • timer:定时器
    • heartbeat:系统心跳
  • 查看触发方式

      cat trigger

      (x86平台)

    • 查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。

  • 修改触发方式
      例子:

      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\"#definad8e 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\\n\");// 获取 LED 设备文件描述符r_fd = open(RLED_DEV_PATH, O_WRONLY);if(r_fd < 0){printf(\"Fail to open %s device\\n\",RLED_DEV_PATH);exit(1);}g_fd = open(GLED_DEV_PATH, O_WRONLY);if(g_fd < 0){printf(\"Fail to open %s device\\n\",GLED_DEV_PATH);exit(1);}b_fd = open(BLED_DEV_PATH, O_WRONLY);if(b_fd < 0){printf(\"Fail to open %s device\\n\",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);}}
  • 赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » 【linux】led子系统