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
}
发布了73 篇原创文章 · 获赞 39 · 访问量 6804

猜你喜欢

转载自blog.csdn.net/hzlarm/article/details/103035282