|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
当用户向系统添加或删除设备时,内核会产生一个热插拔事件,并在/proc/sys/kernel/hotplug文件里查找处理设备连接的用户空间程序,这个用户空间程序主要有/sbin/hotplug与/sbin/mdev.
' v% A# Q W _3 S- c/ `5 Recho /sbin/hotplug > /proc/sys/kernel/hotplug 7 d6 b0 {9 f8 P, X! d; ^
或者 ( R6 {6 g7 X/ K2 Z; j3 ~
echo /sbin/mdev > /proc/sys/kernel/hotplug
6 n$ \3 [: w/ c6 G4 Z8 C/ Rmdev -s
, z2 G4 k4 m2 N6 v- H/ w4 k1 @; Y8 s
8 E. e7 g! ~# k' Photplug
! r5 i! `% i: X& W. B是一个bash脚本具有如下类似的代码:+ Q# a, u* j+ a- u4 Y9 V) `
4 U( g5 a3 P+ o" l* L- 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" p7 |; ?5 i/ u# E% Y1 E( _. g
# k& k1 W& I2 k
+ U1 i0 a3 K5 {' Q
, ], m1 m% [9 `; k7 H
1) 当driver执行kobject_uevent会调用hotplughelper,从而调用这个/sbin/hotplug脚本。 9 V6 o' r/ B. D2 A0 s
2) 该脚本在/etc/hotplug.d目录搜索所有以hotplug为后缀的程序并调用,
. ?! Z# V: x$ m# e D5 W3) 传递给被调用的程序的参数就是事件的名字, $ `6 ^# A' _$ ^4 M# r
4) 被调用的程序还可以读取大量的环境变量,包括ACTION、DEVPATH、SUBSYSTEM等。
f' i, M0 l% ~* Q7 d. ?5) 被调用的程序根据这些环境变量在/lib/module/KERNEL_VERSION/modules.*map文件找到对应需要加载的模块并加载。 ; S+ `( Z/ s6 f: N4 @9 T& T) e- s
(*.map是当驱动程序使用MODULE_DEVICE_TABLE宏时,depmod程序使用这些信息并创建了/lib/module/KERNEL_VERSION/modules.*map文件。)# @% f7 l1 t9 i
* v+ Q1 ~8 E% j3 F% q
# i; x, ^7 a! K9 j mudev/mdev/vold
+ R, u2 B: r: n, v
6 j9 m# e/ F5 T* f4 s$ _2 O
& v- `& v) J# X7 t |: ]
% d* N2 {) N, ^) S |
|