1,在system/core/init/init.c中service_start()中 创建socket:
int s = create_socket(si->name, socket_type,si->perm, si->uid, si->gid);
if (s >= 0) {
把创建的socket fd以环境变量的形式公布出去
publish_socket(si->name, s);
}

ANDROID_SOCKET_"name"=fd
2,在system/core/include/cutils/sockets.h中 static inline int android_get_control_socket(const char *name)来根据环境变量获取前面创建的 fd
3, 由各模块调用上面的函数获取fd, 进行监听(这里以NetlinkHander为例,主要是监听USB,BATTERY,POWER,HDMI等事件) NetlinkHandler::start()---->SocktLintener::startListener()---->android_get_control_socket(). 紧接着创建一个新的纯种进行监听,SocketListener::threadStart()---->SocketListener::runListener();
4, 上面的监听线程会在收到消息后,如果不是新的设备监听请求,则调用onDataAvailable(),实际上就是NetlinkListener::onDataAvailable()--->NetlinkHandler::onEvent(),然后根据消息类型送到不同的处理模块解析处理;
5, 内核中则由lib/kobject_uevent.c中的kobject_uevent_env()实现写入消息,供上面建立的socket读取并进行分析。

更多相关文章

  1. (转帖)Android系列之Message机制的灵活应用
  2. Eclipse配置Android开发环境
  3. 【android】fragment不响应onActivityResult的问题
  4. android 编译学习
  5. 如何单独编译Android源代码中的模块
  6. Android聊天软件开发(基于网易云IM即时通讯)——发送图片消息(五)
  7. PC安卓模拟器PANIC: Could not open:C:\Documents and Settings
  8. Android: 如何利用Handler处理和发送消息来实现页面刷新的功能
  9. android 2.2数据连接过程

随机推荐

  1. 解决 Android(安卓)Studio : minSdkVersi
  2. Android(安卓)插拔sd广播
  3. Android:msm8909:添加自定义脚本
  4. android 对话框 popupWindow
  5. 【Android(安卓)UI】色板
  6. Android中跳转到系统设置界面大全
  7. Android复习笔记(10) -对话框的使用
  8. Windows7中搭建Android(安卓)x86_64及arm
  9. Android(安卓)Start up
  10. Android颜色选择器库