上层APP调用底层硬件驱动过程解析
来源:互联网 发布:上海趣推网络 编辑:程序博客网 时间:2024/06/08 17:22
一、硬件驱动层
进入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底层驱动模型之二:上层容器
- 上层应用调底层驱动打不开设备文件
- EDA软件_Cadence_OrCAD Capture自带元件库汇总
- 自己修改select的样式(修改select右边的小三角)
- 字符串拼接原理
- springMVC无法访问JSP报404,但是又能访问controller
- db file sequential read-数据文件顺序读取
- 上层APP调用底层硬件驱动过程解析
- python中的try/except/else/finally语句
- QT之使用 QWaitCondition 同步线程小例子
- python 学习笔记
- linux 搭建lamp
- highchart columnrange自定义颜色
- 负载均衡高可用
- linux 3.6 启动源码分析(七) do_initcalls
- Python的第三天