[OpenWrt] reset按键处理流程(hotplug)

OpenWrt reset按键处理流程(hotplug)

介绍

       本文介绍OpenWrt的reset按键的处理过程。一般的路由器都存在一个reset按键,用来进行重启或者恢复出厂操作。

       通常的操作对应为:

              单击 - 重启设备

              长按 – 恢复出厂设置

 当然,这些操作都是可以配置的,下面会详细介绍reset按键的处理过程

涉及文件

      reset按键的处理过程使用的是hotplug(热插拔)技术。内核空间检测到reset按键状态的改变后,以netlink的方式发送到上层空间

  1. gpio_button_hotplug 模块:是内核模块,能够一直读取按键状态,并将状态通知到用户空间。(代码路径:openwrt/package/kernel/gpio-button-hotplug)
  2. hotplug-call 脚本:用户空间脚本,获取到内核的通知消息,并调用相应的执行脚本(/sbin目录下)
  3. button 脚本:用来处理具体的按键事件(/etc/hotplug.d/button/00-button)名称不固定
  4. system:配置,/etc/config/system

过程简述

gpio_button_hotplug

       该模块检测到reset按键变化之后,会调用button_hotplug_fill_event 函数将事件消息封装:

                                     

用户层将使用上述环境变量进行相应处理

消息封装完毕后使用netlink将消息发送到应用层

                                       

 

hotplug-call

应用层脚本:

export HOTPLUG_TYPE="$1"



. /lib/functions.sh



PATH=/bin:/sbin:/usr/bin:/usr/sbin

LOGNAME=root

USER=root

export PATH LOGNAME USER



[ \! -z "$1" -a -d /etc/hotplug.d/$1 ] && {

   for script in $(ls /etc/hotplug.d/$1/* 2>&-); do (

     [ -f $script ] && . $script

   ); done

}

它将调用所有的/etc/hotplug.d目录下的脚本。

button

. /etc/functions.sh

do_button () {

   local button

   local action

   local handler

   local min

   local max



   config_get button $1 button

   config_get action $1 action

   config_get handler $1 handler

   config_get min $1 min

   config_get max $1 max



   [ "$ACTION" = "$action" -a "$BUTTON" = "$button" -a -n "$handler" ] && {

     [ -z "$min" -o -z "$max" ] && eval $handler

     [ -n "$min" -a -n "$max" ] && {

        [ $min -le $SEEN -a $max -ge $SEEN ] && eval $handler

     }

   }

}



config_load system

config_foreach do_button button

将会读取/etc/config/system配置,然后根据action,button等配置进行

 

system

以下面为例:

config button

   option button 'reset'

   option action 'released'

   option handler 'reboot'

   option min '0'

   option max '3'

按键在0-3s,执行reboot命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章