Android USB\HDMI等事件监听

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读取并进行分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值