Android驱动开发流程 及 系统分层模型

【Android系统分层模型】

Android驱动开发流程 及 系统分层模型_第1张图片


【驱动开发流程】

    1、下载 Android 源码;


    2、下载 Linux Kernel 源码,将其放置于 Android 源码根目录的 kernel/ 文件夹下;

    3、编写设备驱动源码。按照惯例是在 Linux kernel 源码根目录下的 driver/ 路径新建与设备同名的 xxx 文件夹,并添加驱动源码文件(h文件、c文件、Kconfig 和 Makefile);如果是音频驱动,一般添加到根目录的 sound/ 文件夹中;

    4、编写 HAL 层源码,这是供 Application Frameworks 层和内核交互用的。按照惯例是在 Android 源码根目录下的 hardware/libhardware/include/hardware/ 路径中添加与设备 xxx 同名的 HAL 头文件 xxx.h;在 hardware/libhardware/modules/ 路径中新建 xxx 文件夹,并添加 HAL c文件 xxx.c、Android.mk文件;

    5、编写 JNI 方法,JNI 的作用是实现用 java 接口调用 c 接口。对应于 Android 系统中的动作就是 APP 应用程序通过 JNI 方法调用 HAL 层接口。按照惯例,JNI 代码使用 C++ 编写,源文件存放于 Android 源码根目录的 frameworks/base/services/jni/ 路径下 (在我的实际工程项目中,路径是 frameworks/base/services/core/jni/),文件名通常为 com_android_server_xxxService.cpp;打开这个目录下的 onload.cpp 文件,添加 register_android_server_xxxService() 函数声明,以实现 Android 系统初始化时自动加载 JNI 方法表;打开这个目录下的 Android.mk 文件,在 LOCAL_SRC_FILES 变量末位添加我们的 cpp 文件;

    6、编写 Application Frameworks 层的 API 接口,以使上层 APP 能通过 JNI 访问 HAL 接口来操作底层硬件;

    7、编写 APP 应用程序,在应用程序中调用硬件。


【注意事项】

    一般来说,在开发团队中,驱动工程师只需要完成步骤1~4即可,步骤5~7分别由其他工程师完成。


【参考资料】

    [1] 《Android硬件抽象层(HAL)概要介绍和学习计划》

    [2] 《在Ubuntu上为Android系统编写Linux内核驱动程序》

    [3] 《在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序》

    [4] 《在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口》

    [5] 《在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务》


你可能感兴趣的:(嵌入式,Linux,C,Android)