[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命令

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