openwrt的led configuration

一、led配置

1、界面说明

 如上图可在led configuration界面添加对于led灯的控制。

通过add按钮添加led闪烁的触发事件。

Name:配置led名字。

LED Name:设置红灯和绿灯。  (目前用的测试板红灯和绿灯都显示绿灯)

Default state:选中时灯亮度为255,不选时为0.

Trigger:触发器,设置led的触发方式。在led modules中可以安装触发器module.

添加后,trigger可选项如下:

 

trigger驱动文件目录:openwrt\build_dir\target-arm_cortex-a7+neon-vfpv4_musl_eabi\linux-sunxi_cortexa7\linux-4.14.25\drivers\leds\trigger

2、Led triggers      参考博客:LEDE/OpenWRT控制gpio-led

      Now we explain in detail what each trigger does.

(1)None

The LED is always in default state. Unlisted LED are default OFF, so this is only useful to declare a LED to be always ON.

(2)Timer

The LED blinks with the configured on/off frequency.

 (5)Default-on

  The LED is ON. Deprecated, use default=1 trigger=none instead. 

 (6)Heartbeat

  The LED flashes to simulate actual heart beat thump-thump-pause. The frequency is in direct proportion to 1-minute average CPU load. 

 (7)Flash Writes

The LED flashes as data is written to flash memory.

 (8)Network Activity

The LED flashes with link status and/or send and receive activity on the configured interface.

 (9)WiFi Activity triggers

  The LED flashes on events triggered in physical interface, rather than in software network interface. Besides phy triggers have more events, it also provides possibility of static LED setup in case you want to monitor your 2.4 GHz radio (phy0 usually) and 5 GHz radio (phy1 usually) separately. netdev can’t guarantee this distinguishing since wlan0 may be referring to 2.4 GHz or 5 GHz radio based on current network setup.

  • phy0rx - flashes on reception.
  • phy0tx - flashes on transmission.
  • phy0assoc - flashes on client association.
  • phy0radio - (unknown, this option did nothing on my tl-wr1043nd)
  • phy0tpt - flashes slowly and steadily on network activity.in comparison to energetic flashes of tx and rx modes
(10)USB Device

  The LED turns ON if USB device is connected.

 To find out device name use logread to search for it or list /sys/bus/usb/devices (for this example, there would be /sys/bus/usb/devices/1-1 device).

(11)Morse Code

  The LED signals a message using Morse code. 

 (12)GPIO

  Allows LEDs to be controlled by gpio events. 

二、led脚本介绍

脚本中的config_get、config_load、config_foreach的处理方式可查看https://www.cnblogs.com/yuanqiangfei/p/14751882.html

config_get<variable> <section> <option> [<default>]会获取led配置(etc/config/system文件中关于led section)的参数,如果没有配置相关参数会取默认值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
config_get sysfs $1 sysfs
config_get name $1 name "$sysfs"
config_get trigger $1 trigger "none"
config_get dev $1 dev
config_get ports $1 port
config_get mode $1 mode "link"  //link为默认值
config_get_bool default $1 default "nil" 
config_get delayon $1 delayon
config_get delayoff $1 delayoff
config_get interval $1 interval "50"
config_get port_state $1 port_state
config_get delay $1 delay "150"
config_get message $1 message ""
config_get gpio $1 gpio "0"
config_get inverted $1 inverted "0"

 /etc/init.d/led脚本对于这几种触发器类型led状态做处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
case "$trigger" in
        "netdev")
            [ -n "$dev" ] && {
                echo $dev > /sys/class/leds/${sysfs}/device_name
                echo $mode > /sys/class/leds/${sysfs}/mode
                echo $interval > /sys/class/leds/${sysfs}/interval
            }
            ;;
 
        "timer"|"oneshot")
            [ -n "$delayon" ] && \
                echo $delayon > /sys/class/leds/${sysfs}/delay_on
            [ -n "$delayoff" ] && \
                echo $delayoff > /sys/class/leds/${sysfs}/delay_off
            ;;
 
        "usbport")
            local p
 
            for p in $ports; do
                echo 1 > /sys/class/leds/${sysfs}/ports/$p
            done
            ;;
 
        "port_state")
            [ -n "$port_state" ] && \
                echo $port_state > /sys/class/leds/${sysfs}/port_state
            ;;
 
        "gpio")
            echo $gpio > /sys/class/leds/${sysfs}/gpio
            echo $inverted > /sys/class/leds/${sysfs}/inverted
            ;;  

配置好状态后会将led配置写到/etc/config/system配置文件中:

 然后 /etc/init.d/led脚本会获取/etc/config/system文件中每个option的值写到/sys/class/led/目录下的文件中去。

三、查看led灯的gpio

 target Profile选择的是Hangzhou vidtoo model A,可通过修改500-ARM-dts-support-vidtoo-model-A.patch文件来修改gpio,打完patch后生成dts文件。 

 openwrt/build_dir/target-arm_cortex-a7+neon-vfpv4_musl_eabi/linux-sunxi_cortexa7/linux-4.14.25/arch/arm/boot/dts/sun8i-h2-plus-vidtoo-model-A.dts

dts文件中会有对led灯gpio的配置

1
2
3
4
5
6
7
8
9
科普
在OpenWrt/Linux里面,对GPIO的操作都是通过寄存器操作的,详细可以看每个板子的DTSI文件,在DTSI文件里描述了板子寄存器的地址。
GPIO按组划分,以MT7620A为例,GPIO一共有72个,一共分了四组,组号为0~3。
0组拥有24个GPIO,GPIO号为0~23;
1组拥有16个GPIO,GPIO号为24-39;
2组拥有32个GPIO,GPIO号为40-71;
3组仅拥有一个GPIO72。
因此,GPIO号=GPIO组号基址+GPIO组内编号。
以ZTE Q7路由器为例,GPIO定义在../target/linux/ramips/dts/mt7620n.dtsi文件中定义

gpio定义的方式是:组号+组内编号

1
2
3
4
5
6
7
8
9
10
11
12
13
leds {
    compatible = "gpio-leds";
 
    pwr_led {
        label = "green:pwr";
        gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;     //绿灯是第0组的的第10个,GPIO10默认为高电平
        default-state = "on";
    };
 
    status_led {
        label = "red:status";
        gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;    //红灯是第0组的第15个,GPIO15默认为高电平
          default-state = "on"; }; };

如果要修改led的gpio,直接修改openwrt/target/linux/sunxi/patch-4.14/500-ARM_dts-support-vidtoo-model-A.patch文件,不要直接修改dts文件,因为在编译过程中会删除dts文件重新打patch,会覆盖掉修改。 

可以在500-ARM_dts-support-vidtoo-model-A.patch文件中增加默认trigger 

  

posted @   轻轻的吻  阅读(6164)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示