安卓linux uevent内核上报机制实例

uevent可以实现内核通知上层的一种机制,最常见的电池状态的变化就是kernel uevent通知的,每次百分比或者其他的变化通过power_supply_changed通知上层update;

每个device下面都有kobj,找到device就可以通过kobject_uevent_env 通知android了;

以拔出T卡为例,内核通知上层。这里的T卡是一种sdio设备,普通TF卡是块设备,安卓通过块设备可以知道T卡的移除。

kernel:

Index: kernel/drivers/mmc/host/msm_sdcc.c

===================================================================

--- kernel/drivers/mmc/host/msm_sdcc.c    (revision 10898)

+++ kernel/drivers/mmc/host/msm_sdcc.c    (working copy)

@@ -77,6 +77,8 @@

#define MSM_MMC_BUS_VOTING_DELAY    200 /* msecs */

#define INVALID_TUNING_PHASE        -1

+struct device *mmc1_dev;

+static int obj_enable =0;

+static int set_kobject_env(const char *val, struct kernel_param *kp)

+{

+    printk("%s called 00 \n",__func__);

+   kobject_uevent_env(&mmc1_dev->kobj, KOBJ_CHANGE, NULL);

+    return 0;

+}

+module_param_call(obj, set_kobject_env, param_get_uint,

+                    &obj_enable, 0644);

+

static irqreturn_t

msmsdcc_platform_status_irq(int irq, void *dev_id)

{

@@ -6186,6 +6205,11 @@

ret = device_create_file(&pdev->dev, &host->idle_timeout);

if (ret)

goto remove_polling_file;

+

+    if(mmc->index ==1)

+        mmc1_dev = &pdev->dev;

+

+

return 0;

java:

if (new File("/sys/devices/platform/msm_sdcc.3/uevent").exists()) {

mInvalidChargerObserver.startObserving(

"DEVPATH=/devices/platform/msm_sdcc.3");

}

private final UEventObserver mInvalidChargerObserver = new UEventObserver() {

@Override

public void onUEvent(UEventObserver.UEvent event) {

Slog.v(TAG, "Uevent changed ");

final int invalidCharger = "1".equals(event.get("SWITCH_STATE")) ? 1 : 0;

synchronized (mLock) {

if (mInvalidCharger != invalidCharger) {

mInvalidCharger = invalidCharger;

updateLocked();

}

}

}

};

时间: 2024-10-25 10:41:04

安卓linux uevent内核上报机制实例的相关文章

Linux内核同步机制

http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率.首先,看看我们最熟悉的两种机制——信号量.锁. 一.信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中): [cpp] view plaincopyprint? struct semaph

android &amp; Linux uevent机制

Linux uevent机制 Uevent是内核通知android有状态变化的一种方法,比如USB线插入.拔出,电池电量变化等等.其本质是内核发送(可以通过socket)一个字符串,应用层(android)接收并解释该字符串,获取相应信息. 一.Kernel侧: UEVENT的发起在Kernel端,主要是通过函数 int kobject_uevent_env(struct kobject *kobj, enum kobject_action action,char *envp_ext[]) 该函

基于wakeup_source的linux内核睡眠机制

一:wakeup_source简介: linux 3.4内核PM使用了wakeup_source来保持唤醒状态,也就是keep awake.之前android一直是基于Linux加入了wake_lock机制来阻止系统休眠,后来Linux 3.4内核加入了wakeup_source来管理,安卓4.4跟着升级内核也就摒弃了自己的繁杂的wake_lock机制,在对上层接口并不改变,在内核wake_lock实现直接基于wakeup_source来实现的.当然也会带来debug上的一些问题,比如以前的wa

linux下 signal信号机制的透彻分析与各种实例讲解

转自:http://blog.sina.com.cn/s/blog_636a55070101vs2d.html 转自:http://blog.csdn.net/tiany524/article/details/17048069 首先感谢上述两位博主的详细讲解. 虽然内容有点长,但是分析的很全面,各种实例应用基本都考虑到了. 本文将从以下几个方面来阐述信号: (1)信号的基本知识 (2)信号生命周期与处理过程分析 (3) 基本的信号处理函数 (4) 保护临界区不被中断 (5) 信号的继承与执行 (

Linux内核同步机制--转发自蜗窝科技

Linux内核同步机制之(一):原子操作 http://www.wowotech.net/linux_kenrel/atomic.html 一.源由 我们的程序逻辑经常遇到这样的操作序列: 1.读一个位于memory中的变量的值到寄存器中 2.修改该变量的值(也就是修改寄存器中的值) 3.将寄存器中的数值写回memory中的变量值 如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿.在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同

[内核同步]浅析Linux内核同步机制

转自:http://blog.csdn.net/fzubbsc/article/details/37736683?utm_source=tuicool&utm_medium=referral 很早之前就接触过同步这个概念了,但是一直都很模糊,没有深入地学习了解过,近期有时间了,就花时间研习了一下<linux内核标准教程>和<深入linux设备驱动程序内核机制>这两本书的相关章节.趁刚看完,就把相关的内容总结一下.为了弄清楚什么事同步机制,必须要弄明白以下三个问题: 什么是互

Linux 内核同步机制

    本文将就自己对内核同步机制的一些简要理解,做出一份自己的总结文档.     Linux内部,为了提供对共享资源的互斥访问,提供了一系列的方法,下面简要的一一介绍. Technorati 标签: 互斥 Linux 中断屏蔽 使用方法: local_irq_disable() //屏蔽中断 critical section //临界区 local_irq_enable() //开中断 .csharpcode, .csharpcode pre { font-size: small; color

Linux内核OOM机制的详细分析(转)

Linux 内核 有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了 防止内存耗尽而内核会把该进程杀掉.典型的情况是:某天一台机器突然ssh远程登录不了,但能ping通,说明不是网络的故障,原因是sshd进程被 OOM killer杀掉了(多次遇到这样的假死状况).重启机器后查看系统日志/var/log/messages会发现 Out of Memory: Kill process 1865(sshd)

Linux内核抢占机制 - 实现

本文首发于 http://oliveryang.net,转载时请包含原文或者作者网站链接. 本文主要围绕 Linux 内核调度器 Preemption 的相关实现进行讨论.其中涉及的一般操作系统和 x86 处理器和硬件概念,可能也适用于其它操作系统. 1. Scheduler Overview Linux 调度器的实现实际上主要做了两部分事情, 任务上下文切换 在 Preemption Overview 里,我们对任务上下文切换做了简单介绍.可以看到,任务上下文切换有两个层次的实现:公共层和处理