50 使用linux内核源码里的led驱动<LED Support for GPIO connected LEDs>

GPIO子系统实现LED操作,支持sys文件系统开关LED exynos4412,我们的LED是基于 GPIO的,为此,内核有两个对应的驱动程序,分别时GPIO驱动和LED驱动,基于GPIO的LED的驱动调用了GPIO驱动导出的函数,这一节我们并不关心GPIO的驱动(后面会有详细说明)。关于LED驱动,内核文档Documentation/leds/leds-class.txt有简单的描述,它实现了一个leds类,通过sysfs的接口才对LED进行控制,所以它并没有使用字符设备驱动的框架。 阅读详情

这个设备驱动适用于,连接到一个IO口的led灯.
需要在linux内核配置里选上相关的配置。在内核源码目录下:

    make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

    Device Drivers  --->
        [*] LED Support  --->
            <*>   LED Class Support 
            <*>   LED Support for GPIO connected LEDs

选择上后,再编内核,再使用新的内核镜像启动系统

使用新内核启动后,可以查看出设备驱动是否已选择上:
/sys/bus/platform/drivers/目录下应有”leds-gpio”目录

驱动源码在”drivers/leds/leds-gpio.c”, 里面是一个平台驱动,我们只要写平台设备描述硬件的资源与此驱动匹配即可.

285 static struct platform_driver gpio_led_driver = {
286     .probe      = gpio_led_probe,
287     .remove     = __devexit_p(gpio_led_remove),
288     .driver     = {
289         .name   = "leds-gpio",
290         .owner  = THIS_MODULE,
291         .of_match_table = of_gpio_leds_match, // 用成员匹配,名字可为"gpio-leds"
292     },
293 };
294 
295 module_platform_driver(gpio_led_driver);
//通过阅读平台驱动的probe函数,可得知我们写的平台设备应提供具本哪些硬件信息.
235 static int __devinit gpio_led_probe(struct platform_device *pdev)
236 {
237     struct gpio_led_platform_data *pdata = pdev->dev.platform_data;
238     struct gpio_leds_priv *priv;
239     int i, ret = 0;
240 
241     if (pdata && pdata->num_leds) {
        ...
    }
    ...
268     return 0;
269 }

/////////////////////////////////////

//通过probe函数,可以确定我们写平台设备时只需通过platform_data成员提供平台驱动所需的信息,无需再提供resource.
//再确定结构体gpio_led_platform_data的每个成员的作用即可,如不清楚具体用途,可以在驱动代码里通过查看对成员值的访问推出用途.

"include/linux/leds.h"

//每个led用struct gpio_led的对象来描述
struct gpio_led {
    const char *name; //名字
    const char *default_trigger; 
    unsigned    gpio; //对应的io口
    unsigned    active_low : 1; // 设1表示led低电平时亮
    unsigned    retain_state_suspended : 1; //保持挂起状态
    unsigned    default_state : 2; // 下面的三个宏
    /* default_state should be one of LEDS_GPIO_DEFSTATE_(ON|OFF|KEEP) */
};

#define LEDS_GPIO_DEFSTATE_OFF      0 //led灯灭
#define LEDS_GPIO_DEFSTATE_ON       1 // led灯开
#define LEDS_GPIO_DEFSTATE_KEEP     2 // led灯状态保持不变


struct gpio_led_platform_data {
    int         num_leds; //多少个led灯
    const struct gpio_led *leds; //led灯对象数组首地址


#define GPIO_LED_NO_BLINK_LOW   0   /* No blink GPIO state low */
#define GPIO_LED_NO_BLINK_HIGH  1   /* No blink GPIO state high */
#define GPIO_LED_BLINK      2   /* Please, blink */
    int     (*gpio_blink_set)(unsigned gpio, int state,
                    unsigned long *delay_on,
                    unsigned long *delay_off);
    // gpio_blink_set函数用于在设备这边实现闪烁的功能
};

/////////////////////

板上的status-led接到PA15,高电平时亮

mypdev.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/input.h>
#include <mach/gpio.h>
#include <linux/leds.h>

struct gpio_led leds[] = {
    {"led0", "led0_trigger", GPIOA(15), 0, 0, 0},
};

struct gpio_led_platform_data pdata = {
    .num_leds = ARRAY_SIZE(leds),
    .leds = leds,
};


struct platform_device mypdev = {
    .name = "leds-gpio", 
    .id = -1,
    .dev = {
        .platform_data = &pdata,
    },
};

module_driver(mypdev, platform_device_register, platform_device_unregister);
MODULE_LICENSE("GPL");

///////////////////////////////////////////

加载设备后,如与平台驱动匹配上会有输出:
   [ 6860.993790] Registered led device: led0

然后就可以通过"/sys/class/leds/led0/brightness"文件控制led灯的亮灭
  echo 1 > /sys/class/leds/led0/brightness   //灯亮
  echo 0 > /sys/class/leds/led0/brightness   //灯灭 
树莓派linux led字符设备驱动( linux自带)   树莓派的Linux 内核已经集成了LED 灯驱动。 Linux 内核的 LED 灯驱动采用 platform 框架。编译树莓派linux内核时,会输入配置命令构建配置linux内核,如: cd linux KERNEL=kernel7l make bcm2711_defconfig   linux内核的makefile会从arch/arm/configs 目录中寻找默认配置文件: bcm2711_defconfig,配置完成后会生成.config 文件。打开.config 文件,有“CONFIG_L 阅读详情

相关推荐

Unity3D实战:5分钟搞定RTSP监控视频播放(附完整代码)

本文提供了一套在Unity3D中快速集成RTSP监控视频播放的实战方案。通过采用LibVLCSharp for Unity这一成熟稳定的跨平台中间件,开发者可以轻松实现RTSP流的解码与渲染,并附有完整的C#代码示例,帮助用户在5分钟内完成集成,适用于智慧园区、安防监控等3D可视化场景。

weixin_29001655的博客 191

i.MX 6ULL 驱动开发 十六:LED(使用Linux内核自带驱动)

使用 Linux 内核自带驱动 LED

OnlyLove_的博客 874

碎碎念android eMMC【转】

本文转载自:https://blog.youkuaiyun.com/Fybon/article/details/44242549 一、/dev/blockroot@:/dev/block #lsbootdevicemmcblk0mmcblk0p1mmcblk0p10…….mmcblk0p18mmcblk0p19mmcblk0p2mmcblk0p20……mmcblk0p29mmcblk0p3mmcblk0p3...

zzb2760715357的博客 376

Linux 自带的 LED 灯驱动实验

使用自带的 LED 灯驱动操作led灯

weixin_46829095的博客 1707

Fiddler everywhere的一些基础操作

网上能搜到的Fiddler everywhere使用教程太少,于是我整理了一些自己实操成功的内容,包括Fiddler everywhere的Mock测试、弱网测试等基础操作,后续还会持续更新。操作系统:macOS使用工具:Fiddler everywhere 5.10.0本文简单介绍了使用Fiddler everywhere进行的Mock测试和弱网测试,而Fiddler everywhere提供了更多的其他实用的功能,我会在后期进行一个持续的学习和更新。

weixin_44346646的博客 2478

利用Matlab绘制非线性系统相图:从理论到实践

本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。

yhn456789的博客 905

Linux内核自带的 LED 灯驱动实验:Linux内核自带 Led驱动使能

Linux内核自带的 LED 灯驱动实验:Linux内核自带 Led驱动使能

wojiaxiaohuang2014的博客 707

32、机械臂数字孪生模型创建指南

本文介绍了如何在MATLAB Simscape中为一款3自由度(DOF)微型机械臂创建数字孪生模型。内容涵盖硬件参数测量、Simulink模型搭建流程,包括初始条件设置、基座与上部主体构建、上臂结构设计等关键步骤。通过使用Solid、Revolute Joint和Rigid Transform等模块,实现机械臂多体系统建模,并支持后续运动仿真与物理系统的对比诊断。读者可依据指南逐步完成模型构建,相关资源可通过MATLAB File Exchange或指定网站获取。

qsc9012345的博客 214

Linux 内核自带 LED 驱动使能

Linux 内核自带 LED 驱动使能

qq_24330911的博客 890

多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码

本文将为大家介绍基于BP、ELM、LSTM、BiLSTM和SAELSTM多种算法的数据预测,并提供相应的Matlab源码。SAELSTM算法是一种结合自动编码器和LSTM神经网络的深度学习方法,用于时间序列数据预测。ELM算法是一种单层前向神经网络,在单次训练过程中直接产生输出权重,从而具有快速学习和良好推广性能。多算法数据预测——BP、ELM、LSTM、BiLSTM和SAELSTM,附Matlab源码。总体来看,采用多种算法进行数据预测可以提高预测准确率,并可根据不同场景选择适合的算法。

qq_39605374的博客 860

ubuntu20 安装px4、mavros、QGroundControl

首先安装一下ant,否则没法运行,同时因20.04的缺少动态库libawt_xawt.so无法被Java8给调用,我的解决办法是去18.04把18.04的相同路径下的动态库libawt_xawt.so移动到20.04的/usr/lib/jvm/java-11-openjdk-amd64/lib/路径中。用rosdepc的时候,你得确保你用的是鱼香ROS的提供的ROS安装方法,否则是没有rosdepc的。make px4_sitl gazebo之前,可以安装一下gazebo的 模型。二、安装MAVROS。

qq_58060770的博客 3346

linux内核自带的LED驱动(六)

选择“LED Support for GPIO connected LEDs”,将其编译进 Linux 内核此选项上按下“Y”键,使此选项前面变为“”⑤可以设置“default-state”属性值,可以设置为 on、 off 或 keep,为 on 的时候 LED 灯默。认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式。heartbeat: LED 灯作为心跳指示灯,可以作为系统运行提示灯。timer: LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改。

qq_41169114的博客 699

YOLOv8有效涨点,增强型 YOLOV8 与多尺度注意力机制特征融合,附代码,详细步骤

在本实验中,我们通过将双层路由注意(BRA)、广义特征金字塔网络(GFPN)和第四检测头结合到YOLOv8中,开发了一种新颖的BGF-YOLO架构。BGF-YOLO 包含注意力机制,可以更多地关注重要特征,特征金字塔网络可以通过将高级语义特征与空间细节合并来丰富特征表示。此外,我们研究了不同的注意力机制和特征融合、检测头架构对检测准确性的影响。实验结果表明,与YOLOv8x相比,BGF-YOLO的mAP50增加了4.7%。

kay_545 3045

RK3308使用kernel下自带的led驱动

RK3308使用kernel下自带的led驱动 首先切换到kernel下: 运行make ARCH=arm64 rk3308_robot_defconfig 之后在运行make ARCH=arm64 rk3308_robot_defconfig 我们这时就进入到了配置界面,选择Device Driver 选择LED Support 在进入LED Support选择 LED Support for GPIO connected LEDs 退出进行保存,运行make ARCH=arm64 savedef

Wu996的博客 1158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Linux驱动开发】Linux 自带 LED 灯驱动实验

Linux 内核的 LED 灯驱动采用 platform 框架,所以只需要在设备树文件中添加相应的 LED 节点。 一、使能Linux 内核自带 LED 驱动 1、输入以下命令打开 Linux 配置菜单 make menuconfig 2、按以下路径打开 LED 驱动配置项 -> Device Drivers -> LED Support (NEW_LEDS [=y]) ->LED Support for GPIO connected ...

丨晋丨 2781

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

15 内核里leds-gpio设备驱动的设备树方法

在linux内核里已提供了连接到gpio的led设备驱动,只需要通过platform_device或设备提供相应的硬件资源即可. 使用platform_device方法可参考: http://blog.youkuaiyun.com/jklinux/article/details/73850470内核里的leds-gpio设备驱动配置选项:make menuconfig ARCH=arm64 CROSS_COM

jklinux的博客 9497

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32MP157驱动开发——Linux自带的LED灯驱动

使用 Linux 内核自带的 LED 驱动对开发板上的 LED 进行开发,本质上也是 platform 驱动框架下的开发。

weixin_45682654的博客 986

linux驱动_sigmastar_SSD202D_leds-gpio

修改linux内核驱动实现gpio闪灯效果

gavinpeng的专栏 1971

linux/drivers/leds/leds-gpio.c学习

`gpio_led_suspend()` 和 `gpio_led_resume()`:这两个函数用于在系统挂起和恢复时处理 GPIO LED 的状态。其中最重要的结构体是 `struct gpio_led`,它包含了 GPIO LED 的名称、GPIO 引脚号、默认亮度等信息。1. 头文件引入:该文件引入了一些必要的头文件,包括 ``、``、`` 等。

__Benco的博客 1027

以leds-gpio.c为例,浅谈device-tree、pinctrl和GPIO子系统

一、前言 leds-gpio.c是内核源码drivers/leds/leds-gpio.c目录下的一个led驱动程序的例程(说明书位于Documentation/devicetree/bindings/leds/leds-gpio.txt),它使用了内核提供的led驱动框架(说明书位于Documentation/leds/leds-class.txt)。本文不具体分析led驱动框架,而是借由分析leds-gpio.ko模块的源文件leds-gpio.c来初步介绍一下device-tree、pinctrl和G

CharmingSun的博客 4547

【亲测免费】 探索Miniblink:轻量级Web渲染引擎的新纪元

探索Miniblink:轻量级Web渲染引擎的新纪元 在数字化世界的前沿,Web技术扮演着至关重要的角色。为了提供更快、更流畅的网页浏览体验,开发者们一直在寻求创新的技术解决方案。【项目链接】<> 挑战了这一领域,带来了一款名为Miniblink的开源Web渲染引擎。 项目简介 Miniblink是由著名软件工程师熊德意(Del-Xiong)发起的一个轻量级Web内核项目。它旨在为嵌入...

gitblog_00087的博客 945

Linux内核自带的LED灯驱动:gpio_led_probe函数简析(probe函数)

Linux内核自带的LED灯驱动:gpio_led_probe函数简析(probe函数)

wojiaxiaohuang2014的博客 1095

以leds-gpio.c为例,浅谈class、bus和platform子系统

一、前言 leds-gpio.c是内核源码drivers/leds/leds-gpio.c目录下的一个led驱动程序的例程(说明书位于Documentation/devicetree/bindings/leds/leds-gpio.txt),它使用了内核提供的led驱动框架(说明书位于Documentation/leds/leds-class.txt)。本文不具体分析led驱动框架,而是借由分析leds-gpio.ko模块的源文件leds-gpio.c来初步介绍一下class、bus和platform子系统

CharmingSun的博客 1706

我的内核学习笔记11:linux leds-gpio驱动应用实例

linux内核的leds-gpio是使用GPIO控制LED的驱动,只要将板子上LED灯对接的GPIO引脚号进行适当的配置,就能使用这个驱动了,十分方便。网上有很多文章分析这个驱动,就不献丑——或者后面闲时再写写吧。

李迟的专栏 1万+

Linux LED子系统调试与应用 设备树官方文档与 gpio-leds.c 源码详解

文章目录查看官方说明文档①、Required properties②、gpiosGPIO说明文档③、label 查看官方说明文档 打开文档Documentation/devicetree/bindings/leds/leds-gpio.txt nano ./Documentation/devicetree/bindings/leds/leds-gpio.txt 此文档详细的讲解了Linux 自带驱动对应的设备树节点该如何编写 LEDs connected to GPIO lines Required

“逛丢一只鞋”的博客 7373

【转】15 内核里leds-gpio设备驱动的设备树方法

在linux内核里已提供了连接到gpio的led设备驱动,只需要通过platform_device或设备提供相应的硬件资源即可.  使用platform_device方法可参考: http://blog.youkuaiyun.com/jklinux/article/details/73850470 内核里的leds-gpio设备驱动配置选项: make menuconfig ARCH=arm64 CRO...

好习惯成就伟大 2615
上一篇: 49 使用linux内核源码里的矩阵键盘驱动<GPIO driven matrix keypad support>
下一篇: 51 linux设备驱动的proc调用接口
jklinux
博客等级 码龄10年 1060粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值