什么是热插拔

带电插拔,不用关闭系统。

热插拔当内核发生某种热插拔事件时,内核会调用用户空间的程序实现交互。比如内核发生TF插入,调用用户空间程序,用户空间程序自动挂载等

机制

devfsudevmdevdevfs基本不用了。mdevudev简化版本。

udev是基于netlink机制实现的。通过监听内核发送的uevent来执行相应的热插拔操作。mdev是基于uevent_helper机制,内核产生的uevent会调用uevent_helper所指向的用户程序,mdev执行热插拔动作。

特性Netlink (NETLINK_KOBJECT_UEVENT)uevent_helper
通信方式基于套接字(Socket)的异步消息通信内核直接执行用户空间程序
实现方式内核广播消息,用户态进程监听接收内核为每个事件 fork() 一个新进程执行助手程序
效率(消息传递,无进程创建开销)极低(每次事件都创建进程,开销巨大)
扩展性,支持多播,可供多个程序同时监听,一次只能指定一个助手程序
当前状态主流、推荐已废弃,现代系统默认不启用
典型使用者udevsystemd-udevd 等现代设备管理工具早期的 hotplug 脚本