Camera | 10.闪光灯led子系统概述
0赞瑞芯微摄像头系列文件链接如下:
Camera | 5.Linux v4l2架构(基于rk3568)
Camera | 7.瑞芯微rk3568平台摄像头控制器MIPI-CSI驱动架构梳理
Camera | 9.camera闪光灯驱动移植笔记-基于rk3568
前面文章我们简单给大家介绍了如何移植闪光灯芯片sgm3141,该驱动依赖了led子系统和v4l2子系统。V4L2可以参考前面camera系列文章,本文主要讲述led子系统。
一、LED子系统框架
Linux内核的 led 子系统主要功能:
为每个设备在/sys/class/leds下创建不同的文件节点,用于操作led
抽象出所有的灯基本操作,设置亮、灭,光强、闪烁等
框架所处的位置,正如上图所示,由下往上看:
Hardware:硬件设备,指的是LED,可以是各种设备上的led灯
硬件驱动层:是直接操作硬件的实现,用于驱动硬件,实现相应的功能,并且将硬件设备注册进框架之中。
核心层:将LED进行统一管理,向下提供注册接口,向上提供统一访问接口,方便用户访问
用户层:用户通过指定的文件节点,能够直接控制LED的亮灭。
不同的led位于不同的外设上,有的可能通过gpio控制,也可能由其他的芯片控制, 有的led只需要控制亮灭,有的需要设置为闪烁,只需要基于架构设置对应的回调函数即可。
二、LED子系统驱动文件
了解完LED子系统框架之后,我们来分析一下其相关的目录结构!
上面即为LED子系统的目录结构,其主要核心文件有:
led-core.c:核心层实现,抽象软件实现的相关功能,如闪烁,亮度设置等等,并管理LED设备
led-gpio.c:直接控制硬件设备,并且将其硬件设备注册进入LED驱动框架
led-class.c:定义用户访问的相关接口
led-class-flash.c:灯闪烁相关功能函数实现
led-triggers.c:LED出发功能的抽象
ledtrig-cpu.c:将LED作为CPU灯
ledtrig-heartbeat.c:将LED作为心跳灯
打开了LED子系统目录下的kernel/drivers/leds/Makefile,我们看到
我们必须在内核的配置中,通过 make menuconfig打开LED的相关配置,才支持LED相关功能。
三、查看sysfs文件结构
1. sys/class/leds/
我们在开发板中输入ls /sys/class/leds/,可以查看LED子系统生成的文件信息。
blue:板子的RGB灯的蓝色
green:板子的RGB灯的绿色
red: 板子的RGB灯的红色
gpio-flash:camera gpio闪光灯
mmc0:: :SD卡指示灯
2. red等子目录
根据打开配置的不同,生成不同的文件节点,比如red目录下信息:
相关属性文件有:brightness、max_brightness、trigger等
max_brightness:表示LED灯的最大亮度值。
brightness:表示当前LED灯的亮度值,它的可取 值范围为[0~max_brightness],一些LED设备不支持多级亮度,直接以非0值来 表示LED为点亮状态,0值表示灭状态。
delay_off、delay_on:trigger为timer时,LED亮灭的时间,单位ms
trigger:则指示了LED灯的触发方式,查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。
常见的触 发方式如下表所示:
创建位置:
创建代码:
原文链接:https://mp.weixin.qq.com/s/XAL_tWm0_8dIUYz8e7zLNA
电子技术应用专栏作家 一口Linux