个人对Android驱动的理解,包括以下四部分:
- 驱动
跟Linux驱动开发一模一样
- 硬件抽象层(HAL)
这个要好好聊聊,好多文章都说的比较高大上,让人难懂(可能我笨)。驱动是工作在内核空间的,平时我们在 Linux 平台上做开发,写好驱动后,就可以在用户空间写应用程序,然后调用设备节点来操作具体设备了。而在Android,这个硬件抽象层其实就是在用户空间可以调用驱动的一个应用程序,由于这是在用户空间,就能使用 JNI 跟应用通信,那后面就到了Java的世界,一切都变得简单了;在做NDK开发的时候,可以绕过硬件抽象层,直接用 c/c++ 操作设备节点,供 Activity 使用,内部各种复杂的编译过程,动态链接库的生成和导入,这个工具已经全套完成了。
- JNI
Java 跟 c/c++通信的接口,具体参考某某书籍吧,一大堆的描述
- 系统服务
这部分还没理清楚,后续补充
接下来的各个小节,将以控制LED灯的开关为项目目标,分别描述各个层的实现。
- 瑞芯微 RK3066,MarsBoard 核心板及底板
- Android 4.4.2
- Linux 3.0.36+