|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
当用户向系统添加或删除设备时,内核会产生一个热插拔事件,并在/proc/sys/kernel/hotplug文件里查找处理设备连接的用户空间程序,这个用户空间程序主要有/sbin/hotplug与/sbin/mdev.
6 A P& l" Y& Pecho /sbin/hotplug > /proc/sys/kernel/hotplug " O( T9 Y! n( u8 g% A
或者
3 L) p I: s0 `+ i# R8 O) U! v Necho /sbin/mdev > /proc/sys/kernel/hotplug
. i- d7 X$ ]$ T2 K$ emdev -s
; \9 v8 O* c9 v( n+ |" V' w: y1 X" W& W
/ L8 Q$ Y: K; p! L4 w& y) Q hhotplug
! m! P |. t4 X6 |5 ^% e+ H是一个bash脚本具有如下类似的代码:
! N" p4 j) i2 b
; q5 P9 i, k4 Y) b7 ?8 |* q- 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 16 I) Z+ t. Q( |; {; F; }, [+ ^8 ^
: g; F- ^- x+ M. F- `* z6 n8 Q: p
5 @3 Z& Y I# K0 f7 C
4 ^6 Q4 Z2 j) l+ m) t9 h( z1) 当driver执行kobject_uevent会调用hotplughelper,从而调用这个/sbin/hotplug脚本。
, k! `$ V/ G6 u) U1 R, V% M2) 该脚本在/etc/hotplug.d目录搜索所有以hotplug为后缀的程序并调用, ) o5 ~$ [2 C9 f. }! U9 [+ n
3) 传递给被调用的程序的参数就是事件的名字,
, ^& f/ N0 d& Q# P1 ^4 q4) 被调用的程序还可以读取大量的环境变量,包括ACTION、DEVPATH、SUBSYSTEM等。 $ U+ ?: K2 U/ _% u
5) 被调用的程序根据这些环境变量在/lib/module/KERNEL_VERSION/modules.*map文件找到对应需要加载的模块并加载。
/ `+ k& v# X" G# [+ m5 P(*.map是当驱动程序使用MODULE_DEVICE_TABLE宏时,depmod程序使用这些信息并创建了/lib/module/KERNEL_VERSION/modules.*map文件。)
5 `* f* v1 N0 P& C6 @9 r$ }0 b& n. a0 I6 h
: Z4 g5 K. D6 |* Yudev/mdev/vold
, x0 ~2 O& i3 j9 s- _ ?8 u1 Q' j4 o% e C
6 C3 O* J: P( K" I/ }% ?) Q. {( q/ c7 L9 g% q8 O1 `
|
|