什么是热插拔
带电插拔,不用关闭系统。
热插拔当内核发生某种热插拔事件时,内核会调用用户空间的程序实现交互。比如内核发生TF插入,调用用户空间程序,用户空间程序自动挂载等
机制
有devfs,udev,mdev,devfs基本不用了。mdev是udev简化版本。
udev是基于netlink机制实现的。通过监听内核发送的uevent来执行相应的热插拔操作。mdev是基于uevent_helper机制,内核产生的uevent会调用uevent_helper所指向的用户程序,mdev执行热插拔动作。
| 特性 | Netlink (NETLINK_KOBJECT_UEVENT) | uevent_helper |
|---|---|---|
| 通信方式 | 基于套接字(Socket)的异步消息通信 | 内核直接执行用户空间程序 |
| 实现方式 | 内核广播消息,用户态进程监听接收 | 内核为每个事件 fork() 一个新进程执行助手程序 |
| 效率 | 高(消息传递,无进程创建开销) | 极低(每次事件都创建进程,开销巨大) |
| 扩展性 | 好,支持多播,可供多个程序同时监听 | 差,一次只能指定一个助手程序 |
| 当前状态 | 主流、推荐 | 已废弃,现代系统默认不启用 |
| 典型使用者 | udev、systemd-udevd 等现代设备管理工具 | 早期的 hotplug 脚本 |