ITEEDU

udev的coldplug模式

内核在启动时已经检测到了系统的硬件设备,并把硬件设备信息通过sysfs内核虚拟文件 系统导出。sysfs文件系统由系统初始化脚本挂载到/sys上。udev扫描sysfs文件系统,根据硬件设备信息生成热插拔(hotplug)事 件,udev再读取这些事件,生成对应的硬件设备文件。由于没有实际的硬件插拔动作,所以这一过程被称为coldplug。我们的initramfs就是 利用这一机制,加载硬件设备的驱动程序模块。

udev完成coldplug操作,需要下面三个程序:

  1. udevd——作为deamon,记录hotplug事件,然后排队后再发送给udev,避免事件冲突(race conditions)。
  2. udevtrigger——扫描sysfs文件系统,生成相应的硬件设备hotplug事件。
  3. udevsettle——查看udev事件队列,等队列内事件全部处理完毕才退出。

在initramfs的init脚本中可以执行下面的语句实现coldplug功能:

mkdir -p /dev/.udev/db 
udevd --daemon 
mkdir -p /dev/.udev/queue 
udevtrigger 
udevsettle 

许多文档提到的在udevd --daemon 命令前要执行

 echo > /proc/sys/kernel/hotplug 

命令,经验证,在我们的initramfs环境下的coldplug功能中并不需要。