Android监听UEvent事件的测试程序

原创 2018年04月16日 21:41:03
Android在源码目录:system/extras/tests/uevents/中,可以监听底层UEvent事件上报的程序,其实现如下: 
一、源码实现 

uevent.c

/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <cutils/uevent.h>
#include <stdio.h>

#define UEVENT_MSG_LEN  1024

int main(int argc, char *argv[])
{
    int device_fd;
    char msg[UEVENT_MSG_LEN+2];
    int n;
    int i;

    device_fd = uevent_open_socket(64*1024, true);
    if(device_fd < 0)
        return -1;

    while ((n = uevent_kernel_multicast_recv(device_fd, msg, UEVENT_MSG_LEN)) > 0) {
        msg[n] = '\0';
        msg[n+1] = '\0';

        for (i = 0; i < n; i++)
            if (msg[i] == '\0')
                msg[i] = ' ';

        printf("%s\n", msg);
    }

    return 0;
}

Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES := uevents.c

LOCAL_SHARED_LIBRARIES += libcutils
LOCAL_MODULE:= uevents

LOCAL_CFLAGS := -Wno-unused-parameter

include $(BUILD_EXECUTABLE)

该程序没有自动编译到系统中,需要单独编译。详见:https://blog.csdn.net/u014135607/article/details/78545319

编译完成后,可以编译成system/bin/uevents的可执行程序。

二、使用方式 

从Android.mk中,会生成名为”uevents”的应用程序。我们需要执行以下命令:

adb push uevents  /system/bin/
  • adb shell 并进入system/bin目录:
chmod 777 uevents
  • 3,执行uevents应用程序
adb shell./system/bin/uevents
  • 我们就可以查看uevent事件上报了。
  • 当然也可以将事件打印到log中。需要添加服务启动、服务上下文、权限和log打印等内容。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014135607/article/details/79966983

Android监听UEvent事件log应用程序

Android在源码目录:system/extras/tests/uevents/中,实现了可以监听底层UEvent事件上报的程序,其实现如下: 一,源码实现 uevent.c#include ...
  • hailushijie
  • hailushijie
  • 2015-05-10 16:58:19
  • 1674

用Android UEventObserver监听内核uevent

很多时候我们在框架上层需要知道内核中某些事件的状态,用设备的show属性是可以供上层来查询,但是这需要上层设定一个较耗资源的循环。如果用UEventObserver就可以监听内核event,它是and...
  • zhandoushi1982
  • zhandoushi1982
  • 2013-02-04 17:23:47
  • 8504

Android uevent监控 UEventObserver

android提供了UEventObserver这个类来使java可以监听uevent事件,这个类是一个抽象类,使用这个类必须实现onUEvent函数。 一、监控过程  在UEventOb...
  • kc58236582
  • kc58236582
  • 2016-07-07 14:57:23
  • 1282

Android监听底层事件的机制总结

研究了一上午的Android监听底层事件的机制,总结如下: 内核驱动监听硬件设备的状态和行为,通过uevent机制发送事件给用户空间; 用户空间通过UeventObserver来监听来自内核的ue...
  • guoshaobei
  • guoshaobei
  • 2014-08-07 10:28:15
  • 3706

Linux--内核Uevent事件机制 与 Input子系统

一、Uevent机制 1.前提摘要 (1)Sysfs文件系统          内核设备模型主要的模块和用户之间能看到的相关部分就是sysfs文件系统了。内核在启动的时候会注册sysfs文件系统,并...
  • lxl584685501
  • lxl584685501
  • 2015-06-05 17:05:13
  • 12416

内核发送uevent的API,用户空间解析uevent

内核发送uevent的API内核发送uevent的API由lib/kobject_event.c文件实现,include/linux/kobject.h是头文件。enum kobject_action...
  • luckywang1103
  • luckywang1103
  • 2016-01-16 20:24:58
  • 3464

简化版udev, 抓取uevent事件

#include errno.h>2 M4 J( q* I$ J/ C" ^- w #include stdio.h> #include stdlib.h> #include sys/s...
  • mirkerson
  • mirkerson
  • 2012-04-11 08:58:42
  • 963

Linux kernel -- Uevent发送(热插拔)事件到用户空间

Uevent是一种在内核空间和用户空间之间通信的机制,主要用于热插拔事件(hotplug)。uevent事件根据include/linux/kobject.h中的定义,uevent事件可分为以下几种:...
  • u012066426
  • u012066426
  • 2016-07-15 14:16:30
  • 4309

如何查看devices已经发送的uevent事件

在/sys/devices/ 下面的每一个device都有一个uevent attr,这个是rw的,通过cat uevent 可以知道这个device 已经向上层发送的event时间,向这个写的话,则...
  • tiantao2012
  • tiantao2012
  • 2017-06-21 09:15:51
  • 717

检查内核反馈uevent消息,并提取出USB插入事件

开发中,其他模块提出需求,需要我提供一个接口,另一个模块会启动独立线程,不断的调用这个接口,来实现USB事件的分离和提取,详细的接口代码如下: #include #include #includ...
  • Rocky_zhm
  • Rocky_zhm
  • 2015-10-19 18:44:24
  • 1071
收藏助手
不良信息举报
您举报文章:Android监听UEvent事件的测试程序
举报原因:
原因补充:

(最多只允许输入30个字)