• android udev


    http://www.freesoftwaremagazine.com/articles/drivers_linux

    http://blog.csdn.net/jianchi88/article/details/6997615

    http://blog.csdn.net/linux_xiaomugua/article/details/6989386

    http://www.chinaunix.net/old_jh/4/1058833.html

    要实现 hotplug 机制,需要有用户空间的程序配合才行。对于
    pc 机的 linux 系统,采用的是 udevd 服务程序,其通过监听 NETLINK_KOBJECT_UEVENT 获
    得内核发出的 uevent 事件和环境变量,然后再查找匹配的 udev rules,根据找到的 rules 做动
    作,udev 的具体实现原理可参照网上的一些文章。在《Linux 设备模型浅析之设备篇》中讲
    过,在每个注册的 device 文件夹下会生成一个 uevent 属性文件,其作用就是实现手动触发
    hotplug 机制。可以向其中写入“add”和“remove”等命令,以添加和移除设备。在系统启动后注
    册了很多 device,但用户空间还没启动,所以这些事件并没有处理,udevd 服务启动后,会扫
    描/sys 目录里所有的 uevent 属性文件,向其写入"add”命令,从而触发 uevent 事,这样 udevd 服
    务程序就有机会处理这些事件了。在嵌入式系统中使用的是 mdev,是 udev 的简化版本,在启
    动脚本 rcS 中会有这样一句命令/sbin/mdev -s,其作用就是刚刚讲到的,扫描/sys 目录里所有的
    uevent 属性文件,向其写入"add”命令,触发 uevent 事件,从而 mdev 有机会处理这些事件。
    从上面的分析可以看出,每当内核注册设备或驱动时都会产生 uevent 事件,这样用户空间
    的 udev 或 mdev 就有机会捕捉到这些事件,根据匹配的规则作一定的处理,比如在/dev 目录下
    生成设备节点或使用 modprobe 加载驱动程序,等等。从而实现自动生成设备节点、加载驱动程
    序等等这些热拔插机制。

    uevent,即 user space event,就是内核向用户空间发出的一个事件通知,使
    得应用程序能有机会对该 event 作出反应,udev 及 mdev(busybox)就是这种应用程序。

    想研究Android从Linux驱动层到Android应用层的一整套流程,于是和刘同事做了个东东实现从驱动层到应用层的一整套通信,做完了,写个笔记备忘一下

    总共需要增改的有四个东西,驱动、jni、java、apk

    整体通信步骤如下:

    linux驱动部分,主要利用sysfs文件系统建立一个class一个device和一个file,通过uevent去改变file所存储的值并通知上层,具体为利用一个定时器以固定的时间间隔发送uevent消息

    最先接收linux发送的uevent的是vold,这是Android的一个守护进程,主要负责接收底层uevent的事件,并把此事件往上发送

    在jni层通过register_android_server_xxxx 函数不断从sysfs中的file中读取信息,,在onLoad.cpp中添加注册些服务

    在java层新写一个自己的services,重写onEvent函数不断调用jni层的注册函数而更新信息,并通过Intent向上层广播

    在apk层建立一个监听的服务不断监听Intent的事件并过滤,当捕获时改变一个textLabel的值从而显示出结果来

  • 相关阅读:
    Django超级用户
    12.23站立会议
    12.22站立会议
    12.21站立会议
    用户场景分析
    12.20站立会议
    12.19站立会议
    12.18战略会议
    四则运算
    MongoEngine中文文档
  • 原文地址:https://www.cnblogs.com/SZLLQ2000/p/5058964.html
Copyright © 2020-2023  润新知