当前位置: 首页 > news >正文

Linux之内核Platform LED

目录

一、内核图形化配置

 二、设备树修改


在Linux内核中已经集成了LED驱动设备。 Linux 内核的 LED 灯驱动采用 platform 框架,因此只需要按照要求在设备树文件中添加相应的 LED 节点即可。

一、内核图形化配置

要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动。

在内核目录下,输入以下指令打开Linux图像配置界面

make   menuconfig

按照如下路径打开 LED 驱动配置项:

-> Device Drivers
        -> LED Support (NEW_LEDS [=y])
                ->LED Support for GPIO connected LEDs

选择“LED Support for GPIO connected LEDs”,将其编译进 Linux 内核,在此选项上按下“Y”键,使此选项前面变为“<*>”

然后保存,退出即可。 

把 Linux 内 部 自 带 的 LED 灯 驱 动 编 译 进 内 核 以 后 ,CONFIG_LEDS_GPIO 就会等于‘y’, Linux 会根据 CONFIG_LEDS_GPIO 的值来选择如何编译LED 灯驱动,如果为‘y’就将其编译进 Linux 内核。

打开.config 文件,会找到“CONFIG_LEDS_GPIO=y”(vi中 /表示搜索)

 重新编译 Linux 内核,然后使用新编译出来的 zImage 镜像启动开发板。

 二、设备树修改

打开文档 Documentation/devicetree/bindings/leds/leds-gpio.txt,此文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写

 ①创建一个节点表示LED灯设备,如果板子上有多个 LED 灯的话每个 LED灯都作为该节点的子节点

②节点的 compatible 属性值一定要为“gpio-leds”,与驱动文件相匹配的

③(可选)设置 label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示LED 灯的名字

④每个子节点必须要设置 gpios 属性值,表示此 LED 所使用的 GPIO 引脚

⑤(可选)设置linux,default-trigger属性值,设置 LED 灯的默认功能。

⑥(可选)设置default-state属性值,为on的时LED灯默认打开,为 off时LED 灯默认关闭,为 keep时 LED 灯保持当前模式。

对于⑤可以查阅Documentation/devicetree/bindings/leds/common.txt 这个文档来查看可选功能

backlight: LED 灯作为背光。
default-on: LED 灯打开
heartbeat LED 灯作为心跳指示灯,可以作为系统运行提示灯
ide-disk: LED 灯作为硬盘活动指示灯。
timer: LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改

 设置LED灯为心跳指示灯

dtsleds {
    compatible = "gpio-leds";

    led0 {
        label = "red";
        gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
        default-state = "on";
        linux,default-trigger = "heartbeat";

    };
};

修改完成以后保存并重新编译设备树,然后用新的设备树启动开发板。启动以后 LED0 就会闪烁,作为系统心跳指示灯,表示系统正在运行。

内核leds-gpio驱动文件的函数:

module_platform_driver(gpio_led_driver);//gpio_led_driver是platform_driver驱动结构体

展开后为:

static int __init gpio_led_driver_init(void)
{
        return platform_driver_register (&(gpio_led_driver));
}


static void __exit gpio_led_driver_exit(void)
{
        platform_driver_unregister (&(gpio_led_driver) );
}

module_init(gpio_led_driver_init);
module_exit(gpio_led_driver_exit);
 

module_platform_driver 函数的功能就是完成 platform 驱动的注册和删除完成module_init和module_exit以及驱动入口和出口函数。
 

相关文章:

  • 详解CAN总线:CAN总线报文格式—遥控帧
  • 1,【electron+vue】 构建桌面应用——创建electron项目(包括创建,运行,打包碰到的问题)
  • vue3使用pinia
  • 快用Python(Pygame)代码燃放起你专属的烟花吧,咝......咻——嘭~
  • 关于CSDN编程竞赛的一些感受
  • 二分答案合辑
  • Eclipse Theia技术揭秘——自定义布局
  • 机器学习模型4——聚类1(k-Means聚类)
  • React 学习笔记总结(二)
  • ssh登陆概率性失败,报错:kex_exchange_identification
  • 微服务项目:尚融宝(60)(核心业务流程:个人中心)
  • 【P8179】【EZEC-11】Tyres(背包问题,决策单调性,分治)
  • <Linux复习>权限概念上
  • 嵌入式开发:嵌入式安全的6个要点
  • 第2章 Linux的Shell基础(一)
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【个人向】《HTTP图解》阅后小结
  • 2017届校招提前批面试回顾
  • C学习-枚举(九)
  • ECMAScript6(0):ES6简明参考手册
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Git的一些常用操作
  • k8s 面向应用开发者的基础命令
  • SegmentFault 2015 Top Rank
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 笨办法学C 练习34:动态数组
  • 分布式任务队列Celery
  • 技术:超级实用的电脑小技巧
  • 开源SQL-on-Hadoop系统一览
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端学习笔记之观察者模式
  • 前端知识点整理(待续)
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 深度学习入门:10门免费线上课程推荐
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • scrapy中间件源码分析及常用中间件大全
  • ​如何防止网络攻击?
  • #### go map 底层结构 ####
  • #define,static,const,三种常量的区别
  • #QT(TCP网络编程-服务端)
  • #vue3 实现前端下载excel文件模板功能
  • #每日一题合集#牛客JZ23-JZ33
  • #微信小程序(布局、渲染层基础知识)
  • (LeetCode) T14. Longest Common Prefix
  • (分类)KNN算法- 参数调优
  • (论文阅读30/100)Convolutional Pose Machines
  • (三)Honghu Cloud云架构一定时调度平台
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)LINQ之路
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net6 Api Swagger配置
  • .NET的微型Web框架 Nancy