|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
当用户向系统添加或删除设备时,内核会产生一个热插拔事件,并在/proc/sys/kernel/hotplug文件里查找处理设备连接的用户空间程序,这个用户空间程序主要有/sbin/hotplug与/sbin/mdev. 9 \, L+ V" J, z5 @
echo /sbin/hotplug > /proc/sys/kernel/hotplug
" w7 c7 i9 y! ~0 L8 d或者 . y: Y! E, h- p: m2 V! W7 }4 u/ I
echo /sbin/mdev > /proc/sys/kernel/hotplug
; T5 G$ |9 \2 m& |: r) Mmdev -s, u$ a( S! P0 \3 I
& z! x5 N# b: [0 H
( ^+ i+ w- E4 z6 x* I) l4 ghotplug
4 t, _5 _, y6 b4 f- |; @) _) z4 z是一个bash脚本具有如下类似的代码:
& W9 z+ {: y L, L6 M" ?
' s/ O3 n9 z- h: |- 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 12 w1 S: m8 i0 |3 N9 I
0 q; j4 i1 o( p S$ w$ C( C; ~8 S3 t1 n5 a" K
1 J1 L6 H7 a V7 S5 t1) 当driver执行kobject_uevent会调用hotplughelper,从而调用这个/sbin/hotplug脚本。
7 V* O- Y2 e) ]* c' k% M2) 该脚本在/etc/hotplug.d目录搜索所有以hotplug为后缀的程序并调用, 1 ^. ^" C! U) z
3) 传递给被调用的程序的参数就是事件的名字, " ~# l0 c& |- j% d
4) 被调用的程序还可以读取大量的环境变量,包括ACTION、DEVPATH、SUBSYSTEM等。
7 W+ U1 Y/ B8 R5 d5) 被调用的程序根据这些环境变量在/lib/module/KERNEL_VERSION/modules.*map文件找到对应需要加载的模块并加载。 0 q- y2 f6 y* X; X& R& R5 v4 `
(*.map是当驱动程序使用MODULE_DEVICE_TABLE宏时,depmod程序使用这些信息并创建了/lib/module/KERNEL_VERSION/modules.*map文件。)6 W' F% y: u' }+ D6 I
; V" `; \! t& W! j* i+ B$ f
& K4 n/ j1 R" ], k* J% ~* ?& wudev/mdev/vold
# N8 ?" T5 z7 ^0 ]' i# R2 G S- ~6 i% [
$ v0 i# N5 e1 X6 j$ z# C( n8 f9 x& v* M3 s; R
|
|