OpenWrt reset按键处理流程(hotplug)
本文介绍OpenWrt的reset按键的处理过程。一般的路由器都存在一个reset按键,用来进行重启或者恢复出厂操作。
通常的操作对应为:
单击 - 重启设备
长按 – 恢复出厂设置
当然,这些操作都是可以配置的,下面会详细介绍reset按键的处理过程
reset按键的处理过程使用的是hotplug(热插拔)技术。内核空间检测到reset按键状态的改变后,以netlink的方式发送到上层空间
-
gpio_button_hotplug 模块:是内核模块,能够一直读取按键状态,并将状态通知到用户空间。(代码路径:openwrt/package/kernel/gpio-button-hotplug)
-
hotplug-call 脚本:用户空间脚本,获取到内核的通知消息,并调用相应的执行脚本(/sbin目录下)
-
button 脚本:用来处理具体的按键事件(/etc/hotplug.d/button/00-button)名称不固定
-
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的编译安装。