05 2013 档案
摘要:在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行。今天大家对iOS 和Android 系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件。因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的。硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序;而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功能。对Android 系统上的应用软件来说,就是要在系统的Application Frameworks 层为其提供硬件服务。在前面的几篇文章中,我们着重介绍了Linux 内核层、硬件抽象层和运行时
阅读全文
摘要:我们介绍了如何为Android 系统的硬件编写驱动程序,包括如何在Linux 内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android 的Application Frameworks 层提供硬件服务。我们知道,Android 系统的应用程序是用Java 语言编写的,而硬件驱动程序是用C 语言来实现的,那么,Java 接口如何去访问C 接口呢?众所周知,Java 提供了JNI 方法调用,同样,在Android 系统中,Java 应用程序通过JNI 来调用硬件抽象层接口。在这一篇文章中,我们将介绍如何为Android 硬件抽象层接
阅读全文
摘要:简单来说,硬件驱动程序一方面分布在Linux 内核中,另一方面分布在用户空间的硬件抽象层中。接着,在Ubuntu 上为Android系统编写Linux 内核驱动程序一文中举例子说明了如何在Linux 内核编写驱动程序。在这一篇文章中,我们将继续介绍Android 系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱动程序交互。在这篇文章中,我们还将学习到如何在Android 系统创建设备文件时用类似Linux 的udev 规则修改设备文件模式的方法。step1: 进入到在hardware/libhardware/include/hardware 目录,新建hello.h
阅读全文
摘要:在第一篇文章中,我们介绍了如何在Ubuntu 上为Android 系统编写Linux内核驱动程序。在这个名为hello 的Linux 内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc 系统文件/proc/hello 和devfs 系统属性文件/sys/class/hello/hello/val。进一步,还通过cat 命令来直接访问/proc/hello 和/sys/class/hello/hello/val 文件来,以验证驱动程序的正确性。在这一篇文章里,我们将通过自己编写的C 可执行程序来访问设备文件/dev/hello。可能读者会觉
阅读全文
摘要:在Ubuntu 上为Android 系统编写Linux 内核驱动程序这里,我们不会为真实的硬件设备编写内核驱动程序。为了方便描述为Android 系统编写内核驱动程序的过程,我们使用一个虚拟的硬件设备,这个设备只有一个4 字节的寄存器,它可读可写。想起我们第一次学习程序语言时,都喜欢用“Hello, World”作为例子,这里,我们就把这个虚拟的设备命名为“hello”,而这个内核驱动程序也命名为hello 驱动程序。其实,Android 内核驱动程序和一般Linux 内核驱动程序的编写方法是一样的,都是以Linux 模块的形式实现的,具体可参考前面Android 学习启动篇一文中提到的Lin
阅读全文
摘要:这几天看到了一篇“Android驱动开发”的文章,觉得不错,但这篇文章稍微有点老,里面的程序有部分是不能编译的,因此想到了重新整理下,文章的结构和原文差不多。我的实际开发验证环境为Ubuntu+Galaxy Nexus+CM。 目录一. 在Android 内核源代码工程中编写硬件驱动程序二. 在Android 系统中增加C 可执行程序来访问硬件驱动程序三. 在Android 硬件抽象层增加接口模块访问硬件驱动程序四. 在Android 系统中编写JNI 方法在应用程序框架层提供Java 接口访问硬件五. 在Android 系统的应用程序框架层增加硬件服务接口六. ...
阅读全文

浙公网安备 33010602011771号