上层APP调用底层硬件驱动过程解析
来源:互联网 发布:unity3d鼠标点击物体 编辑:程序博客网 时间:2024/06/06 07:26
转载地址:http://blog.csdn.net/s762888517/article/details/6951493
APP应用程序->应用框架层->硬件抽象层-> 硬件驱动程序
一、硬件驱动层
进入kernel/drivers文件夹中,创建一文件夹,放入驱动程序。包括头文件,C文件,Makefile,Kconfig。同时对drivers下的Makefile跟Kconfig进行相应的添加,这样配置编译选项后,即可编译。编译完后,可以在/dev,/proc,/sys/class中得到相应的文件,其中dev下的文件即为该设备文件。
二、硬件抽象层
进入源码根目录下的hardware/libhardware/include/hardware新建头文件,在hardware/libhardware/modules中新建目录,在该目录下放入C文件调用设备文件(open函数打开/dev/XXX设备文件),最后在该目录下创建Android.mk文件,编译后得到XXX.default.so文件。重新打包后,system.img就包含我们定义的硬件抽象层模块XXX.default。
三、应用框架层
进入frameworks/base/services/jni目录,创建com_android_server_XXXService.cpp文件(#include <hardware/hello.h> 以此调用抽象层方法 ),实现jni方法。com_android_server前缀表示的是包名,表示硬件服务XXXService是放在frameworks/base/services/java目录下的com/android/server目录的。对同目录下的onload.cpp文件进行修改,这样,在Android系统初始化时,就会自动加载该JNI方法调用表。同时修改该目录下的Android.mk。
进入到frameworks/base/core/java/android/os目录,新增IXXXService.aidl接口定义文件,该文件提供功能函数。在frameworks/base目录下的Android.mk添加该aidl文件。进入frameworks/base/services/java/com/android/server目录,新增XXXService.java(主要是通过调用JNI方法来提供硬件服务),修改同目录的SystemServer.java文件,在ServerThread::run函数中增加加载HelloService的代码。
这样,重新打包后的system.img系统镜像文件就在Application Frameworks层中包含了我们自定义的硬件服务XXXService了,并且会在系统启动的时候,自动加载XXXService。这时,应用程序就可以通过Java接口来访问Hello硬件服务了。
四、APP应用层
用eclipse编写应用层的APP。程序通过ServiceManager.getService("XXX")来获得XXXService,接着通过IXXXService.Stub.asInterface函数转换为IXXXService接口。然后把出R文件的其他文件都拷到/packages/experimental下,在该APP目录下创建Android.mk文件。编译后安装该生成的apk即可使用该程序调用底层硬件驱动。
大概整个过程就这样,上层app调用框架层的java接口,java接口通过jni调用硬件抽象层,硬件抽象层则通过打开设备文件调用底层硬件驱动。
- 上层APP调用底层硬件驱动过程解析
- 上层APP调用底层硬件驱动过程解析
- 上层APP调用底层硬件驱动过程解析
- 上层APP调用底层硬件驱动过程解析
- 上层APP调用底层硬件驱动过程解析
- (转)上层APP调用底层硬件驱动过…
- linux上层app调用驱动底层的过程详解
- Android上层APP利用sysfs调用底层驱动分析
- 从上层APP到底层驱动的调用过程
- 驱动调用底层的硬件
- 从底层驱动 到上层APP的流程(2)
- 从底层驱动 到上层APP的流程(1)
- 从底层驱动 到上层APP的流程(3)
- 从底层到上层添加驱动模块
- Android上层如何调用一个底层函数
- linux底层驱动模型之二:上层容器
- linux底层驱动模型之二:上层容器
- 上层应用调底层驱动打不开设备文件
- Linux NAND BBT管理
- 64位Linux安装subversion-1.7.6时,错误undefined reference to `XML_StopParser'
- 通信学子就业岗位类型简介——GXC
- 汇编-排序实验
- Unity3D 学习笔记(二) GUI
- 上层APP调用底层硬件驱动过程解析
- 在CentOS 7上遇到的一些问题,以及自己的解决方法
- 操纵C 风格字符串标准库函数
- 安装cuda6.5
- struts2+spring+hibernate三大框架环境搭建小小总结
- 百度地图API3.1.1版之添加标注物+UI控制+定位
- UVA 10465 Homer Simpson
- Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tool
- [LeetCode] Remove Nth Node From End of List