做防水网站如何制作企业网站
2026/4/7 18:18:24 网站建设 项目流程
做防水网站,如何制作企业网站,试客网站 源码,做网站项目如何实现支付目录 目录 前言 DTS配置参考 LEDS_GPIO的DTS配置参考 LEDS_PWM的DTS配置参考 LEDS_GPADC的DTS配置参考 内核配置参考 LEDS_GPIO的内核配置参考 LEDS_PWM的内核配置参考 LEDS_GPADC的内核配置参考 验证测试参考 常见问题 配置了LED的Devicetree和Menuconfig是正确的但…目录目录前言DTS配置参考LEDS_GPIO的DTS配置参考LEDS_PWM的DTS配置参考LEDS_GPADC的DTS配置参考内核配置参考LEDS_GPIO的内核配置参考LEDS_PWM的内核配置参考LEDS_GPADC的内核配置参考验证测试参考常见问题配置了LED的Devicetree和Menuconfig是正确的但是LED控制打开后始终不亮配置了LED的Devicetree和Menuconfig后发现LED控制打开后LED灯反而是灭的总结前言LED指示灯即发光二极管指示灯是一种以发光二极管为核心光源的电子元件主要用于显示设备或电路的工作状态。‌其核心作用是通过不同颜色和闪烁模式的灯光直观反映设备的运行情况例如电源供应、连接状态或信号传输等从而便于用户快速判断设备是否正常工作或诊断故障。‌Linux LED驱动开发主要涉及两种方式一是编写自定义的字符设备驱动直接操作硬件寄存器二是利用内核内置的LED子系统通过设备树配置。Linux内核原生已经支持LED驱动其中内核文档路径为linux-x.xx/Documentation/devicetree/bindings/leds其描述了相应的设备树节点如何编写。这里推荐使用‌Linux内核内置LED驱动减少重复的工作。Linux内核提供基于platform框架的GPIO LED驱动文件路径为drivers/leds/leds-gpio.c。DTS配置参考LEDS_GPIO的DTS配置参考leds { compatible gpio-leds; timer_led { gpios gpioc 0 GPIO_ACTIVE_LOW; label timer_led; linux,default-trigger timer; default-status on; status okay; }; };LEDS_PWM的DTS配置参考pwm-leds { compatible pwm-leds; pinctrl-names default; pinctrl-0 pinctrl_pwm1; pwm-led1 { label pwmled; pwms pwm 1 50000 1; max-brightness 255; linux,default-trigger heartbeat; }; }; pinctrl: pinctrlxxxxxxxx { pinctrl_pwm1: pwm1-grp { test,pins gpioc-1; test,pin-function 6; test,pin-pud ENABLE_PULL_UP; test,pin-drv DRV_LEVEL3; }; };LEDS_GPADC的DTS配置参考leds_gpadc { compatible gpadc-leds; ir_led { label ir_led; gpadc_channel 1; linux,default-trigger timer; default-state on; status okay; }; };内核配置参考LEDS_GPIO的内核配置参考CONFIG_NEW_LEDSy CONFIG_LEDS_CLASSy CONFIG_LEDS_GPIOy CONFIG_LEDS_TRIGGERSy 触发器功能根据实际情况来打开 CONFIG_LEDS_TRIGGER_TIMERy CONFIG_LEDS_TRIGGER_ONESHOTy CONFIG_LEDS_TRIGGER_MTDy CONFIG_LEDS_TRIGGER_HEARTBEATy CONFIG_LEDS_TRIGGER_BACKLIGHTy CONFIG_LEDS_TRIGGER_CPUy CONFIG_LEDS_TRIGGER_ACTIVITYy CONFIG_LEDS_TRIGGER_GPIOy CONFIG_LEDS_TRIGGER_DEFAULT_ONy CONFIG_LEDS_TRIGGER_TRANSIENTy CONFIG_LEDS_TRIGGER_CAMERAy CONFIG_LEDS_TRIGGER_PANICy CONFIG_LEDS_TRIGGER_NETDEVyLEDS_PWM的内核配置参考CONFIG_NEW_LEDSy CONFIG_LEDS_CLASSy CONFIG_LEDS_PWMy CONFIG_LEDS_TRIGGERSy 触发器功能根据实际情况来打开 CONFIG_LEDS_TRIGGER_TIMERy CONFIG_LEDS_TRIGGER_ONESHOTy CONFIG_LEDS_TRIGGER_MTDy CONFIG_LEDS_TRIGGER_HEARTBEATy CONFIG_LEDS_TRIGGER_BACKLIGHTy CONFIG_LEDS_TRIGGER_CPUy CONFIG_LEDS_TRIGGER_ACTIVITYy CONFIG_LEDS_TRIGGER_GPIOy CONFIG_LEDS_TRIGGER_DEFAULT_ONy CONFIG_LEDS_TRIGGER_TRANSIENTy CONFIG_LEDS_TRIGGER_CAMERAy CONFIG_LEDS_TRIGGER_PANICy CONFIG_LEDS_TRIGGER_NETDEVyLEDS_GPADC的内核配置参考CONFIG_NEW_LEDSy CONFIG_LEDS_CLASSy CONFIG_LEDS_GPADCy CONFIG_LEDS_TRIGGERSy触发器功能根据实际情况来打开 CONFIG_LEDS_TRIGGER_TIMERy CONFIG_LEDS_TRIGGER_ONESHOTy CONFIG_LEDS_TRIGGER_MTDy CONFIG_LEDS_TRIGGER_HEARTBEATy CONFIG_LEDS_TRIGGER_BACKLIGHTy CONFIG_LEDS_TRIGGER_CPUy CONFIG_LEDS_TRIGGER_ACTIVITYy CONFIG_LEDS_TRIGGER_GPIOy CONFIG_LEDS_TRIGGER_DEFAULT_ONy CONFIG_LEDS_TRIGGER_TRANSIENTy CONFIG_LEDS_TRIGGER_CAMERAy CONFIG_LEDS_TRIGGER_PANICy CONFIG_LEDS_TRIGGER_NETDEVy验证测试参考1. 配置好LED相关的DTS和内核配置后编译并烧录固件主控板正常启动。2. 验证LEDS_GPIO输入操作命令并观察对应的LED的亮灭情况例如# cat /sys/class/leds/timer_led/trigger 查看当前的触发器类型。 none [timer] oneshot mtd nand-disk heartbeat backlight gpio cpu cpu0 activity default-on transient flash torch panic netdev mmc0 mmc1 # echo heartbeat /sys/class/leds/timer_led/trigger改变触发器类型为心跳触发类型。 # cat /sys/class/leds/timer_led/trigger 查看当前的触发器类型。 none timer oneshot mtd nand-disk [heartbeat] backlight gpio cpu cpu0 activity default-on transient flash torch panic netdev mmc0 mmc1 # echo timer /sys/class/leds/timer_led/trigger改变触发器类型为定时器触发类型。 # cat /sys/class/leds/timer_led/trigger查看当前的触发器类型。 none [timer] oneshot mtd nand-disk heartbeat backlight gpio cpu cpu0 activity default-on transient flash torch panic netdev mmc0 mmc1 # cat /sys/class/leds/timer_led/delay_on 查看当前定时器触发的亮灯延时时间。 500 # cat /sys/class/leds/timer_led/delay_off 查看当前定时器触发的灭灯延时时间。 500 # echo 3000 /sys/class/leds/timer_led/delay_on改变定时器触发的亮灯延时时间为3000ms。 # cat /sys/class/leds/timer_led/delay_on查看当前定时器触发的亮灯延时时间。 3000 # echo 3000 /sys/class/leds/timer_led/delay_off改变定时器触发的灭灯延时时间为3000ms。 # cat /sys/class/leds/timer_led/delay_off查看当前定时器触发的灭灯延时时间。 30003. 验证LEDS_PWM输入操作命令并观察对应的LED的亮灭情况例如# echo 2 /sys/class/leds/pwmled/brightness # echo 4 /sys/class/leds/pwmled/brightness # echo 12 /sys/class/leds/pwmled/brightness # echo 16 /sys/class/leds/pwmled/brightness # echo 20 /sys/class/leds/pwmled/brightness # echo 24 /sys/class/leds/pwmled/brightness # echo 28 /sys/class/leds/pwmled/brightness4. 验证LEDS_GPADC输入操作命令并观察对应的LED的亮灭情况例如# cat /sys/class/leds/ir_led/trigger none [timer] oneshot mtd nand-disk heartbeat backlight gpio cpu cpu0 activity default-on transient flash torch panic netdev mmc0 mmc1 # cat /sys/class/leds/ir_led/delay_on 500 # cat /sys/class/leds/ir_led/delay_off 500 # echo 3000 /sys/class/leds/ir_led/delay_off # cat /sys/class/leds/ir_led/delay_off 3000 # echo 3000 /sys/class/leds/ir_led/delay_off # cat /sys/class/leds/ir_led/delay_off 3000常见问题配置了LED的Devicetree和Menuconfig是正确的但是LED控制打开后始终不亮【问题现象】调试的PCB板子或整机正常上电后配置了LED的Devicetree和Menuconfig是正确的但是LED软件控制打开后始终不亮。【解决方法】下面以某个LED-红绿双色灯的电路原理图为例。1. 可以先检查LED部分的电路是否正常。比如LED-R软件控制打开后始终不亮可以先检查D11是否贴反或虚贴然后再检查R778是否漏贴或虚贴最后LED-R直接飞线接地查看D11的R灯是否可以正常亮。2. LED部分的电路检查正常后可以跑软件进行控制下LED比如LED-R。配置了LED的Devicetree和Menuconfig后发现LED控制打开后LED灯反而是灭的【问题现象】配置了LED的Devicetree和Menuconfig后发现LED控制打开后LED指示灯反而是灭的。【解决方法】1. 可以先检查DTS的LED部分配置是否正确。比如下面的LED节点配置中“gpios gpioc 18 1”配置的led2实际上打开时GPIOC18置为低电平了因为此时的GPIO_ACTIVE_LOW的值实际上就是1而不是0GPIO_ACTIVE_HIGH的值实际上就是0而不是1建议使“GPIO_ACTIVE_LOW”或“GPIO_ACTIVE_HIGH”来表示。leds { compatible gpio-leds; led0 { label led0; gpios gpioc 14 GPIO_ACTIVE_LOW; default-state on; ; led1 { label led1; gpios gpioc 15 GPIO_ACTIVE_LOW; default-state on; }; led2 { label led2; gpios gpioc 18 1; default-state on; }; };2. 检查并正确修改DTS的LED部分配置后跑软件进行控制LED比如led2,观察LED指示灯的亮灭情况。总结像 LED 这样非常基础的设备驱动 Linux内核已经集成了。 Linux内核的LED驱动采用platform框架因此我们只需按要求在设备树DTS文件中添加相应的 LED 节点配置即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询