OpenWrt中的热拔插Hotplug.d中的脚本
基本概念
-
hotplug:热插拔机制,用于在设备或接口状态发生变化时(如插入、拔出、网络连接状态改变等),自动触发相应的处理动作。
-
hotplug.d:OpenWrt中用于存放热插拔事件处理脚本的目录。这些脚本根据不同的事件类型被组织在不同的子目录下,当相应事件发生时,系统会自动调用这些脚本。
工作原理
-
内核事件触发:
-
当系统中的硬件设备状态发生变化(如USB设备插入或拔出、网络接口状态改变等),Linux内核会产生一个
uevent
事件。 -
这些事件通过
netlink
套接字发送到用户空间。
-
-
procd
监听事件:-
OpenWrt的
procd
守护进程负责监听这些uevent
事件。 -
procd
会根据/etc/hotplug.json
文件中的配置规则来处理这些事件。
-
-
调用
hotplug-call
脚本:-
根据
hotplug.json
的配置,procd
会调用/sbin/hotplug-call
脚本,并将事件的$SUBSYSTEM
变量作为参数传递给该脚本。 -
/sbin/hotplug-call
脚本会根据$SUBSYSTEM
变量,找到对应的/etc/hotplug.d/
子目录,并按字母顺序执行该子目录下的所有脚本。
-
-
脚本执行:
-
每个脚本在执行时,会接收到一系列与事件相关的环境变量,如
ACTION
(事件类型,如add
或remove
)、DEVPATH
(设备路径)、INTERFACE
(接口名称)等。 -
脚本可以根据这些环境变量获取事件的详细信息,并执行相应的处理逻辑。
-
目录结构
-
/etc/hotplug.d/
:主目录,包含多个子目录,每个子目录对应一类事件。-
block
:处理块设备(如USB存储设备)的事件。 -
iface
:处理网络接口的事件。 -
net
:处理网络设备的事件。 -
wireless
:处理无线设备的事件。 -
其他子目录可能根据系统版本和配置而有所不同。
-