Android监听UEvent事件的测试程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014135607/article/details/79966983
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打印等内容。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页