Linux 内核/sbin/hotplug 工具

如同本章中前面提过的, 无论何时一个设备从系统中增删, 都产生一个"热插拔事件". 这 意味着内核调用用户空间程序 /sbin/hotplug. 这个程序典型地是一个非常小的 bash 脚 本, 只传递执行给一系列其他的位于 /etc/hot-plug.d/ 目录树的程序. 对于大部分的 Linux 发布, 这个脚本看来如下:

DIR="/etc/hotplug.d"

for I in "${DIR}/$1/"*.hotplug "${DIR}/"default/*.hotplug ; do if [ -f $I ]; then

test -x $I && $I $1 ; fi

done exit 1

换句话说, 这个脚本搜索所有的有 .hotplug 后缀的可能对这个事件感兴趣的程序并调用 它们, 传递给它们许多不同的环境变量, 这些环境变量已经被内核设置. 更多关于

/sbin/hotplug 脚本如何工作的细节可在程序的注释中找到, 以及在 hotplug(8)手册页 中.

如同前面提到的, /sbin/hotplug 被调用无论何时一个 kobject 被创建或销毁. 热插拔 程序被用一个提供事件名子的单个命令行参数调用. 核心内核和涉及到的特定子系统也设 定一系列带有关于发生了什么的信息的环境变量(下面描述). 这些变量被热插拔程序使用 来判定刚刚在内核发生了什么, 以及是否有任何特定的动作应当采取.

传递给 /sbin/hotplug 的命令行参数是关联这个热插拔事件的名子, 如同分配给 kobject 的 kset 所决定的. 这个名子可通过一个对属于本章前面描述过的 kset 的 hotplug_ops 结构的 name 函数的调用来设定; 如果那个函数不存在或者从未被调用, 名 子是 kset 自身的名子.

一直为 /sbin/hotplug 设定的缺省的环境变量是:

ACTION

这个字符串 add 或 remove, 只根据是否这个对象是被创建或者销毁.

DEVPATH

一个目录路径, 在 sysfs 文件系统中, 它指向在被创建或销毁的 kobject. 注意 sysfs 文件系统的加载点不是添加到这路径, 因此是由用户空间程序来决定这个.

SEQNUM

这个热插拔事件的顺序号. 顺序号是一个 64-位 数, 它每次产生热插拔事件都递 增. 这允许用户空间以内核产生它们的顺序来排序热插拔事件, 因为对一个用户空 间程序可能乱序运行.

SUBSYSTEM

同样的字符串作为前面描述的命令行参数传递.

许多不同的总线子系统都添加它们自己的环境变量到 /sbin/hotplug 调用中, 当关联到 总线的设备被添加或从系统中去除. 它们在它们的热插拔回调中做这个, 这个回调在分配 给它们的总线(如同在"热插拔操作"一节中描述的)的 struct kset_hotplug_ops 中指定. 这允许用户空间能够自动加载必要的可能需要来控制这个被总线发现的设备的模块. 这里 是一个不同总线类型的列表以及它们添加到 /sbin/hotplug 调用中的环境变量.

原文地址:https://www.cnblogs.com/fanweisheng/p/11148092.html