led没那么简单,
共 891字,需浏览 2分钟
·
2024-04-20 09:17
最近项目上遇到LED的问题,硬是把不用加班的时间搞到周末都需要加班分析问题,而且冷静下来之后发现都是非常简单的小细节,也正是这些小细节让我们受挫,而且也不能说是谁谁的问题,因为出了问题都是有责任的。
所以我一直信奉之前团队的一句话,即使是一个GPIO口的变动,都需要认真谨慎。
我这里提到的LED不简单,指的是Linux内核下的LED架构不简单,Linux下的LED架构几乎考虑到了很多我们所需要的场景,如果你能理解它,并且学会用它来帮助你的工作,一定是事半功倍的。
我写过的一篇Linux架构的文章
LED灯的核心需要解决很多问题,第一个问题就是接口,LED灯可以有各种不同的接口
其次是,每个LED设备具备什么能力,最基础的就是亮灭,那还有呼吸,闪烁,这些是不是需要定时器,那作为LED的核心怎么把这些东西给驱动准备好,这就不得不涉及到LED的trigger。
第三个问题就是一个驱动怎么去应对多个设备,我看了很多厂家写的LED驱动,有的直接就写hardcore实现,完全脱离了LED的架构,这样实现并没有问题,只是这样就很不Linux了,所以驱动就需要动态申请设备的内存,并且要用链表绑定起来,这又不得不提到Linux下的数据结构了。
学Linux先从LED开始真的是一点坏处都没有。
上面提到的trigger其实并不是一定每个驱动都需要的,所以很多驱动就会加宏来控制。
还有一些常见的数据结构,这些数据
还有常见的瑞士军刀,这些都是为了避免全局变量,让代码更加优雅
还有设置各种不同的LED结构体
最核心的就是这个setbrightness指针
还有这个最大的亮度,这个变量非常有用,可以让驱动设置亮度的最大值,比如我们有的LED灯是三色灯,这个时候就需要把这个值设置对应大一些,相应的,也要在setbrightness函数上做处理。
好了,就谈这些,用面向对象的思想去看内核,会更有收获。