添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

OpenWrt reset按键处理流程(hotplug)介绍 本文介绍OpenWrt的reset按键的处理过程。一般的路由器都存在一个reset按键,用来进行重启或者恢复出厂操作。 通常的操作对应为: 单击 - 重启设备 长按 – 恢复出厂设置当然,这些操作都是可以配置的,下面会详细介绍reset...
OpenWRT Hotplug原理分析 本次研究基于OpenWRT 14_07 trunk。其他版本有部分差异,请阅读时注意。 Hotplug即热插拔,在新版本OpenWRT上,hotplug,coldplug与watchdog等被集成到全新的Procd系统中。 Procd是OpenWRT下新的预初始化,初始化,热插拔和事件系统。在openwrt 中, procd 作为 init 进程会处理许多事情, 其中就包括 hotplug。procd本身并不知道如何处理hotplug事件,也没有必要知道,因为它只实现机制,而不实现策略。事件的处理是由配置文件决定的,这些配置文件即所谓的rules.。老版本下独立的hotplug2在r36987被移除了。所以下面我们要介绍的就是新版本下Hotplug的机制。 要了解Hotplug运行的整个过程,首先得了解procd系统的工作流程。才能从全局了解hotp
写一个/etc/rc.button/reset脚本来对安全,状态还有配置改变的反馈做相应的处理远程操作按下reset按键,并存储配置,脚本文件:#!/bin/shPATH="$PATH:/usr/local/sbin/:/usr/local/bin/"# Only run on button release. [[ "${ACTION}" = "released" ]] || exit 0# log
在 etc/rc.button/ 文件夹下有热拔插事件响应脚本 按键热拔插事件、触发etc/rc.button/ 对应的按键响应脚本 系统按键响应逻辑是,执行响应脚本文件,用户可以直接修改脚本文件,来修订键盘处理响应逻辑。 查看 rc.button/ root@LEDE:/# ls /etc/rc.button/ failsafe power reset rfkill 响应脚本内容,分别如下: 电源按键 /# cat etc/
热插拔官方文档 当某些 events事件发生时,Procd(init系统和进程管理守护进程)会执行位于/etc/hotplug.d/中的脚本,例如当接口启动或关闭时,检测到新的存储驱动器时,或者按下按钮时. 当使用PPPoE连接或者在不稳定的网络中,或使用硬件按钮时非常有用。 该功能模块模拟/扩展了已淘汰的Hotplug2软件包的功能。 在 /etc/hotplug.d 文件夹包含了...
在/etc/hotplug.d目录中,您会发现一些目录block、iface、net和ntp。 当触发器事件触发时,Procd 将按字母顺序执行该触发器目录中的所有脚本 1、可作为触发的源 目录 描述 block 块设备事件:设备连接/断开 button: 默认情况下不创建,看到/etc/rc.button 3、修改openwrt的dts配置,target/linux/ramips/dts, gpio-keys-polled { compatible = "gpio-keys-polled"; #address-cells = ; #size- 从openwrt trunk上下载最新正在开发的trunk,但是编译还是遇到问题(之前编译的mt7620n),改编AR9341后编译出来的结果并不理想。有很多WR841N的版本 1, 1.1,3,5,7 唯独没有我想要的v8。无 cat /sys/kernel/debug/gpio GPIOs 0-21, platform/10000600.gpio, 10000600.gpio:  gpio-0   (S1               ) in  hi 显示系统已经添加S1按键 2、将S1改为reset按键,其中S1按键使 9.如何移植、编写简单的软件。 10.OpenWRT UI框架发展历史讲解,石像鬼、X-WRT、Luci。 11.基于uhttpd,lua编写简单的UI界面,基于Luci编写简单的UI界面。 12.OpenWrt常用命令使用方法讲解,bash/lua讲解。 13.OpenWrt UCI框架分析,/etc/config/network、/etc/config/wireless 等文件讲解。 14.OpenWrt sysupgrade命令实现原理分析。 15.OpenWrt 启动过程分析。 16.OpenWrt ipkg软件包结构分析。 17.OpenWrt mtd flash映射关系分析,art、............... 按钮闪烁LED功能(不同速度变化) 上图所示的pi是Raspberry Pi 4,但是GPIO引脚与其他版本相同或非常相似,简单的google搜索您的raspberry pi版本将产生相似的接线图。 此按钮具有可让您单独控制LED的引脚。 NO1(常开)连接到引脚11(GPIO 17) C1(公共)连接到引脚14(接地) LED接线 (+)连接到引脚13(GPIO 27) (-)连接到引脚14(接地) 注意:C1和(-)都可以连接到同一接地源 Python代码文件包含详细的注释,概述了代码的使用 openwrt官网传送门 当某些事件发生时,Procd(init系统和进程管理守护进程)执行位于/etc/hotplug.d/中的脚本,例如当接口启动或关闭时,检测到新的存储驱动器时,或者按下按钮时. 当使用PPPoE连接或者在不稳定的网络中,或使用硬件按钮时非常有用。 该功能模块...
OpenWRT是一款基于Linux的嵌入式操作系统,它能够在各种路由器和嵌入式设备上运行。如果想要定制OpenWRT操作系统,就需要使用buildroot进行编译。下面就是openwrt buildroot编译流程。 1. 安装buildroot 在开始编译之前,需要先安装buildroot。可以从官网下载或使用git克隆工具下载。安装完成后,需要配置一些参数。 2. 下载OpenWRT源代码 下载OpenWRT源代码,将其解压到指定目录中。使用源代码可以很方便地进行定制和编译。 3. 配置buildroot 在buildroot下面有一个.config文件,可以使用这个文件来配置buildroot。在文件中设置需要的选项,如编译的目标、交叉工具链等。 4. 安装依赖项 在OpenWRT源代码目录下运行make menuconfig命令,进入配置界面。选择"Build options",然后再选择"Select packages by external kernel tree"并设置正确的内核路径,最后在"Global Build Settings"下勾选"Use external toolchain"选项,确定后保存退出。 5. 进行编译 运行make命令进行编译,这个过程可能需要一些时间。如果配置正确,编译过程应该能够正常结束并生成OpenWRT固件。 6. 安装固件 将编译生成的固件烧录到目标设备中进行安装。这个过程可能会因设备的不同而有所不同。 以上就是OpenWRT Buildroot编译流程的主要步骤,通过这些步骤可以完成buildroot的安装配置和OpenWRT的编译安装。