OpenWrt热插拔HotPlug

热插拔官方文档

当某些 events事件发生时,Procd(init系统和进程管理守护进程)会执行位于/etc/hotplug.d/中的脚本,例如当接口启动或关闭时,检测到新的存储驱动器时,或者按下按钮时.
当使用PPPoE连接或者在不稳定的网络中,或使用硬件按钮时非常有用。
该功能模块模拟/扩展了已淘汰的Hotplug2软件包的功能。

工作原理

/etc/hotplug.d 文件夹包含了 block iface, net 和 ntp 等文件夹.
触发事件触发后,Procd将按字母顺序执行该触发器子文件夹中的所有脚本。 这就是为什么大多数脚本都使用数字前缀。

  • block 块设备事件(块设备已连接/已断开连接)
  • iface 接口事件(当LAN或WAN等接口连接/断开时)
  • net 与网络相关的事件
  • ntp 时间同步事件(Time step,时间服务器层变化)
  • button 按钮事件 (默认不创建, 由 /etc/rc.button 代替)
  • usb 类似3g-modem和tty*的USB设备
    对于其他类型的触发器,可能(应该)是其他的。他们可以是按钮, 声音设备, 串口和USB串口加密狗。
用法

只需将您的脚本放入正确的hotplug.d子目录中(如果没有),只需创建正确的子目录即可。

提供给脚本的信息/故障排除

当在中执行脚本时/etc/hotplug.d,Procd 通常会以环境变量的形式提供大量信息。
如果要查看它提供了什么环境变量,请编写一个包含以下行的脚本:
env > /tmp/envs_log.log
并将其放在您要使用的文件夹中,然后触发连接到该文件夹​​的事件,然后您可以通过阅读/tmp/envs_log.log文本文件 来查看传递了哪些环境

相关的环境变量

block 文件夹
在这里插入图片描述
iface 文件夹
在这里插入图片描述
ntp 文件夹
在这里插入图片描述
即使没有NTP同步,也会收到一个定期的热插拔事件,其中stratum=16,开机后大约每11分钟一次
USB文件夹
在这里插入图片描述

U盘的自动挂载卸载

Hotplug一个常见的实例应用就是U盘或SD卡等外设的自动挂载和卸载功能。所以这里我们主要介绍如何利用hotplug实现U盘,移动硬盘等外设自动挂载的方法和原理。本文中的例子还需要根据实际情况作相应适配。

当然,首先得内核有相应的驱动程序支持才行。当U盘插入后,会产生uevent事件,hotplug收到这个内核广播事件后,根据uevent 事件json格式的附带信息内容,在hotplug.json中进行定位。事件包含的信息一般为如下所示:
ACTION(add), DEVPATH(devpath), SUBSYSTEM(block), MAJOR(8), MINOR(1), DEVNAME(devname), DEVTYPE(devtype), SEQNUM(865)
根据上面的信息,就可以在hotplug.json中定位到两个条目,如上面hotplug.json中蓝色显示字段。第一个条目执行的是makedev,该命令会创建设备节点。第二个条目会根据附带信息中的ACTION, DEVPATH, SUBSYSTEM, DEVNAME, DEVTYPE 等变量,调用命令exec去执行hotplug-call脚本。

于是 hotplug-call 会尝试执行 /etc/hotplug.d/block/ 目录下的所有可执行脚本。

所以我们可以在这里放置我们的自动挂载/卸载处理脚本。 例如,编写/etc/hotplug.d/block/30-usbmount,填入以下内容实现U盘自动挂载,卸载:

#!/bin/sh

[ "$SUBSYSTEM" = block ] || exit0
[ "$DEVTYPE" = partition -a "$ACTION" = add ] && {
    echo "$DEVICENAME" | grep 'sd[a-z][1-9]' || exit 0
    test -d /mnt/$DEVICENAME || mkdir /mnt/$DEVICENAME
    mount  -o iocharset=utf8,rw /dev/$DEVICENAME /mnt/$DEVICENAME
}

[ "$DEVTYPE" = disk -a "$ACTION" = remove ] && {
    echo "${DEVICENAME}1" | grep 'sd[a-z][1-9]' || exit 0
    umount/mnt/${DEVICENAME}1 && rmdir /mnt/${DEVICENAME}1
}

有隐藏

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值