一、kernel层
安卓内核层驱动程序生成设备节点/dev/... /sys/class/... /proc/... ,并直接驱动硬件设备
二、hardware层
1).硬件抽象层以模块的形式来管理各个硬件访问接口:
模块的命名规范:<MODULE_ID>.variant.so
MODULE_ID:表示模块ID
variant:表示系统的四个属性,依次按照ro.hardware、ro.product.board、ro.board.platform、ro.arch来取值[这些值通过build.prop读取的],如果读不到这四个值或者xx.xx.so找不到对应的文件,则模块最终命名为 <MODULE_ID>.default.so
2)硬件抽象层通过调用设备节点去操作驱动程序
3).so模块编译完成后最终放在了/system/lib/hw/目录下
4).通过hw_get_module函数去加载/system/lib/hw/目录下的硬件抽象层模块
三、frameworks层
1.通常在frameworks/base/core/java/android/os/目录下定义硬件访问服务接口 AIDL
2.通常在frameworks/base/servicecs/java/com/android/server/目录下实现硬件访问服务,并在SystemServer.java文件下添加对应的服务
3.通常在frameworks/base/services/jni/目录下,通过调用JNI方法去实现硬件设备读写等操作
四、app层
通过import android.so.xxxService导包,调用aido接口,来控制驱动