1./frameworks/base/core/java/android/os/UEventObserver.java
定义UEventThread并调用nativeWaitForNextEvent
2…/frameworks/base/core/jni/android_os_UEventObserver.cpp
nativeWaitForNextEvent是JNI,调用uevent_next_event
3./hardware/libhardware_legacy/uevent.c
Uevent_init() 初始化addr.nl_family 为AF_NETLINK,并建立type为NETLINK_KOBJECT_UEVENT 的socket连接
While(1)循环通过 poll 轮询, int count = recv(fd, buffer, buffer_length, 0)读取kernel上报的uvent ,并放到 buffer中.
4.Kernel 部分:
USB枚举过程会有如下日志打印:
Line 75: [ 156.712604] android_work: sent uevent USB_STATE=DISCONNECTED
Line 117: [ 156.914379] android_work: did not send uevent (0 0 00000000d923ca9b)
Line 321: [ 159.093122] android_work: sent uevent USB_STATE=CONNECTED
Line 323: [ 159.127016] android_work: sent uevent USB_STATE=CONFIGURED
./drivers/usb/gadget/configfs.c
Android_work 通过调用kobject_uevent_env上报给用户层.
kobject_uevent_env
- kobject_uevent_net_broadcast
-
- uevent_net_broadcast_tagged(uevent_net_broadcast_untagged)
-
-
- netlink_broadcast
-
-
-
-
- netlink_broadcast_filtered
-
-
-
-
-
-
- do_one_broadcast
-
-
-