Android底层驱动开发(一)
2015-06-02 20:31
351 查看
1 Android为什么要加入硬件抽象层HAL
A 统一硬件调用接口,所以利用HAL屏蔽linux驱动的复杂不统一的接口
B 解决GPL版权问题,由于linux内核基于GPL协议,这个GPL协议需要开源,而Android遵守Apache License2.0协议,这个协议不要求开源,因此google玩了个穿越,将原本位于Linux驱动中的敏感代码(业务逻辑代码)向上移动了一层,这样这些敏感代码就拜托了GPL协议的束缚,那些不想开源的linux驱动作者不想开源现在就可以不用开源了。
C 针对一些特殊要求。对于有些硬件,可能要访问用户空间资源,在内核不方便完成工作需求,在这种情况下,可以利用位于用户空间的HAL代码来辅助linux驱动完成一些工作。
2 Android HAL架构
目前HAL存在两种构架,位于libhardware_legacy目录下的“旧HAL架构”和位于libhardware目录下的“新HAL架构”。两种框架如下图所示:
3 Android底层驱动开发流程
第一步: 编写简单的linux驱动
第二步:编写HAL层代码
第三步:编写JNI层代码
第四步:编写调用JNI的Java库
第五步:Android的APP层测试
A 统一硬件调用接口,所以利用HAL屏蔽linux驱动的复杂不统一的接口
B 解决GPL版权问题,由于linux内核基于GPL协议,这个GPL协议需要开源,而Android遵守Apache License2.0协议,这个协议不要求开源,因此google玩了个穿越,将原本位于Linux驱动中的敏感代码(业务逻辑代码)向上移动了一层,这样这些敏感代码就拜托了GPL协议的束缚,那些不想开源的linux驱动作者不想开源现在就可以不用开源了。
C 针对一些特殊要求。对于有些硬件,可能要访问用户空间资源,在内核不方便完成工作需求,在这种情况下,可以利用位于用户空间的HAL代码来辅助linux驱动完成一些工作。
2 Android HAL架构
目前HAL存在两种构架,位于libhardware_legacy目录下的“旧HAL架构”和位于libhardware目录下的“新HAL架构”。两种框架如下图所示:
3 Android底层驱动开发流程
第一步: 编写简单的linux驱动
第二步:编写HAL层代码
第三步:编写JNI层代码
第四步:编写调用JNI的Java库
第五步:Android的APP层测试
相关文章推荐
- Android之NDK开发
- android 上传文件
- android开发资源收集贴
- Android 自动化测试之------ Monkey工具
- Android Studio使用jni、so库
- Android 数据库框架ormlite 使用精要
- android Launcher基础知识
- Android Audio 音频输出设备切换
- Android 官方博客 - Android应用程序的内存分析(翻译)(转)
- Android编程宝典-第一章-初识Android-笔记
- 菜鸟学Android笔记(十六):零散的知识点
- Android开发设计模式之——单例模式
- fragment 里需要activity。Android-The method findViewById(int) is undefined for the type first (Fragment)
- Android使用第三方库.so被删掉问题
- MTK6577+Android4.0背光点亮
- Android手机的所需的一些权限
- 修改游戏图标
- Android中的ContentProvider的学习笔记.
- Android 快速开发框架:推荐10个框架:afinal、ThinkAndroid、andBase、KJFrameForAndroid、SmartAndroid、dhroid..
- Android随笔:单元测试的好处