读android系统源码情景分析笔记(一)

android2.3系统驱动模块由内核模块,硬件抽象模块,用户调用模块(jni)组成,内核模块和linux一致,硬件抽象模块主要需要定义两个结构:hw_module_t和hw_device_t。

hw_module_t包含模块id,版本号,署名和一个函数指针:

int open (struct hw_module_t* module, const char* id, struct hw_device_t** device);

hw_device_t包含版本,hw_module_t的引用和一个函数指针:

int close (struct hw_device_t* device);

必须导出一个HAL_MODULE_SYM符号引用hw_module_t结构。可以对这两个结构自定义,通过把这两个结构定义在自定义结构的开头(C惯用伎俩)。

用户调用模块通过hw_get_module函数加载硬件抽象模块。

int hw_get_module (const char* id, const struct hw_module_t** module);

第二个参数module接收硬件抽象模块导出的符号HAL_MODULE_SYM指向的结构体。

用户调用模块通过其提供的open方法打开指定id的设备,第二个参数device接收一个hw_device_t结构。open函数根据不同设备可以返回不同的hw_device_t结构,其中的close函数也可能不同。

然后用户调用模块就可以通过hw_device_t或自定义的结构调用close或自定义函数进行关闭或其他操作了。由于是在用户层,所以需要修改ueventd.rc修改内核模块提供的设备文件的访问权限。

时间: 2024-11-04 17:52:19

读android系统源码情景分析笔记(一)的相关文章

Android系统源码阅读(12):InputChannel的注册过程

Android系统源码阅读(12):InputChannel的注册过程 请对照AOSP版本:6.0.1_r50. InputManager可以获得输入事件并分发,Activity需要处理这些输入事件.那么,这两者之间如何建立的连接呢?这就需要InputChannel作为桥梁建立两者之间的通道. 1. ViewRootImpl创建InputChannel 这里ViewRoot类已经消失了,由ViewRootImpl替代.Activity在创建时会将自己的DecorView设置给对应的ViewRoo

Android系统源码阅读(13):Input消息的分发过程

Android系统源码阅读(13):Input消息的分发过程 请对照AOSP版本:6.0.1_r50.学校电脑好渣,看源码时卡半天 先回顾一下前两篇文章.在设备没有事件输入的时候,InputReader和InputDispatcher都处于睡眠状态.当输入事件发生,InputReader首先被激活,然后发送读取消息,激活Dispatcher.Dispatcher被激活以后,将消息发送给当前激活窗口的主线程,然后睡眠等待主线程处理完这个事件.主线程被激活后,会处理相应的消息,处理完毕后反馈给Dis

如何阅读Android系统源码-收藏必备

对于任何一个对Android开发感兴趣的人而言,对于android系统的学习必不可少.而学习系统最佳的方法就如linus所言:"RTFSC"(Read The Fucking Source Code).下面从知乎整理了一些优质回答,以飨读者. 巨人的肩膀 AOSP项目官方: https://source.android.com/source/index.html这个一定要先读. 项目介绍, 代码下载, 环境搭建, 刷机方法, Eclipse配置都在这里. 这是一切的基础. Androi

编译Android系统源码和内核源码

好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章

浏览Android系统源码的站点

源码之前,了无秘密 看了腾讯Bugly的公众号分享,学习了直接网上浏览android系统源码的两个站点,很不错.记录下 关于 Android 系统源码,如果不是为了深入的研究,可以直接在网上浏览: Androidxref (http://androidxref.com/), 该站点提供了一定程度上的代码跳转支持,以及非常强大的检索功能,是我们查询系统源码的首选. Grepcode (http://grepcode.com/) 也可以检索Android系统源码,与前者不同的是,它只包含Java代码

FW 编译Android系统源码和内核源码

编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,

android 系统源码在线阅读-------值得收藏(Android Platform - Lollipop, API level 21 )

无法翻墙看http://source.android.com/ android的源码,所以在 http://grepcode.com/project/repository.grepcode.com/java/ext/com.google.android/android/ 这个网址中有所有版本的android系统源码,包括framework 等,主要是系统的控件怎么实现,做android的应该去看看. 在此非常感谢提供这个网站的个人或者单位,的确打心底里感谢,我在这个上面也经常看,有所长进,因为下

【转】编译Android系统源码和内核源码

原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操

Android系统源码导入到eclipse

1.把eclipse工程配置文件复制到android源码根目录下 cp development/ide/eclipse/.classpath ./ 2. 在android源码根目录下新建文件 .project,内容为: <?xml version="1.0" encoding="UTF-8"?> <projectDescription> <name>Gingerbread</name> <comment>G